each

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で取り出せる順序は等しい事は保障されてる。