2016-05-04 72 views
0

我一直在试图创建一个键数组(如example_com,example_ca ..等等),如果它们设置为1,我尝试使用for循环和foreach循环,但不断获取ARRAY #错误。Perl获得密钥的值

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

感谢

+0

'if($ VAR1 - > [0] {example_com} == 1)'因为$ VAR1是一个只包含一个散列元素的数组。 – eballes

+0

我实际上试图循环使用它,可能有多个键 – Deano

+3

然后再显示更多的上下文。 _可能有不止一个key_ =>你的意思是什么?数组中有多个元素?您已经拥有多个密钥,但您想根据您的问题查看特定且已知的密钥(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

这将是因为你有一个包含哈希值的数组。该数组是一个元素长。

因此,通过取消引用元素零,您可以获得散列值。

这样:

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"; 
相关问题