use Thread; use Thread::Queue; use LWP::Simple; use strict; my $q = new Thread::Queue; $q->enqueue qw( http://www.slashdot.org/ http://www.freshmeat.net/ http://www.perlmonks.org/ http://www.mozilla.org/ http://dada.perl.it/ http://www.google.com/ http://www.linux.com/ http://www.beachside.net/ http://www.perl.com/ http://www.httptech.com/ ); while ($q->pending) { my $kid; my @threads = Thread->list; my $current = scalar(@threads); if ($current < 6) { my $url = $q->dequeue; print "Retrieving $url\n"; $kid = new Thread(\&get_url, $url); } } $q->enqueue(undef); # Don't know if I even need this part; it has no effect at this point for (Thread->list) { if ($_->tid && !Thread::equal($_, Thread->self)) { $_->join; } } sub get_url { my $url = shift; get($url); print "Retrieved $url\n"; }