use v5.32; use MCE::Shared; use Parallel::ForkManager; use Data::Dumper; my $pm = Parallel::ForkManager->new(8); $pm->set_waitpid_blocking_sleep(0); # create a shared array object # this starts the shared-manager process our $results = MCE::Shared->array(); our @duplicated = (10..20); our $ctr = 0; say "processing duplicates..."; LOOP: foreach my $pid (@duplicated) { unless ($ctr % 1000) {say $ctr;} $ctr++; $pm->start and next LOOP; # do the fork #do stuff my $ans = $pid; $results->push($ans); $pm->finish; # exit the child process } $pm->wait_all_children; # destroy the shared object and retrieve the array # unblesses MCE::Shared::Array, becoming plain array ref $results = $results->destroy({ unbless => 1 }); # stop the shared-manager process MCE::Shared->stop; say scalar(@{$results}); # print Dumper($results);