use Time::HiRes qw[ sleep ]; ... until( $dieNow ) { sleep( $timeout / 10 ); if( my $dgram = $Q->dequeue_nb() ) { ## Act on $dgram } else { ## Do housekeeping (if required). } }