#! /usr/bin/perl use strict; use warnings; use Data::Dumper; use threads; use Thread::Queue; my $Q = Thread::Queue->new(); sub manage { async{ $Q->enqueue({ $_->tid => $_->join }) }->detach for @_ } sub worker { print "Worker started.\n"; # 1 while 1; return 42; } manage( threads->create(\&worker) ); print Dumper $_ for $Q->dequeue_timed(2);