Perl子循环无法重置迭代内部变量



当下一次跳出子循环后进入子循环时,子循环的迭代应该从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

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;
    }
}

最新更新