Deano
Deano

Reputation: 12200

Perl get value of a key

I have been stuck in trying to create an array of keys (example_com,example_ca ..etc) if they are set to 1, I have tried using for loop and foreach loop, but keep getting ARRAY# error.

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

Thanks

Upvotes: 1

Views: 1609

Answers (3)

mcfaddyone
mcfaddyone

Reputation: 26

An expanded example of how to get an array of keys if you have multiple hashes in your container array:

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";
    }
}

output:

Key names:
example_ca
example_com

Key names:
EXAMPLE_ca
EXAMPLE_com

Upvotes: 0

Eugen Konkov
Eugen Konkov

Reputation: 25223

Exactly for you source data:

my @array_of_keys =  ();

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

print "Keys with 1: @array_of_keys";

Upvotes: 1

Sobrique
Sobrique

Reputation: 53498

This will be because you have an array containing a hash. The array is one element long.

So you 'get' to the hash, by dereferencing element zero.

Thus:

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

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

Upvotes: 4

Related Questions