#!/usr/bin/perl use strict; use warnings; use Thread::Pool; my %resolved : shared; my $pool = Thread::Pool->new( { workers => 3, do => \&do, monitor => \&monitor, } ); $pool->job($_) for 1 .. 100; $pool->shutdown; print join("\t",($_,$resolved{$_}->{2},$resolved{$_}->{3},$resolved{$_ +}->{4})), $/ for sort { $b <=> $a } keys %resolved; sub do { my %sh; $sh{2} = $_[0] * $_[0]; $sh{3} = $_[0] * $_[0] * $_[0]; $sh{4} = $_[0] * $_[0] * $_[0] * $_[0]; $resolved{$_[0]} = \%sh; $_[0]; } sub monitor {return 1}