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