use Parallel::ForkManager qw( ); my @testLists = ...; my $status = 0; my $pm = Parallel::ForkManager->new( 2 ); $pm->run_on_finish(sub { my ( $pid, $exit_code, $ident ) = @_; $status += $exit_code; }); for my $list ( @testLists ) { $pm->start and next; my $status = regressions( $opts, $list ); $status = 255 if $status > 255; $pm->finish( $status ); } $pm->wait_all_children();