if ($a) { foreach $a (@a) { print $a; discover ($a); } } if ($b) { print $b: discover ($b); } sub discover { ## do lots of repetitive stuff } #### 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 }