############# code starts here ############# use strict; use threads; use threads::shared; use Thread::Queue::Any; our $| = 1; my $QUEUE : shared; my $TERMINATE : shared = 0; my $THREAD; sub TimeThread { while (!$TERMINATE) { sleep 1; $QUEUE->enqueue(scalar(localtime())); } } $SIG{TERM} = sub { $TERMINATE=1; $THREAD->join; exit; }; $QUEUE=Thread::Queue::Any->new; $THREAD=threads->new(\&TimeThread); while (1) { sleep 1; if ($QUEUE->pending) { ######## This is really weird! ######## my $time = $QUEUE->dequeue; print $time; ### NOT OK #print $QUEUE->dequeue; ### OK. } } ############# code ends here ################## #### print $QUEUE->dequeue;