Perl 5.8.1 introduced changes to ensure that a given hash's keys would come up in a different order on each run of the program
In addition, in 5.18 further changes were made. From Hash overhaul:
By default, two distinct hash variables with identical keys and values may now provide their contents in a different order where it was previously identical. ... the order which keys/values will be returned from functions like keys(), values(), and each() will differ from run to run. ... Further, every hash has its own iteration order, which should make it much more difficult to determine what the current hash seed is.