Perl のハッシュはキーの順番が保証されていません。
例えば下記のようなコードの場合、、、
my %hash;
%hash = (
aaa => 1,
bbb => 2,
ccc => 3,
ddd => 4,
);
for my $i (keys %hash) {
print $i, "\n";
}
実行結果は下記のようになりました。
bbb
ddd
ccc
aaa
このように定義した順番ではない順番で取り出されます。
というか、毎回順番は変わります。
Tie::IxHash を使うことで定義した順番を保持することができます。
使い方は簡単です。
use Tie::IxHash;
tie my %hash, 'Tie::IxHash';
%hash = (
aaa => 1,
bbb => 2,
ccc => 3,
ddd => 4,
);
for my $i (keys %hash) {
print $i, "\n";
}
use して、保持したいハッシュ変数を tie するだけです。
大きなハッシュに対して Tie::IxHash を使うとかなり性能に影響するようなので、そのような場合には注意が必要かもしれません。
コメント