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