¿Por qué cada () Perl no itera a través de todo el hash la segunda vez?

Tengo un script simple que intenta aprender sobre hashes en Perl.

#!/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";

Estoy sorprendido por la salida: -

Iterate upto ggg...
-a -> aaa
-c -> ccc
-g -> ggg

Iterate All...
-f -> fff
-e -> eee
-d -> ddd
-b -> bbb

Entiendo que las claves están en hash, por lo que la primera salida puede ser 'n' elementos dependiendo del orden interno. Pero, ¿por qué no puedo hacer un bucle de la matriz después? Que pasa

Gracias,

Respuestas a la pregunta(2)

Su respuesta a la pregunta