Alexander (HH): Reihenfolge keys %hash

Beitrag lesen

Moin Moin!

unter der Voraussetzung, dass ein hash im Lauf des Scripts unverändert bleibt, Frage: ist die Reihenfolge bei einem mehrmaligen Schleifendurchlauf

foreach my $k(keys %hash){}

immer dieselbe???

RTFM:

The keys are returned in an apparently random order. The actual random order is subject to change in future versions of perl, but it is guaranteed to be the same order as either the values or each function produces (given that the hash has not been modified). Since Perl 5.8.1 the ordering is different even between different runs of Perl for security reasons (see "Algorithmic Complexity Attacks" in perlsec).

Du solltest es vermeiden, Code zu bauen, der sich darauf stützt, das Schlüssel oder Werte von Hashes in einer bestimmten Reihenfolge geliefert werden. Früher oder später schießt Du Dir damit in den Fuß. Wenn Du eine garantierte Reihenfolge benötigst, dann sortiere. Insbesondere, wenn Du an zwei weit voneinander entfernten Stellen die selbe Reihenfolge brauchst.

keys() und values() dicht nebeneinander, mit einem dicken Kommentar, dass beide garantiert die selbe Reihenfolge haben, würde ich mit viel Mühe gerade noch durchgehen lassen, aber selbst da kannst Du mit each() meistens saubereren Code schreiben.

Alexander

--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".