もちろん、これは必要ありません。ここで何が起こっているのか知りたいだけです。私は何か簡単なものが欠けていますか?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
(each)は、 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