Хэши - это просто массивы, пока они не назначены в Perl, поэтому, если вы приведете их как массив, вы можете перебрать их в исходном порядке:
my @array = ( z => 6,
a => 8,
b => 4 );
for (my $i=0; $ar[$i]; ++$i) {
next if $i % 2;
my $key = $ar[$i];
my $val = $ar[$i+1];
say "$key: $val"; # in original order
}
Вы потеряете преимущества хеширования, если сделаете это явно. Но поскольку хеш - это просто массив, его можно создать, просто назначив массив хешу:
my %hash = @array;
say $hash{z};
Возможно, это всего лишь вариант решения «использовать массив в качестве индекса», но я думаю, что оно лучше, потому что вместо того, чтобы вводить свой индекс вручную (или каким-либо другим способом), вы создаете его непосредственно из исходный массив.