Reputation: 12200
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
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
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
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