no necesito esto, obviamente; Solo tengo curiosidad sobre lo que está pasando aquí. ¿Me falta algo algo simple? ¿Puedo confiar en este comportamiento en todas las versiones de 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";
}
salidas
deleted one; remaining: zero two
deleted zero; remaining: two
deleted two; remaining:
man perlfunc
(cada uno) no explica por qué el bucle while continúa cuando $k
se asigna 0. el código se comporta como si la condición en la while
bucle eran ($k = each %h, defined $k)
.
Si la condición del bucle se cambia realmente a ($k = each %h, $k)
entonces en efecto, parada en $k = 0
como se esperaba.
También se detiene en $k = 0
para el siguiente reimplementación de 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";
}
salidas sólo:
deleted one; remaining: zero two