2

我刚刚拿起 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}";
}
4

2 回答 2

3

如果语法是

keys %hash

对于哈希,它是

keys %{ ... }

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

keys %{ $box{$box_key} }

此外,您正在访问名为box_keyandinside_key的元素,其中您实际上想要以$box_keyand命名的元素$inside_key


最后,您可以在变量名周围使用花括号来指示 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";
   }
}
于 2013-06-11T05:26:21.450 回答
-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
于 2013-06-11T06:38:40.883 回答