Oczywiście tego nie potrzebuję; Po prostu ciekawi mnie, co tu się dzieje. Czy mi brakuje czegoś prostego? Czy mogę liczyć na to zachowanie we wszystkich wersjach 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";
}
wyjścia
deleted one; remaining: zero two
deleted zero; remaining: two
deleted two; remaining:
man perlfunc
(każdy) nie wyjaśnia, dlaczego natomiast pętla kontynuuje gdy $k
jest przypisany 0. Kod zachowuje się tak, jakby stan na while
pętli był ($k = each %h, defined $k)
.
Jeśli warunek pętli jest faktycznie zmieniony ($k = each %h, $k)
następnie robi rzeczywiście przystanku przy $k = 0
jak oczekiwano.
zatrzymuje się również na $k = 0
na następny reimplementacja 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";
}
wyjść tylko:
deleted one; remaining: zero two