So Data::Dumper is throwing me off and Tie::IxHash just might be keeping them in order as advertised.
It's unlikely that Data::Dumper has anything to do with it. As others have written, my guess would be that selectall_arrayref() is returning a reference to an entirely separate hash it generates and populates internally. After all, how would this function "know" that you want it to use the hash referred to by $data to populate with the data it is to return? I can't use Tie::IxHash to produce an example ATM, but consider:
c:\@Work\Perl\monks>perl -wMstrict -le
"package Foo::Bar { sub TIEHASH {} }
;;
my $data = {};
tie %$data, 'Foo::Bar';
print $data;
;;
$data = return_anon_hash_ref();
print $data;
;;
use Data::Dumper;
print Dumper $data;
;;
sub return_anon_hash_ref { return { 'sorry' => 'charley' }; }
"
HASH(0x3bd06c)
HASH(0x3bd15c)
$VAR1 = {
'sorry' => 'charley'
};
Note that the addresses of
$data in the two print statements are different, as are the contents of the referents. Nothing you do with
Data::Dumper is going to change this.
Bottom line: Write your own data display loop or routine and use whatever explicit key order you want.
Give a man a fish: <%-{-{-{-<