while (1) { my @todo = grep ! defined $links{$_}{something}, keys %links or last; while (@todo) { my $one = shift @todo; # process $links{$one} } }