%h = (k1 => 1, k2=>2, k3=> 3);
Функции:
@k=keys %h; #массив ключей
@v=values %h; #массив значений
Как следствие,
for ($i=0;$i<@k; $i++) { print "Error\n" unless $h{$k[$i]} eq $v[$i];}
будет работать.
each %h; #В массивном контексте выводит каждую пару (итератор), а в скалярном - только каждое значение.
while (($k,$v)= each %h) {print "$k\t=>$v\n";} # выводит весь хэш-массив.
Для множественного оператора присваивания в скалярном контексте соглашение, что будет возвращать количество присвоенных справа значений.