Local map-reducing by Parallel::ForkManager
use strict; use warnings; use utf8; use 5.010000; use Array::Split qw/split_by/; use Parallel::ForkManager; use List::Util qw/sum/; my $WORKER_NUM = 10; my $SPLIT_NUM = 1000; my @data = 1..10000; my @data_ary = split_by($SPLIT_NUM); my $pm = Parallel::ForkManager->new($WORKER_NUM); my $total_result; $pm->run_on_finish( sub { my ($pid, $exit_code, $ident, $exit_signal, $core_dump, $data) = @_; $total_result += $$data; } ); for my $set (split_by($SPLIT_NUM, @data)) { my $pid = $pm->start and next; my $result = sum map { sin $_ } @$set; say "Result of $$: $result"; $pm->finish(0, \$result); } $pm->wait_all_children(); say "Result: $total_result";