use Parallel::ForkManager; my $pm = new Parallel::ForkManager(4); foreach my $base_dir (@base_dirs) { my $storable_file = $storable_dir.$f; $pm->start and next; # do the fork `/home/qiang/file2.pl $storable_file $base_dir`; $pm->finish; } $pm->wait_all_children;