Как я могу получить кусочек хэша из хэша хэшей?


У меня есть хэш так:

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 4

2 ответа:

Чтобы получить хэш-фрагмент из вложенного хэша, вы должны удалить ссылку на него в шагах. Вы получаете первый уровень, который вам нужен:

$h{'a'}
Теперь вы должны разыменовать это как хэш. Однако, поскольку это не простой скаляр,вы должны поместить его в скобки. Чтобы получить весь хэш, вы бы поставили % перед скобками:
%{ $h{'a'} }

Теперь вам нужен фрагмент, поэтому вы заменяете % на @, так как вы получаете несколько элементов, и вы также помещаете свои ключи в конце как нормальный:

@{ $h{'a'} }{ @keys }

Возможно, будет проще увидеть фигурные скобки отдельно:

@{         }{       }
   $h{'a'}    @keys

Попробуйте

print join(',',@{$h{'a'}}{qw/one two/});

Использование Data:: Dumper очень помогает в подобных случаях