use strict; use warnings; use MCE::Child qw( ); use Time::HiRes qw( time ); my @testLists = qw( sun moon wind air ); my $opts = 'foo'; my $status = 0; sub regressions { my ($opts, $list) = @_; print "$$: $list\n"; sleep 1; # simulate processing return 1; } my $start = time(); MCE::Child->init( max_workers => 2, on_finish => sub { my ( $pid, $exit_code, $ident, $exit_signal, $core_dump, $data ) = @_; if ( $exit_code || $exit_signal || $core_dump ) { # Handle error. } $status += $data->{ status }; } ); for my $list ( @testLists ) { MCE::Child->create(sub { my $status = regressions( $opts, $list ); return { status => 1 }; }); } MCE::Child->wait_all(); print "status: $status\n"; printf "duration: %0.3f seconds\n", time() - $start; __END__ 27481: sun 27482: moon 27483: wind 27484: air status: 4 duration: 2.013 seconds