0

我在 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 很陌生。

4

2 回答 2

4

的值$testHash{'KeyL1'}是一个 hashref,而不是一个散列。

Hashrefs 是标量。my %tempHash =不期望一个标量。

您需要取消引用它:

my %tempHash = %{$testHash{'KeyL1'}};
于 2017-02-16T15:04:46.217 回答
0

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

也试试:

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>
于 2017-02-16T20:11:59.490 回答