Your code would work as expected if $VAR2 were a reference to a single hash rather than a reference to an array with one element (a hash ref).
#!/usr/bin/perl -w
use strict;
use warnings;
use Data::Dumper;
my $VAR1 = {
'Total' => {
'month1' => 0,
'month2' => 0,
'month3' => 0,
'month4' => 0,
'month5' => 0,
'month6' => 0,
'month7' => 0,
'month8' => 0,
'month9' => 0,
'month10' => 0,
'month11' => 0,
'month13' => 0,
'month14' => 0,
'month15' => 0,
'month16' => 0
},
'Tom' => {
'month1' => 17,
'month2' => 1,
'month3' => 15,
'month4' => 0,
'month5' => 3,
'month6' => 30,
'month7' => 33,
'month8' => 0,
'month9' => 0,
'month10' => 0,
'month11' => 0,
'month12' => 0,
'month13' => 0,
'month14' => 0,
'month15' => 0
}
};
my $VAR2 =
{
'Total' => {
'week1' => 0,
'week2' => 0,
'week3' => 0
},
'Harry' => {
'week1' => 0,
'week2' => 5,
'week3' => 5
}
};
my %joined_FS;
$joined_FS{$_} ||= {( %{$VAR1->{$_}||{}}, %{$VAR2->{$_}||{}} )} fo
+r keys(%$VAR1), keys(%$VAR2);
#This example was given by PerlMonks
print Dumper(\%joined_FS);
OUTPUT:
$VAR1 = {
'Tom' => {
'month10' => 0,
'month11' => 0,
'month15' => 0,
'month6' => 30,
'month7' => 33,
'month5' => 3,
'month13' => 0,
'month12' => 0,
'month4' => 0,
'month9' => 0,
'month3' => 15,
'month1' => 17,
'month2' => 1,
'month8' => 0,
'month14' => 0
},
'Total' => {
'week3' => 0,
'month6' => 0,
'week1' => 0,
'month10' => 0,
'month8' => 0,
'month2' => 0,
'month4' => 0,
'month5' => 0,
'month7' => 0,
'month15' => 0,
'month11' => 0,
'month14' => 0,
'month16' => 0,
'month1' => 0,
'month3' => 0,
'month9' => 0,
'month13' => 0,
'week2' => 0
},
'Harry' => {
'week3' => 5,
'week1' => 0,
'week2' => 5
}
};