my %hash2 ; my @keys_origin = keys %hash_origin ; @hash2{@keys_origin} = (0) x @keys_origin ; foreach ( @keys ) { my $key = $_ ; if ( exists $hash2{ $key } ) { $hash2{ $key } += $hash_origin{ $key } ; } } print Dumper( \%hash2 ) ; __END__ $VAR1 = { 'key3' => 0, 'key2' => 3, 'key1' => 2 };