in reply to I don't understand why keys %hash does this ...

In a similar vein to Roger's post, if you want to maintain order, then use a list. You could use a list of hashes of two keys. One key points to the label/name, the other to the data you are looking after:

my @type = ( { name => 'PythonQuestions', data => [ '[PythonQuestions|Python Questions]', 318, 3, 10 ], }, { name => 'OffTopics', data => [ '[OffTopics|Off Topic Post]', 500, 3, 10 ], }, { name => 'notes', data => [ 'Notes', 283, 3, 20 ], }, ); for my $t( @type ) { print "$t->{name} -> $t->{data}[0]\n"; }

The main question is whether or not you need to use the hash for lookups. E.g., if you never need to find out what $HoTypes{$thing} points to, for some value of $thing, if all you ever do is iterate over all the keys in a loop, you can get away with a list.

Sometimes a hash is more trouble than it's worth.

- another intruder with the mooring of the heat of the Perl