Reputation: 300
I have 2 variables that are returned on form submission. I need to merge the values into 1 Variable that I can use to create SQL later on.
How can I get results that is union of all the values:
i.e. location_setting = '409','405' and Status = '501', '137', '124'
Here is my current code, but spits only values from h2
use Data::Dumper;
my $h1 = { 'location_setting' => [ '409' ], 'status' => [ '501' ] };
my $h2 = { 'status' => [ '137', '124' ], 'location_setting' => ['405'], 'classification' => ['0']};
my $x = {%$h1, %$h2};
print Dumper $x;
Upvotes: 1
Views: 72
Reputation: 300
use Data::Dumper;
use List::Util qw( uniq );
my $h1 = { 'location_setting' => [ '409' ], 'status' => [ '501' ] };
my $h2 = { 'status' => [ '137', '124' ], 'location_setting' => [], 'classification' => ['0']};
my %x;
foreach my $h1key (keys %{$h1}) {
push @{$x{$h1key}}, @{${$h1}{$h1key}};
}
foreach my $h2key (keys %{$h2}) {
push @{$x{$h2key}}, @{${$h2}{$h2key}};
}
@$_ = uniq @$_
for values(%x);
my $x = \%x;
print Dumper $x;
Upvotes: 1
Reputation: 386561
use List::Util qw( uniq );
my %h =
map {
$_ => [
uniq
$h1->{$_} ? @{ $h1->{$_} } : (),
$h2->{$_} ? @{ $h2->{$_} } : (),
]
}
uniq
keys(%$h1), keys(%$h2);
If you have lots of hashes or a variable number of hashes,
use List::Util qw( uniq );
my @hashes = ( $h1, $h2, ... );
my %h =
map {
my $key = $_;
$key => [ uniq map @$_, grep $_, map $_->{$key}, @hashes ]
}
uniq map keys(%$_), @hashes;
Upvotes: 2