$ perl -e ' use strict; use warnings; use Data::Dumper; my $VAR1 = { Total => { month1 => 0, month2 => 0 }, Tom => { month1 => 17, month2 => 1 }, }; my $VAR2 = [ { Total => { week1 => 0, week2 => 0 }, Harry => { week1 => 0, week2 => 5 }, } ]; my %joined_FS = ( Total => { %{delete $VAR1->{Total}}, %{delete $VAR2->[0]{Total}}, }, %$VAR1, %{$VAR2->[0]} ); print Dumper(\%joined_FS); ' $VAR1 = { 'Tom' => { 'month1' => 17, 'month2' => 1 }, 'Total' => { 'month2' => 0, 'month1' => 0, 'week2' => 0, 'week1' => 0 }, 'Harry' => { 'week2' => 5, 'week1' => 0 } };