Ответ 1
Я считаю, что:
$self->{myArray} returns a reference.
Вы хотите вернуть массив:
@{$self->{myArray}}
У меня есть массив, являющийся членом структуры:
$self->{myArray} = ["value1", "value2"];
И я пытаюсь перебрать его, используя следующий код:
my @myArray = $self->{myArray};
foreach my $foo (@myArray){
#Do something with the using $foo
...
}
Проблема в том, что цикл foreach выполняется только один раз (когда я ожидал, что он будет выполняться дважды, поскольку @myArray имеет два элемента: "value1" и "value2" ).
Когда я проверяю размер массива @myArray, я понимаю, что его размер равен 1. Что я делаю неправильно в этом коде?
Я считаю, что:
$self->{myArray} returns a reference.
Вы хотите вернуть массив:
@{$self->{myArray}}
$self->{myArray}
- ссылка на массив. Вам нужно разыменовать его.
my @myArray = @{ $self->{myArray} };
В подобных ситуациях модуль Data::Dumper
очень полезен. Например, если @myArray
не вел себя так, как ожидалось, вы можете запустить этот код, чтобы выявить проблему.
use Data::Dumper;
print Dumper(\@myArray);
$self → {myArray} - это ссылка на массив, а не массив - вы не можете хранить фактические массивы внутри хеша, только ссылки. Попробуйте следующее:
my $myArray = $self->{myArray};
for my $foo (@$myArray){
# do something with $foo
}
Вы также можете посмотреть perldoc perlref.