if ($a) { my $manager = new Parallel::Forkmanager( 10 ); foreach $a (@a) { $manager->start and next; print $a; discover ($a); $manager->finish; } if (b) { discover (b); sub discover { do lots of repetitive stuff }