$hash_reg_list{first_type}{registers}
является ссылкой на массив. Вы хотите перебрать элементы ссылочного массива.
for my $register (@{ $hash_reg_list{first_type}{registers} }) {
...
}
или
for my $register ($hash_reg_list{first_type}{registers}->@*) {
...
}
(->@*
требует Perl 5,24 или Perl 5,20 и use experimental qw( postderef );
)
$register
- значение текущего элемента массива, которое является ссылкой на га sh. Вы хотите напечатать элемент этого ха sh с ключом register_name
.
say $register->{register_name};
Все вместе мы получим
for my $register (@{ $hash_reg_list{first_type}{registers} }) {
say $register->{register_name};
}
или
for my $register ($hash_reg_list{first_type}{registers}->@*) {
say $register->{register_name};
}
Если бы мы хотели отсортировать регистры по имени регистра, мы бы использовали следующее:
for my $register (
sort { $a->{register_name} cmp $b->{register_name} }
@{ $hash_reg_list{first_type}{registers} }
) {
say $register->{register_name};
}
или
for my $register (
sort { $a->{register_name} cmp $b->{register_name} }
$hash_reg_list{first_type}{registers}->@*
) {
say $register->{register_name};
}
См. Perl Синтаксис разыменования для получения информации о разыменовании и ссылки на дополнительную информацию.