1
如何将多层嵌套散列(例如%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)."] ";
感谢您的帮助
'$ b {kb} = {%a};'比'%{$ b {kb}} =%a;'更可读。与'$ b {kb} = \%a;'类似,可以更容易地进行对比。 – ikegami
@ikegami大括号(例如'{%a}'是否获取变量的引用(地址)? – gsinha
@ikegami感谢您提出改进意见。 com/q/14911586/1443563) – gsinha