Устранение неполадок с вложенным массивом для Perl - PullRequest
0 голосов
/ 31 мая 2011

У меня проблемы с массивом ссылок, которые указывают на другой массив. Вот фрагмент моего кода:

# @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 ]

11 голосов
/ 31 мая 2011

Всегда use strict; и use warnings;.

Разыменование @ имеет приоритет, поэтому @$foo[9] ожидает, что $foo будет ссылкой на массив и получает элемент 9 из этого массива.Вы хотите @{$foo[9]}.use strict предупредил бы вас, что используется $foo, а не @foo.

Для некоторых легко запоминающихся правил разыменования см. http://perlmonks.org/?node=References+quick+reference.

1 голос
/ 31 мая 2011

Как говорит 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...