Мне это не нужно, очевидно; Мне просто интересно, что здесь происходит. Я пропустил что-то простое? Могу ли я рассчитывать на такое поведение во всех версиях 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
было ($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