#! perl -sw use 5.010; use strict; use threads ( stack_size => 0 );; use Thread::Queue; sub thread { my $tid = threads->tid; require LWP::Simple; my( $Q, $dir ) = @_; while( my $url = $Q->dequeue ) { my( $file ) = $url =~ m[/([^/]+)$]; my $status = LWP::Simple::getstore( $url, "$dir/$file" ); printf STDERR "[$tid] $url => $dir/$file: $status\n"; } } our $T ||= 4; our $DIR ||= '.'; say scalar localtime; my $Q = new Thread::Queue; my @threads = map threads->create( \&thread, $Q, $DIR ), 1 .. $T; chomp, $Q->enqueue( $_ ) while <>; $Q->enqueue( (undef) x $T ); $_->join for @threads; say scalar localtime;