http://qs321.pair.com?node_id=11115538


in reply to Re: Hash ordering
in thread Hash ordering

One nuance that AnomalousMonk is aware of but I wanted to clarify:

%key = sort keys %key;

Let's say you start with a hash that looks like this:

%key = ( foo => 'bar', bazz => 'bump', ping => 'pong', putt => 'pop', );

The line of code above would capture only the keys (as was mentioned) and would save them only into the hash, so after running that line you would have this:

%key = ( foo => 'bazz', ping => 'putt', );

This is because the output of keys will just be foo, bazz, ping, putt, and when you take a flat list like that and store it into a hash, it is interpreted as key/value pairs. So your new hash loses all the values, and makes value out of half of the keys. If there are an odd number of keys, one of the new keys gets undef as its value, too.

If we were to break the assignment down to steps it would look more like this:

%key = ( foo => 'bar', bazz => 'bump', ping => 'pong', putt => 'pop', ); my @keys = keys %key; # foo, bazz, ping, putt %key = @keys; foo => bazz, ping => putt

The sorting, itself is irrelevant because storing things in a hash loses any concept of order.


Dave