R – Is Perl guaranteed to return consistently-ordered hash keys

hashkeyperl

Given something like

foreach (keys %myHash) {
   ... do stuff ...
}

foreach (keys %myHash) {
   ... do more stuff ...
}

Is Perl guaranteed to iterate over the keys in a consistent order if the hash is not altered?

Best Answer

Yes. From perldoc -f keys:

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 perldoc perlsec).

(emphasis mine)

Related Topic