2009-08-27 10 views
16

私は、構造体のメンバーである配列を持っている:Perl配列リファレンスを反復処理するにはどうすればよいですか?

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

そして、私は次のコードを使用して、それを反復処理しようとしています:

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

問題は「foreachの」ということですがループは一度だけ実行されます(@myArrayには2つの要素、 "value1"と "value2"があるので、2回実行すると思います)。

@myArray配列のサイズを調べると、そのサイズは1になります。このコードで何が間違っていますか?

+0

おかげで、それが働きました。私は最初の答えを受け入れました... –

+6

データ構造クックブックを読むことをお勧めします。http://perldoc.perl.org/perldsc.html多くの異なるデータ構造を作成してアクセスする方法を示す例があります。 – daotoad

答えて

28

私はと信じている答えを

@{$self->{myArray}} 
+0

ああ、FMでパンチに殴られた: – chollida

+1

ちょうどあなたのハッシュの参照のためにこれを行う方法を知りたい場合: %{$ self - > {myHash}} – Kevin

10

$self->{myArray}は配列参照です。それを逆参照する必要があります。

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

このような状況では、Data::Dumperモジュールが非常に役に立ちます。たとえば、@myArrayが期待どおりに動作しない場合は、このコードを実行して問題を明らかにすることができます。

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

$自己 - あなたは、ハッシュ内の実際の配列、のみ参照を格納することができない - > {MyArrayという}は配列参照、ではない配列です。これを試してみてください:

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

またperldoc perlrefを見てしたいことがあります。

$self->{myArray} returns a reference. 

あなたは、配列を返すようにしたい:

関連する問題