如何在perl中合并2个深哈希

Mar*_*n08 3 algorithm perl hash merge

我在Perl中写了一个sub来合并相同结构的2个哈希; 合并($ a,$ b)

$a = {
 k1 => { sk1 => 'v1' },
 k2 => { sk3 => 'v3', sk4 => 'v4' }
};
$b = {
 k1 => { sk2 => 'v2'},
 k3 => { sk5 => 'v5'} 
};
Run Code Online (Sandbox Code Playgroud)

会导致

$c = {
 k1 => { sk1 => 'v1', sk2 => 'v2' },
 k2 => { sk3 => 'v3', sk4 => 'v4' }
 k3 => { sk5 => 'v5'} 
};
Run Code Online (Sandbox Code Playgroud)

下面是我的合并代码,它不起作用.我该如何纠正?谢谢.

sub merge {
 my ($old,$new) = @_;
 foreach my $k (keys($old)) {
  if (exists $new->{$k}) {
   if (ref($old->{$k}) eq 'HASH') {
    merge($old->{$k},$new->{$k});
   } else {
    $new->{$k} = $old->{$k};
   } 
  } else { 
   $new->{$k} = $old->{$k};
  }
 }
 return $new;
}
Run Code Online (Sandbox Code Playgroud)

Bra*_*ace 10

除非你这样做只是为了了解它是如何完成的,否则我会使用像Hash :: MergeHash :: Merge :: Simple这样的预制解决方案.