циклические массивы perl foreach, простой вопрос - PullRequest
3 голосов
/ 11 ноября 2010

Действительно простой Perl-вопрос, но меня сильно смущает.

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

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

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

1 Ответ

8 голосов
/ 11 ноября 2010

Вероятно:

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

Из первого примера это выглядит так: $obj->something() возвращает ссылку на массив, вам нужно разыменовать ее.

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...