in reply to to limit active processes

If your not stuck on using processes, it's pretty simple with threads.

#! perl -slw use strict; use threads; use Thread::Queue; our $W ||= 3; my( $dir, $re ) = @ARGV; my $Q = new Thread::Queue; my $running : shared = 0; sub worker { $running++; sleep 1; while( $Q->pending ) { my $file = $Q->dequeue; print "Processed $file"; } $running--; } $Q->enqueue( grep{ m[$re] } glob "$dir/*" ); threads->new( \&worker )->detach for 1 .. $W; sleep 1 while $running < $W; sleep 1 while $running; __END__ [ 1:55:22.37] P:\test>419115 . htm$ Processed ./370949.htm Processed ./376142.htm Processed ./377082db.htm [ 1:55:31.92] P:\test>419115 data dat$ Processed data/1mb.dat Processed data/1millionlines.dat Processed data/5mb.dat Processed data/bin.dat

Examine what is said, not who speaks.
Silence betokens consent.
Love the truth but pardon error.