2010-11-11 4 views
3

Действительно простой вопрос, вопрос, но меня смущает.perl foreach looping массивы, простой вопрос

 
foreach $val (@{$obj->something()}) { 
    # this works 
} 

@array = $obj->something(); 
foreach $val (@array) { 
    # this does not 
} 

Что мне нужно сделать, чтобы сделать вторую работу (то есть: присвоить массив отдельно), я использовал первую форму справедливый бит, но действительно не понимаю, что он делает по-другому.

ответ

8

Возможно:

@array = @{$obj->something()}; 

В первом примере, это выглядит как $obj->something() возвращает ссылки на массив, вам необходимо разыменования его.

Кроме того, вы должны действительно use strict; и use warnings;, и объявить переменные, как

my @array = @{$obj->something()}; 
foreach my $val (@array) { 
    # this does not 
} 

Это сделает намного легче найти ошибки (хотя, вероятно, это не один), даже в сценарии на три линии.

+0

совершенным, приветствия. – Sirex