use strict; use warnings; use Data::Dumper; my %hash1 = ( "key1" => 1, "key15" => 3, "key150" => 1 ); my %hash2 = ( "key1" => 1, "key15" => 1, "key140" => 1 ); my %merged; $merged{$_} += $hash1{$_} for keys %hash1; $merged{$_} += $hash2{$_} for keys %hash2; print Dumper(\%merged);