Проблема с доступом к Hash в Perl

У меня есть хеш следующей структуры в perl -

my %testHash = (
        KeyL1 => {
            KeyLL1 => {
                KeyLLL1 => [1,2],
                KeyLLL2 => [2,3],
            },
            KeyLL2 => {
                KeyLLL1 => [1,2],
                KeyLLL2 => [2,3],
            },
            KeyLL3 => {
                KeyLLL1 => [1,2],
                KeyLLL2 => [2,3],
            },            
        },
        KeyL2 => {
            KeyLL1 => {
                KeyLLL1 => [1,2],
                KeyLLL2 => [2,3],
            },
            KeyLL2 => {
                KeyLLL1 => [1,2],
                KeyLLL2 => [2,3],
            },
            KeyLL3 => {
                KeyLLL1 => [1,2],
                KeyLLL2 => [2,3],
            }, 
        },
        );

Теперь, когда я пытаюсь получить к нему доступ следующим образом, в результате я получаю «undef»

my %tempHash = $testHash{'KeyL1'};
print Data::Dumper::Dumper($tempHash{'KeyLL1'});
print Data::Dumper::Dumper($tempHash{'KeyLL1'}{'KeyLLL1'});

Результат --

$VAR1 = undef; $VAR1 = undef;

Пожалуйста, укажите мне, что я делаю неправильно. Я довольно новичок в perl.


person dipamchang    schedule 16.02.2017    source источник
comment
Всегда use strict и use warnings 'all' в каждой программе Perl, которую вы пишете.   -  person Borodin    schedule 16.02.2017


Ответы (2)


Значение $testHash{'KeyL1'} — это хеш-ссылка, а не хэш.

Хэшрефы — это скаляры. my %tempHash = не ожидает скаляр.

Вам нужно разыменовать его:

my %tempHash = %{$testHash{'KeyL1'}};
person Quentin    schedule 16.02.2017

Кроме того, вы можете сделать это таким образом, если речь идет только о просмотре структур.

Также попробуйте:

print Dumper $testHash{KeyL1} ;
print Dumper $testHash{KeyL1}{KeyLL1} ;
print Dumper $testHash{KeyL1}{KeyLL1}{KeyLLL1} ;

Вывод:

%_Host@User> ./hash.pl
$VAR1 = {
          'KeyLL1' => {
                        'KeyLLL2' => [
                                       2,
                                       3
                                     ],
                        'KeyLLL1' => [
                                       1,
                                       2
                                     ]
                      },
          'KeyLL2' => {
                        'KeyLLL2' => [
                                       2,
                                       3
                                     ],
                        'KeyLLL1' => [
                                       1,
                                       2
                                     ]
                      },
          'KeyLL3' => {
                        'KeyLLL2' => [
                                       2,
                                       3
                                     ],
                        'KeyLLL1' => [
                                       1,
                                       2
                                     ]
                      }
        };
$VAR1 = {
          'KeyLLL2' => [
                         2,
                         3
                       ],
          'KeyLLL1' => [
                         1,
                         2
                       ]
        };
$VAR1 = [
          1,
          2
        ];
%_Host@User>
person User9102d82    schedule 16.02.2017