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