use Paralle::ForkManager; my $pm = new Parallel::ForkManager(x); # where x = number of forks foreach ($item) @items){ $pm->start and next; #do stuff in parallel here $pm->finish; } $pm->wait_all_children;