2016-05-04 7 views
0

1に設定されている場合、キーの配列(example_com、example_caなど)を作成しようとしていますが、forループとforeachループを使用しようとしましたが、ARRAY #エラー。Perlがキーの値を取得する

$VAR1 = [ 
     { 
     'example_com' => '1', 
     'example_ca' => '1' 
     } 
    ]; 

おかげ

+0

$ VAR1はハッシュである要素を1つしか含まない配列なので、 'if($ VAR1 - > [0] {example_com} == 1)'です。 – eballes

+0

私は実際にそれをループさせようとしていますが、複数のキーが存在する可能性があります – Deano

+3

次にもう少し詳細を表示してください。 _複数のキーが存在する可能性があります=>それはどういう意味ですか?配列内に複数の要素がありますか?あなたはすでに複数のキーを持っていますが、あなたの質問に応じて特定の既知のもの(example_com)をチェックしたいとします。 – eballes

答えて

0

あなたは、コンテナのアレイ内の複数のハッシュを持っている場合はキーの配列を取得する方法の拡大例:

my $VAR1 = [ 
     { 
      'example_com' => '1', 
      'example_ca' => '1', 
      'not_set'  => '0' 
     }, 
     { 
      'EXAMPLE_com' => '1', 
      'EXAMPLE_ca' => '1', 
      'NOT_SET'  => '0', 
     } 
]; 

my @arrayOfHashes = @{$VAR1}; 

foreach my $array (@arrayOfHashes) 
{ 
    my @onlyOnes; 
    my @arrayOfKeys = sort keys %{$array}; 
    foreach my $key (@arrayOfKeys) 
    { 
     next if ($array->{$key} ne 1); 
     push @onlyOnes, $key; 
    } 

    print "\nKey names:\n"; 
    foreach my $key (@onlyOnes) 
    { 
     print "$key\n"; 
    } 
} 

出力:

Key names: 
example_ca 
example_com 

Key names: 
EXAMPLE_ca 
EXAMPLE_com 
4

あなたはハッシュを含む配列を持っているので、これはとなります。配列は1要素長です。

ハッシュに到達するには、要素ゼロを逆参照します。

したがって:あなたのソース・データの正確

my $hash_ref = $VAR1->[0]; 
print join "\n", keys %{$hash_ref},"\n"; 

foreach my $key (keys %{$VAR1->[0]}) { 
    print "$key => $VAR1->[0]{$key}\n"; 
} 
+0

私は$ VAR1 "ハッシュを含む配列"はData :: Dumperの出力であり、実際の変数ではないことは確かです。 – hymie

+0

もっと具体的な例がなければ、より具体的な回答はできません。 'Dumper'への入力は、その出力を生成するために配列ref(スカラまたは' \ @ array')でなければなりません。 – Sobrique

1

my @array_of_keys = (); 

for(keys %{ $VAR1->[0] }) { 
    push @array_of_keys, $_ if $VAR1->[0]{ $_ } eq '1'; 
} 

print "Keys with 1: @array_of_keys"; 
関連する問題