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

A nice quick way to do what you want is to add an "index" field at the end of the arrayref:
my %HoTypes = ( 'PythonQuestions' => [ '[PythonQuestions|Python Questions]', 318, +3, 10, 0 ], 'OffTopics' => [ '[OffTopics|Off Topic Post]', 500, +3, 10, 1 ], 'notes' => [ 'Notes', 283, +3, 20, 2 ] );
and then sort based on index:
for my $T ( sort { $HoTypes{$a}[-1] <=> $HoTypes{$b}[-1] } keys %HoTyp +es ) { my $nodeStr = $HoTypes{$T}[0]; print "$T -> $nodeStr\n"; }
Untested, but I think that would do the trick.

cLive ;-)