dポイントプレゼントキャンペーン実施中!

perl5.8ですがeach関数を使って何回か動かすと、ハッシュ内にあるはずのデータが取得できなくなります。

my %hash = ('a'=>100, 'b'=>50);
for(1..100){
while( my ($k, $v) = each %hash ){
if($k eq 'a'){
... 通過しなくなる。
}
}
}

PHPでは、配列に対してですが、reset関数というものがありますが
perlでは、何か対策でもあるのでしょうか?

現在は、keys関数で代用しています。 eachでループは無理なのでしょうか?

A 回答 (1件)

Perl ではハッシュごとにこっそりと反復子があって, each や keys, values ではこの隠れた反復子を走査します. この反復子は


・each で全部調べ列挙し終えた
・keys を使った
・values を使った
のいずれかの時点でリセットされます.
逆に言えば, これらのいずれかできちんとリセットしないと正しく動作しないはずです.
このようなループは, each だとつくりにくいです.
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!