未处理的数组值

时间:2016-09-15 11:16:59

标签: arrays perl perl-data-structures

我试图实现一个哈希,它的键“Foo Bar”有一个数组作为它的值。 虽然我尝试将具有此特定键的哈希值分配给数组,但结果数组未按预期工作:

 use strict;
 use warnings;
 use Data::Dumper qw(Dumper);

 my %grades;
 $grades{'Foo Bar'}[0] = 23;
 $grades{'Foo Bar'}[1] = 42;
 $grades{'Foo Bar'}[2] = 73;
 my @array = $grades{'Foo Bar'};

 foreach my $myval ( @array )
 {
         print $myval;
 }

哪里出错?

1 个答案:

答案 0 :(得分:3)

哈希值是数组的引用,是一个标量值。正如您所做的那样将其复制到数组中会产生一个数组,其中一个元素等于数组引用

您需要取消引用该值才能访问引用的数组。您可以像这样直接取消引用它

for my $val ( @{ $grades{'Foo Bar'} } ) {
    print $val, "\n";
}

或者您可以先将其复制到标量变量中,正如我在下面的代码中所示

use strict;
use warnings 'all';

my %grades;

$grades{'Foo Bar'}[0] = 23;
$grades{'Foo Bar'}[1] = 42;
$grades{'Foo Bar'}[2] = 73;

my $array = $grades{'Foo Bar'};

for my $val ( @$array ) {
    print $val, "\n";
}

输出

23
42
73