#! perl -slw use strict; use threads; use Thread::Queue; sub worker { my $Q = shift; open my $pipe, '-|', q[ perl theOtherScript.pl] or die $!; while( my $url = $Q->dequeue() ) { print $pipe $url; } } our $THREADS //= 4; my $Q = new Thread::Queue; my @workers = map threads->create( \&worker, $Q ), 1 .. $THREADS; $Q->enqueue( $url ) while ...; ## fetch urls from somewhere and Q them $Q->enqueue( (undef) x $THREADS ); $_->join for @workers;