Perl%{$ var} vs%$ var

时间:2016-04-26 09:54:17

标签: perl hash dereference

%{$var}%$var之间有什么区别?我试过这段代码,但是有错误:

  

每个参考文献都是test.pl第21行的实验。参数类型   每个on引用必须是test.pl中的unrefsed hashref或arrayref   第21行。

use feature 'say';

%HoH = (
    1 => {
        husband   => "fred",
        pal       => "barney",
    },
    2 => {
        husband   => "george",
        wife      => "jane",
        "his boy" => "elroy",
    },
    3 => {
        husband   => "homer",
        wife      => "marge",
        kid       => "bart",
    },
);

for ($i = 1; $i <= 3; $i++) {
    while ( ($family, $roles) = each %$HoH{$i} ) {
        say "$family: $roles";
    }
}

但是这段代码很好用:

use feature 'say';

%HoH = (
    1 => {
        husband   => "fred",
        pal       => "barney",
    },
    2 => {
        husband   => "george",
        wife      => "jane",
        "his boy" => "elroy",
    },
    3 => {
        husband   => "homer",
        wife      => "marge",
        kid       => "bart",
    },
);

for ($i = 1; $i <= 3; $i++) {
    while ( ($family, $roles) = each %{$HoH{$i}} ) {
        say "$family: $roles";
    }
}

2 个答案:

答案 0 :(得分:7)

使用%$HoH{$i}进行$ HoH的哈希引用,而%{$HoH{$i}}使用$HoH{$i}进行哈希引用,这就是你想要的...而且,{{1你的代码: - )

答案 1 :(得分:2)

由于解析哈希与下标哈希的优先级不同。它适用于第二个版本 - %{ $HoH{$i} } - 因为您明确指出查找$HoH{$i}返回的值本身就是一个hashref。

%$HoH{$i}被解释为%{ $HoH }{$i} - 即。表达式$HoH被解释为hashref之后发生了下标 - 它不是。 %HoH是哈希值,但未使用$HoH - 即它未定义。