Welcome to the Monastery PerlMonks

### Re^3: Hash order randomization is coming, are you ready?

by mje (Curate)
 on Nov 29, 2012 at 17:11 UTC ( #1006308=note: print w/replies, xml ) Need Help??

A casual test looks like that statement is still true:

```use 5.17.6;
use strict;
use warnings;

my %a = (
z => 1,
y => 2,
x => 3);

foreach (1..3) {
print join(",", keys %a), "\n";
print join(",", values %a), "\n";
while (my (\$d,\$e) = each %a) {
print "\$d = \$e\n";
}
}

run 1

```z,y,x
1,2,3
z = 1
y = 2
x = 3
z,y,x
1,2,3
z = 1
y = 2
x = 3
z,y,x
1,2,3
z = 1
y = 2
x = 3

run 2

```x,y,z
3,2,1
x = 3
y = 2
z = 1
x,y,z
3,2,1
x = 3
y = 2
z = 1
x,y,z
3,2,1
x = 3
y = 2
z = 1

Replies are listed 'Best First'.
Re^4: Hash order randomization is coming, are you ready?
by demerphq (Chancellor) on Dec 02, 2012 at 10:03 UTC

Yes indeed. This cannot change. And is guaranteed by the nature of the how keys() and values() are implemented in native hashes (non-magical). Basically they are both achieved by walking the bucket array from left to right and within a bucket from top to bottom. Since they both do the same data structure walk they both return the same results. However note this is true only of a /given/ hash. You can't assume that one hashes keys() will match another's values() even if they contain the same list of keys().

---
\$world=~s/war/peace/g

Create A New User
Node Status?
node history
Node Type: note [id://1006308]
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (11)
As of 2018-01-23 14:05 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
How did you see in the new year?

Results (246 votes). Check out past polls.

Notices?