While this has been shown to be less than optimal in benchmarks on other nodes, it is the simplest to implement. However, it should be noted that (as far as I am aware) the behavior regarding the merger of duplicate hash keys is undefined. On my computer it happens to be right-associative:
my %a = ('c'=>1,'d'=>2);
my %b = ('d'=>1,'e'=>2);
my %ab = (%a, %b); # 'd' => 1
my %ba = (%b, %a); # 'd' => 2
If you need to know (or specify) the behavior regarding duplicate keys as mentioned in the OP, you'll probably need a map in conjunction with one of the LIST context examples below.
UPDATE: For example, to create a LIST of repeated key values:
my %a = ('c'=>1,'d'=>2);
my %b = ('d'=>1,'e'=>2);
my @b{keys %a} = map { exists $b{$_} ? [$b{$_}, $a{$_}] : $a{$_} } key
+s %a; # 'd' => [1, 2]
|