2011-05-31 16 views
0

別の配列を指す参照配列に問題があります。ネストされた配列Perlのトラブルシューティング

# @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"; 
} 

答えて

11

常にuse strict;use warnings;:ここに私のコードの抜粋です。

@間接参照が優先するので、@$foo[9]$fooが配列リファレンスであることを期待し、その配列から要素9を得ます。あなたは@{$foo[9]}が欲しいです。 はが使用されていたことを警告していましたが、@fooではありませんでした。

逆参照のために簡単に記憶できるルールについては、http://perlmonks.org/?node=References+quick+referenceを参照してください。

1

ysthと同様に、$foo[9]が指し示す配列に適切に間接参照するには、中括弧を使用する必要があります。

さらに、\@bahを使用すると、アレイを直接参照していることにご注意ください。後で変更@bah場合ようにすることは、あなたにも$foo[9]を変更します:

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

これは1 2 3a b cを印刷し、そしてません。のみに

ではなく$fooデリファレンス、@bahから値をコピーします。

@{$foo[9]} = @bah; 
関連する問題