Tie::Hashっていうモジュールがあって、それを読み込むと、Hashの機能を拡張できる。 その機能拡張に、Hashの追加順を記憶するって事もでき、 Tie::HashのドキュメントやTie::IxHashのコードを参考に、どんなもんか作ってみた。 参考って書いてるけど、ほとんどパクり。 package Tie::Hash::Sample; use Tie::Hash; our @ISA = qw(Tie::Hash); sub TIEHASH { bless [{}, [], 0], $_[0]; } # 実体, 順序, each時の参照カウンタ sub STORE { if(not exists $_[0][0]->{$_[1]}){ push(@{$_[0][1]} , $_[1]); } $_[0][0]->{$_[1]} = $_[2]; } sub FETCH { $_[0]