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