keys
で取得すると、通常は設定順序と異なる順序で返される。連想配列の順序を保持したい場合は、Tie::IxHash モジュールを使用する。
Tie::IxHash モジュールには TIEHASH インターフェイスが用意されているので、
tie
関数と組み合わせて使えば連想配列をあたかも設定順にデータが格納されるかのように扱うことができる。以下、サンプルコード:
#!/usr/bin/perl
use strict;
use warnings;
use Tie::IxHash;
tie my %hashval, 'Tie::IxHash';
$hashval{ data1 } = 10;
$hashval{ data2 } = 20;
$hashval{ data3 } = 30;
$hashval{ data4 } = 40;
foreach my $k (keys %hashval) {
print "$k = $hashval{$k}\n";
}
$ perl ~/tmp/test2.pl
data1 = 10
data2 = 20
data3 = 30
data4 = 40
ためしに7行目を
my %hashval;
に差し替えてみると
$ perl ~/tmp/test2.pl
data4 = 40
data2 = 20
data3 = 30
data1 = 10