Я могу использовать IxHash, чтобы запомнить порядок вставки хэша.
use Tie::IxHash;
my %hash;
tie(%hash, 'Tie::IxHash');
%hash = (
x => 10,
z => 20,
q => { a1 => 1, a3 => 5, a2=>2,},
y => 30,
);
printf("keys %s\n", join(" ", keys %hash));
=> keys x z q y
Как насчет вложенного хеша?
printf("keys %s\n", join(" ", keys %{$hash{q}}));
keys a2 a1 a3
Я подозреваю, что ответ отрицательный, поскольку хеш q анонимный, и заказ теряется до того, как IxHash его увидит.
Я знаю, что могу сделать Tie для $ hash {q}, а затем добавить элементы, но мне нравится использовать одно назначение для построения хэша.
Есть трюк?