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

时间:2014-07-18 15:25:28

标签: perl loops

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

1 个答案:

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