while( my ($k,$v) = each %hoge ){ print "$k:$v\n"; }
最後までループが回る分には何も問題は無い。
途中で止めると内部イテレータがリセットされないので、次に同じことをすると続きからになってしまう。
イテレータをリセットさすには keys %hoge; 等で空回りさせる。
参考:
#!/usr/bin/perl %hoge = ('ido',36, 'keido',140, 'shindo', 4); while( my ($k,$v) = each %hoge ){ print "$k:$v\n"; last; } keys %hoge; while( my ($k,$v) = each %hoge ){ print "$k:$v\n"; }