in reply to Caller, caller, wherefore art thou, caller?

perlfunc says:

"When the hash is entirely read, a null array is returned in list context (which when assigned produces a false (0) value), and undef in scalar context. The next call to each after that will start iterating again. There is a single iterator for each hash, shared by all each, keys, and values function calls in the program; it can be reset by reading all the elements from the hash, or by evaluating keys HASH or values HASH."

If run the following program, see how each "each" continue from the last one. (The 4th print get a warning which indicates the end of the iteration). The 5th restart from the begining:

use strict; use warnings; my %hash = ('a' => 1, 'b' => 2, 'c' => 3); my $key = (each(%hash))[0]; print $key; $key = (each(%hash))[0]; print $key; $key = (each(%hash))[0]; print $key; $key = (each(%hash))[0]; print $key; $key = (each(%hash))[0]; print $key;

The following code resets the iteration with a keys(), see how the second pair returns the same results as the first pair:

use strict; use warnings; my %hash = ('a' => 1, 'b' => 2, 'c' => 3); my $key = (each(%hash))[0]; print $key; $key = (each(%hash))[0]; print $key; keys(%hash); $key = (each(%hash))[0]; print $key; $key = (each(%hash))[0]; print $key;