eachはハッシュリストからキーと値のペアを返す。
"最後まで取り出す"と、内部でもっている読み出し位置を先頭に戻す。
最初に呼び出した時に、読み出し位置がリセットされるという事ではない。
my %hash=( 1 => 'A', 2 => 'B', 3 => 'C', ); for(1..10){ while(my($k,$v)=each(%hash)){ print "$_ => ($k,$v)\n"; last; } }
といった感じに、eachを行ってる処理でlastを呼び出してしまうと、
each関数が隠し持つ、今どのキーを指してるか、という情報が一巡しないまま、処理を抜けてしまうので、
次に呼び出した時は、次のキーと値を返してくる。
今回の例では、ハッシュにキーを3つセットしてあるので、3回呼び出すと一巡して4回目で戻る。
キーによる順序は定まっていないので、取り出せる順序は推測できないが、
同じハッシュからkeys,valuesで得られる順序とeachで取り出せる順序は等しい事は保障されてる。