如何复制嵌套哈希

时间:2014-07-17 13:33:12

标签: perl hash perl-data-structures perl-hash

如何将多级嵌套哈希(比方说,%A)复制到另一个哈希(比如%B)?我想确保新哈希不包含与原始哈希(%A)相同的引用(指针)。

  

如果我更改原始哈希值(%A)中的任何内容,则不应更改   新哈希中的任何内容(%B)。

     

我想要一种通用的方法来做到这一点。我知道我可以通过重新分配价值来做到这一点   对于每个级别的键(例如,%{$ b {kb}} =%a;)。

但是,应该有一个解决方案,无论关键级别的数量如何(散列哈希的散列哈希)都可以使用

问题示例

use Data::Dumper; 
my %a=(q=>{ 
            q1=>1, 
            q2=>2, 
       }, 
        w=>2); 
my %b; 
my %c; 
%{ $b{kb} } = %a; 

print "\%b=[".Data::Dumper::Dumper (%b)."] "; 
%{ $c{kc} } = %a; # $b{kb} = \%a; 
print "\n\%c=[".Data::Dumper::Dumper (%c)."] "; 

# CHANGE THE VALUE OF KEY IN ORIGINAL HASH %a 
$a{q}{q1} = 2; # $c{kc} = \%a; 
print "\n\%b=[".Data::Dumper::Dumper (%b)."] "; 
print "\n\%c=[".Data::Dumper::Dumper (%c)."] ";

感谢您的帮助

1 个答案:

答案 0 :(得分:3)

您想要的通常称为“深层复制”,其中赋值运算符执行“浅层复制”。

use Storable qw( dclone );

my $copy = dclone($src);