in reply to Merge 2 array/Hash into 1 variable Perl

#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my $h1 = { 'location_setting' => [ '409' ], 'status' => [ '501' ] }; my $h2 = { 'status' => [ '137', '124' ], 'location_setting' => ['405' +], 'classification' => ['0']}; #my $x = {%$h1, %$h2}; my %x = (); my $x = \%x; foreach my $h1key (keys %{$h1}) { push @{$x{$h1key}}, @{${$h1}{$h1key}}; } foreach my $h2key (keys %{$h2}) { push @{$x{$h2key}}, @{${$h2}{$h2key}}; } print Dumper $x;

Results:

$VAR1 = { 'status' => [ '501', '137', '124' ], 'location_setting' => [ '409', '405' ], 'classification' => [ '0' ] };

Replies are listed 'Best First'.
Re^2: Merge 2 array/Hash into 1 variable Perl
by johngg (Canon) on Aug 03, 2017 at 22:10 UTC

    There's no need to create the %x hash then take a reference to it in $x, just use $x directly. Also, there's no need for the first foreach, just copy $h1 into $x.

    johngg@shiraz:~/perl/Monks > perl -Mstrict -Mwarnings -MData::Dumper - +E ' my $h1 = { location_setting => [ q{409} ], status => [ q{501} ], }; my $h2 = { status => [ qw{ 137 124 } ], location_setting => [ q{405} ], classification => [ q{0} ], }; my $x = { %{ $h1 } }; push @{ $x->{ $_ } }, @{ $h2->{ $_ } } for keys %{ $h2 }; print Data::Dumper->Dumpxs( [ $x ], [ qw{ x } ] );' $x = { 'classification' => [ '0' ], 'status' => [ '501', '137', '124' ], 'location_setting' => [ '409', '405' ] };

    I hope this is of interest.

    Cheers,

    JohnGG

      Thank you, johngg.

      My point was to show that you have to merge the hashes manually (although you can take the shortcut with the first hash, as I see you opted to do); but I should have taken the time to write using the same techniques found in the provided sample.

      Mine was a hurried example; yours not only speaks better to the seeker, but is also a much cleaner presentation.

      Edit:Use of modules or map are probably better solutions, all things considered, but they don't teach the seeker how hashes work. Thus, the "have to" comment above is strictly in the context of doing it "by hand" without those tools.

Re^2: Merge 2 array/Hash into 1 variable Perl
by kris1511 (Acolyte) on Aug 07, 2017 at 20:19 UTC
    Thank you!! works like a charm :)