sub find_stuff { my $self = shift; while (my $k = each %$self) { return $k if ($self->{$k}->{blablah}); } return undef; } #### sub find_stuff { my $self = shift; my $first = undef; while (1) { my $r = each %$self; unless ($r) { $r = each %$self; last unless defined $r; } last if defined ($first) && $first eq $r; $first = $r unless defined $first; # do stuff quitting the loop at will } return undef; }