在下次从它跳转后进入子循环时,子循环的迭代应该从begin开始:
#!perl
use 5.014;
my %hash = ( "a" => 1, "b" => 2 , "c" => 3);
my $pos = 0;
POS:
while ($pos < 4) {
$pos++;
while (my ($key, $value) = each %hash) {
say "key: $key value: $value";
next POS;
}
}
但结果如下:
$ perl bugs-loop.pl
key: c value: 3
key: a value: 1
key: b value: 2
如何获得以下结果:
key: c value: 3
key: c value: 3
key: c value: 3
答案 0 :(得分:2)
keys
重置迭代器。重置HASH或ARRAY的内部迭代器(参见each
)。特别是,在void上下文中调用keys
会重置迭代器而不会产生其他开销。
#!perl
use 5.014;
my %hash = ( "a" => 1, "b" => 2 , "c" => 3);
my $pos = 0;
POS:
while ($pos < 4) {
$pos++;
while (my ($key, $value) = each %hash) {
say "key: $key value: $value";
keys %hash; # Reset iterator since we're bailing out.
next POS;
}
}