J'ai un script simple essayant d'apprendre des hashs dans Perl.Pourquoi Perl() ne parcourt-il pas tout le hachage une seconde fois?
#!/usr/bin/perl
my %set = (
-a => 'aaa',
-b => 'bbb',
-c => 'ccc',
-d => 'ddd',
-e => 'eee',
-f => 'fff',
-g => 'ggg'
);
print "Iterate up to ggg...\n";
while (my ($key, $val) = each %set) {
print "$key -> $val \n";
last if ($val eq 'ggg');
}
print "\n";
print "Iterate All...\n";
while (my ($key, $val) = each %set) {
print "$key -> $val \n";
}
print "\n";
Je suis surpris par la sortie: -
Iterate upto ggg...
-a -> aaa
-c -> ccc
-g -> ggg
Iterate All...
-f -> fff
-e -> eee
-d -> ddd
-b -> bbb
Je comprends que les clés sont donc la première hachés sortie peut être des éléments « n » en fonction de l'ordre interne. Mais pourquoi ne suis-je pas capable de simplement boucler le tableau après? Qu'est-ce qui ne va pas ?
Merci,
Merci. BTW, est-il possible de réinitialiser «chaque» retour au début? –
"% hash =% hash" semble fonctionner. – jrockway
(perlfaq4 suggère d'appeler des "clés" sur le hachage dans un contexte vide, ce qui pourrait éviter une copie inutile.) – jrockway