my $VAR1 = { 'Tim' => { 'abc' => 7, 'def' => 7, 'ghi' => 0 }, 'Adam' => { 'abc' => 0, 'def' => 0, 'ghi' => 0 }, 'keas' => { 'abc' => 0, 'def' => 0, 'ghi' => 0 } }; my $VAR2 = { 'Dav' => { 'jkl' => 12, 'mno' => 34, 'pqr' => 45 }, 'Adam' => { 'jkl' => 7, 'mno' => 0, 'pqr' => 7 } }; my %output; $output{$_} ||= {( %{$VAR1->{$_}}, %{$VAR2->{$_}} )} for keys(%$VAR1), keys(%$VAR2); use Data::Dumper; print Dumper \%output;

I'll explain how this all works.

for keys(%$VAR1), keys(%$VAR2) will loop through the keys of both hashes. Some keys are in both arrays, so they'll be visited on the loop twice, but we can worry about that later. The key is in the variable $_.

%{$VAR1->{$_}} and %{$VAR2->{$_}} get the nested hashes from $VAR1 and $VAR2 using the key $_

(... , ...) combines those two hashes into a single list of key-value pairs. And wrapping that in { ... } creates a new hash using those key-value pairs and returns a reference to it.

$output{$_} is the slot in the new hash %output to store the hashref created above, and assigning to it with ||= will skip all of the above stuff if $output{$_} is already true. (This skips duplicated keys. Though duplicated keys aren't actually a problem in this case; they would merely slow down the loop an almost immeasurably small amount.)


In reply to Re: How to combine two different hashes into single hash. by tobyink
in thread How to combine two different hashes into single hash. by Sami_R

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.