Using perl Syntax Highlighting
#!/usr/bin/perl -w
use strict;
use LWP::Simple;
use threads;
use threads::shared;
my @urls = (
"http://baboonsoftware.com/",
"http://google.com",
"http://yahoo.com",
"http://perl.com"
);
my @threads;
my $i;
for($i=0; $i<scalar(@urls); $i++){
$threads[$i] = threads->new(
\&downloadURL,
$urls[$i],
"codigo_reviews" . $i . ".txt"
);
}
#Verificamos que todo haya descargado
for ($i=0; $i < scalar(@threads); $i++) {
my $result = $threads[$i]->join();
if( !$result ){
print "Error de descarga en $urls[$i]\n";
}
else{
print "$urls[$i]: DESCARGADO\n";
}
}
exit(1);
sub downloadURL{
my $url = shift;
my $file = shift;
print "Descargando $url\n";
my $content = get($url);
open my $FILE, '>', $file or return(0);
print {$FILE} $content;
close $FILE;
return (1);
}
use strict;
use LWP::Simple;
use threads;
use threads::shared;
my @urls = (
"http://baboonsoftware.com/",
"http://google.com",
"http://yahoo.com",
"http://perl.com"
);
my @threads;
my $i;
for($i=0; $i<scalar(@urls); $i++){
$threads[$i] = threads->new(
\&downloadURL,
$urls[$i],
"codigo_reviews" . $i . ".txt"
);
}
#Verificamos que todo haya descargado
for ($i=0; $i < scalar(@threads); $i++) {
my $result = $threads[$i]->join();
if( !$result ){
print "Error de descarga en $urls[$i]\n";
}
else{
print "$urls[$i]: DESCARGADO\n";
}
}
exit(1);
sub downloadURL{
my $url = shift;
my $file = shift;
print "Descargando $url\n";
my $content = get($url);
open my $FILE, '>', $file or return(0);
print {$FILE} $content;
close $FILE;
return (1);
}
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
Podrías aún hacerle algunas modificaciones al código, por ejemplo, la función downloadURL() regresa un valor de 0 si hubo error al descargar el url, o 1 si todo salió bien. Como estoy usando el LWP::Simple, no compruebo que se haya tomado la página correctamente, ahí podrías usar el HTTP::Request por ejemplo, para comprobar que realmente pudiste tomar la página antes de escribir el archivo.
El script hace un archivo con cada página tomada, esto también lo puedes modificar, quizá podrías al final pegar todos los archivos en uno solo como querías.
En fin, creo que es muy práctico el código, y como dices, hace un thread smultaneo por cada url.
Saludos