#! perl -slw use strict; my @dates = 1 .. 10; my @pids; (my $cmd = <<'CMD' ) =~ s[\s+][ ]g; -wle"print qq[task $ARGV[0] starting]; sleep rand( 10 ); print qq[task $ARGV[ 0 ] finishing];" CMD while( my $date = pop @dates ) { push @pids, system 1, 'perl.exe', "$cmd $date"; if( @pids >= 5 ) { my $kid = wait; @pids = grep $_ != $kid, @pids; } } waitpid $_, 0 for @pids;