Как я могу получить кусочек хэша из хэша хэшей?
У меня есть хэш так:
my %h = ( a => { one => 1,
two => 2
},
b => { three => 3,
four => 4
},
c => { five => 5,
six => 6
}
);
print join(',', @{$h{a}{qw/one two/}});
Ошибка, которую я получаю, такова: Нельзя использовать неопределенное значение в качестве ссылки на массив в q.pl строка 17 это строка с печатью.
Чего я ожидал, так это 1,2
2 ответа:
Чтобы получить хэш-фрагмент из вложенного хэша, вы должны удалить ссылку на него в шагах. Вы получаете первый уровень, который вам нужен:
Теперь вы должны разыменовать это как хэш. Однако, поскольку это не простой скаляр,вы должны поместить его в скобки. Чтобы получить весь хэш, вы бы поставили$h{'a'}
%
перед скобками:%{ $h{'a'} }
Теперь вам нужен фрагмент, поэтому вы заменяете
%
на@
, так как вы получаете несколько элементов, и вы также помещаете свои ключи в конце как нормальный:@{ $h{'a'} }{ @keys }
Возможно, будет проще увидеть фигурные скобки отдельно:
@{ }{ } $h{'a'} @keys