use threads; use threads::shared; use Data::Dumper qw( Dumper ); use Thread::Pool::Simple qw( ); my $state :shared = shared_clone({test1 => {test1 => 123}, test2 => {test2 => 'abc'}}); sub worker { my ($id) = @_; my $data = $state->{$id}; print "Got Data: ".Dumper($data); return { success => 1 }; } { my $tp = Thread::Pool::Simple->new(min => 1, max => 10, do => [ \&worker ]); my $id1 = $tp->add('test1'); my $id2 = $tp->add('test2'); print "return 1: ".Dumper($tp->remove($id1)); print "return 2: ".Dumper($tp->remove($id2)); }