use Parallel::ForkManager; my $pm = new Parallel::ForkManager(30); foreach my $line (@array) { $pm->start and next; # process here $pm->finish; } $pm->wait_all_children;