【发布时间】:2010-09-18 06:21:31
【问题描述】:
显然,我不需要这个;我只是好奇这里发生了什么。我失踪了吗 简单的东西?我可以在所有版本的 Perl 中依赖这种行为吗?)
Perl v5.8.8:
%h = ( 0=>'zero', 1=>'one', 2=>'two' );
while ($k = each %h) {
$v = delete $h{$k};
print "deleted $v; remaining: @h{0..2}\n";
}
输出
deleted one; remaining: zero two
deleted zero; remaining: two
deleted two; remaining:
man perlfunc(每个)没有解释为什么
当 $k 被赋值为 0 时,while 循环继续。
代码的行为就像while 循环中的条件一样
是($k = each %h, defined $k)。
如果循环条件实际改为
($k = each %h, $k) 确实如此
按预期停在$k = 0。
它也停在$k = 0 用于以下
重新实现each:
%h = ( 0=>'zero', 1=>'one', 2=>'two' );
sub each2 {
return each %{$_[0]};
}
while ($k = each2 \%h) {
$v = delete $h{$k};
print "deleted $v; remaining: @h{0..2}\n";
}
只输出:
deleted one; remaining: zero two
【问题讨论】:
标签: perl hash each while-loop