Perl:访问哈希内的哈希值

时间:2013-06-11 05:19:27

标签: perl hash perl-data-structures hash-of-hashes perl-hash

我刚拿起Perl。 我对访问哈希值有点困惑。下面是我试图访问哈希内部哈希值的代码。 由于我使用简单的文本编辑器进行编码,我无法弄清楚可能出现的问题。请帮忙

my %box = (
    Milk => {
        A => 5,
        B => 10,
        C => 20,
    },
    Chocolate => {
        AB => 10,
        BC => 25,
        CD => 40,
    },
);

foreach my $box_key(keys %box) {
    foreach my $inside_key (keys %box{box_key})
    print "$box_key"."_$inside_key""is for rupees $box{box_key}{inside_key}";
}

2 个答案:

答案 0 :(得分:3)

如果语法是

keys %hash

对于哈希,它是

keys %{ ... }

用于哈希引用。在这种情况下,引用存储在$box{$box_key}中,因此您将使用

keys %{ $box{$box_key} }

此外,您在几个地方访问名为box_keyinside_key的元素,其中您确实需要$box_key$inside_key命名的元素。


最后,您可以使用变量名称周围的curlies来指示变量名称结束的Perl。


for my $box_key (keys %box) {
   for my $inside_key (keys %{ $box{$box_key} }) {
      print "${box_key}_$inside_key is for rupees $box{$box_key}{$inside_key}\n";
   }
}

答案 1 :(得分:-1)

ikegami解释得非常好,我觉得你的代码中仍然遗漏了一些问题,这就是为什么你遇到问题,试试下面的代码,希望它对你有帮助。

my %box = (
    Milk => {
        A => 5,
        B => 10,
        C => 20,
    },
    Chocolate => {
        AB => 10,
        BC => 25,
        CD => 40,
    },
);

foreach my $box_key(keys %box) {
    foreach my $inside_key (keys $box{$box_key}) {
      print "${box_key}_$inside_key is for rupees $box{$box_key}{$inside_key}\n";

    }
}

输出:

Chocolate_CD is for rupees 40
Chocolate_BC is for rupees 25
Chocolate_AB is for rupees 10
Milk_A is for rupees 5
Milk_C is for rupees 20
Milk_B is for rupees 10