use Parallel::ForkManager qw( ); my $pm = Parallel::ForkManager->new(int(@files/4)); for my $file (@files) { my $pid = $pm->start and next; ... do something with $file ... $pm->finish; # Terminates the child process }