在 perl 中访问 Hash 的问题

Issue accessing Hash in 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 的新手。

$testHash{'KeyL1'} 的值是哈希引用,而不是哈希。

哈希引用是标量。 my %tempHash = 不需要标量。

您需要取消引用它:

my %tempHash = %{$testHash{'KeyL1'}};

此外,如果只是为了查看结构,您也可以这样做。

也试试:

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>