my $priority; again: $priority->{$thing}->{$index}->{timer} = $timer; # $time are external value #and then check this out... if($priority->{$thing}->{$index}->{timer} < 1000){ #enqueued by wait and then again check accepted new external value $priority->{$thing}->{$index}->{wait} = $priority->{$thing}->{$index}->{wait} + 100; ... goto again; # how this make not blocked? }else{ do_smth(); }