Warum durchläuft Perl 's each () nicht das zweite Mal den gesamten Hash?
Ich habe ein einfaches Skript, das versucht, etwas über Hashes in Perl zu lernen.
#!/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";
Ich bin überrascht von der Ausgabe: -
Iterate upto ggg...
-a -> aaa
-c -> ccc
-g -> ggg
Iterate All...
-f -> fff
-e -> eee
-d -> ddd
-b -> bbb
Ich verstehe, dass die Schlüssel gehasht sind, so dass die erste Ausgabe 'n' Elemente sein kann, abhängig von der internen Reihenfolge. Aber warum kann ich das Array nicht einfach nachschleifen? Was ist falsch ?
Vielen Dank,