Me han mandado un ejercicio en el que necesito, por un lado, crear dos módulos desde cero que hagan lo siguiente:
- Módulo 1 ("Contenido.pm"): pasar una URL en la "command line" y obtener el contenido de dicha URL.
- Módulo 2 ("Show.pm"): extraer solo las URL de la página pasada en la "command line" y hacer "print" de las mismas.
Entonces, tengo el script que funciona perfectamente que sería este:
Using perl Syntax Highlighting
- #!/usr/bin/perl
- use strict;
- use warnings;
- use LWP::UserAgent;
- use HTML::LinkExtor;
- ## parse content, extract links and make them absolute
- use Digest::MD5 qw(md5_hex);
- my $url = $ARGV[0]; ## Url passed in command
- if ($url !~ m{^https?://[\w]+-?[\w]+\.com/?}i) {
- exit(0); ## Program stops if not valid URL
- }
- my $ua = LWP::UserAgent->new;
- $ua->timeout( 10 );
- my $response = $ua->get($url);
- my $content = $response->decoded_content;
- my $base = $response->base; ## Absolutifies relative links from response
- my @links;
- my $p = HTML::LinkExtor->new(
- sub {
- my ($tag, %attrs) = @_;
- if ($tag eq 'a' && $attrs{href}) {
- push @links, "$attrs{href}"; ## stringify
- }
- },
- $base,
- );
- $p->parse($content);
- $p->eof;
- for my $link (@links) {
- print "$link\n";
- print "Digest for the above URL is " . md5_hex($link) . "\n";
- }
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4
Entonces, estoy haciendo el Módulo 1 (pasar la URL y extraer el contenido), que está quedando así:
Using perl Syntax Highlighting
- package Contenido;
- use strict;
- use warnings;
- use LWP::Simple;
- sub content {
- my $url = $ARGV[0];
- if ($url !~ m{^https?://[\w]+-?[\w]+\.com/?}i) {
- exit(0);
- }
- my $content = LWP::Simple::get($url) || exit(0);
- };
- 1;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Luego, en el Módulo 2 (extraer las URL y hacer "print"), me he dado cuenta de que no puedo enlazar la variable $url del primero. Creo que estoy cometiendo un error muy básico y quizá esa parte deba ir en el script principal ejecutable... Igual es que no se puede hacer en 2 módulos por separado y debe ser uno, os muestro lo que llevo:
Using perl Syntax Highlighting
- package Show;
- use strict;
- use warnings;
- use LWP::UserAgent;
- use HTML::LinkExtor;
- ## parse content, extract links and make them absolute
- sub urls {
- my $ua -> LWP::UserAgent->new;
- $ua->timeout( 10 );
- my $response = $ua->get($url)
- ## ...
- };
- 1;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Entonces, de momento el script general lo he empezado pero al ver los problemas no puedo seguirlo como lo tenía pensado en mi cabeza:
Using perl Syntax Highlighting
- #!/usr/bin/perl
- use strict;
- use warnings;
- use lib '/Users/macbookair/training/lib';
- use Contenido;
- Contenido::content();
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
¿Me podríais orientar un poco? La verdad es que me he atascado.
Muchísimas gracias.