Подтвердить что ты не робот

Как я могу перебирать ссылку на массив Perl?

У меня есть массив, являющийся членом структуры:

$self->{myArray} = ["value1", "value2"];

И я пытаюсь перебрать его, используя следующий код:

my @myArray = $self->{myArray};
foreach my $foo (@myArray){
    #Do something with the using $foo
    ...
}

Проблема в том, что цикл foreach выполняется только один раз (когда я ожидал, что он будет выполняться дважды, поскольку @myArray имеет два элемента: "value1" и "value2" ).

Когда я проверяю размер массива @myArray, я понимаю, что его размер равен 1. Что я делаю неправильно в этом коде?

4b9b3361

Ответ 1

Я считаю, что:

$self->{myArray} returns a reference.

Вы хотите вернуть массив:

@{$self->{myArray}}

Ответ 2

$self->{myArray} - ссылка на массив. Вам нужно разыменовать его.

my @myArray = @{ $self->{myArray} };

В подобных ситуациях модуль Data::Dumper очень полезен. Например, если @myArray не вел себя так, как ожидалось, вы можете запустить этот код, чтобы выявить проблему.

use Data::Dumper;
print Dumper(\@myArray);

Ответ 3

$self → {myArray} - это ссылка на массив, а не массив - вы не можете хранить фактические массивы внутри хеша, только ссылки. Попробуйте следующее:

my $myArray = $self->{myArray};
for my $foo (@$myArray){
   # do something with $foo
}

Вы также можете посмотреть perldoc perlref.