local $\ = "\n"; my %h = map { $_ => 1 } qw( a b c d ); for my $pass (1..3) { print "Pass $pass:"; while (my ($k,$v) = each %h) { print $k; last if $pass == 1; } } #### Pass 1: c Pass 2: a <---- 'c' missing b d Pass 3: c a b d #### local $\ = "\n"; my %h = map { $_ => 1 } qw( a b c d ); for my $pass (1..3) { print "Pass $pass:"; keys %h; # Reset iterator while (my ($k,$v) = each %h) { print $k; last if $pass == 1; } } #### Pass 1: c Pass 2: c <---- Welcome back a b d Pass 3: c a b d