while (not_done_yet) { if (queue not full) { add new element to queue } @new_queue = (); foreach $element (@queue) { if (state==1) { blah blah; state=2 } ... if (timed_out) { next; } push $element, @new_queue; } @queue = @new_queue; }