Я не пойму, насчет чего спор, собственно.
my $h1 = { h1k1 => 1, h1k2 => [1, 2, 3, 4] };
my $h2 = { h1k3 => 1, h1k2 => [2, 99, 13] };
my %hash = ( %$h1, %$h2 );
Это фактически:
my %hash = ( h1k1 => 1, h1k2 => [1, 2, 3, 4], h1k3 => 1, h1k2 => [2, 99, 13] );
И вполне естественно, что более поздний h1k2 => [2, 99, 13] замещает более ранний h1k2 => [1, 2, 3, 4]. Когда я объединяю хеши я рассчитываю именно на такое поведение, и манипулируя порядком хешей указываю, чей приоритет выше при одинаковых ключах.