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,

Antworten auf die Frage(2)

Ihre Antwort auf die Frage