2011-12-27 17 views
0

私はPerlプログラムで同じ構造の配列を複数使用していますが、ある時点でそこに名前を出力する必要があります。つまり、'array_name'@array_nameから取得する必要があります。
どうすればいいですか?それが不可能な場合は、配列とその名前の「相対的な」格納の便利な方法を提案できますか?
ありがとうございます。Perlでハッシュで配列名を取得する方法はありますか?

答えて

5

それは確かに可能ですが、私は、ハッシュで無名配列の参照として、あなたの配列を格納することをお勧めしたい:

my @array = @{$arrays{"$some_array_name"}}; 
+0

私はあなたがキーではなく、あなたの検索例 – Zaid

+0

んでは '$のarray_name'として' array_name'を意味だと思い、私は "$ array_name"を意味しました - 実際には、 "$ array_name'という名前の配列をテキストに追加するのを忘れました。 – fge

+0

ハッシュ添字内の' $ some_array_name'スカラーを二重引用符で囲むのは冗長です。また、 '@ array'にはソース配列の浅いコピーが含まれることに注意することも重要です。 –

0

:名前$some_array_nameで配列を取得し、その後

my %arrays = (
    'array_name' => [ qw(contents of array array_name) ], 
    # etc 
) 

自動ネームストレージはありません。これは、使用する変数の名前に過ぎません。あなたはそれを格納する必要がある場合、私はこのようなハッシュを使用してお勧めします:

$array->{name} = "array_name"; 
$array->{data} = [@array_name]; 
+0

あなたが落札した場合は、コメントを残してください。誰もあなたが間違っていると思うことを知りません。 (私を含む) – Nikodemus

2

次のように匿名配列のハッシュを作成することができます。

%HoA = (
    flintstones => [ "fred", "barney" ], 
    jetsons  => [ "george", "jane", "elroy" ], 
    simpsons  => [ "homer", "marge", "bart" ], 
); 

あなたはAの最初の要素を設定することができます特定の配列を次のよう

$HoA{flintstones}[0] = "Fred"; 

を適切な配列要素への置換を適用し、第二シンプソンを活用する:

$HoA{simpsons}[1] =~ s/(\w)/\u$1/; 

あなたはハッシュのキーをループによって家族の全てを印刷することができます。

for $family (keys %HoA) { 
    print "$family: @{ $HoA{$family} }\n"; 
} 
関連する問題