use v5.32; use Parallel::ForkManager; use Data::Dumper; my $pm = Parallel::ForkManager->new(8); $pm->set_waitpid_blocking_sleep(0); our @results; $pm->run_on_finish( sub { my ($pid, $exit_code, $ident, $exit_signal, $core_dump, $data_ref) = @_; push @results, ${$data_ref}; }); 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; $pm->finish(0, \$ans); # exit the child process } $pm->wait_all_children; say scalar(@results); # print Dumper(\@results);