针对Perl的嵌套数组故障排除

时间:2011-05-31 19:23:34

标签: perl multidimensional-array

我在使用指向另一个数组的引用数组时遇到问题。这是我的代码片段:

# @bah is a local variable array that's been populated, @foo is also initialized as a global variable
$foo[9] = \@bah; 

# this works perfectly, printing the first element of the array @bah
print $foo[9][0]."\n"; 

# this does not work, nothing gets printed
foreach (@$foo[9]) {
    print $_."\n";
}

2 个答案:

答案 0 :(得分:11)

始终use strict;use warnings;

@取消引用优先,因此@$foo[9]期望$foo成为数组引用,并从该数组中获取元素9。你想要@{$foo[9]}use strict会提醒您$foo被使用,而不是@foo

对于一些易于记忆的解除引用规则,请参阅http://perlmonks.org/?node=References+quick+reference

答案 1 :(得分:1)

与ysth说的一样,你需要使用大括号将$foo[9]正确地解引用到它所指向的数组中。

您可能还想知道使用\@bah直接引用数组。因此,如果稍后更改@bah,您也会更改$foo[9]

my @bah = (1,2,3);
$foo[9] = \@bah;
@bah = ('a','b','c');
print qq(@{$foo[9]});

这将打印a b c,而不是1 2 3

仅复制@bah中的值,而不是取消引用$foo

@{$foo[9]} = @bah;