my @queue = (1, 2, 3, 4); while (@queue) { my $current = shift @queue; next unless subA($current); push @queue, subB($current); }