【发布时间】:2017-03-16 10:19:31
【问题描述】:
我要备份哈希,保留原始哈希,使用备份的哈希数据。
并删除了备份的哈希数据。
但是,原来的哈希数据已经被删除了。
这里是代码。
my %hash = (
'data1' => {
'data2' => {
'data3' => 'one',
},
},
);
foreach (1..3) {
my %hash_backup = %hash;
print $hash{'data1'}->{'data2'}->{'data3'},"\n";
print $hash_backup{'data1'}->{'data2'}->{'data3'},"\n";
print "-------------------------------\n";
delete $hash_backup{'data1'}->{'data2'};
print $hash{'data1'}->{'data2'}->{'data3'},"\n";
print $hash_backup{'data1'}->{'data2'}->{'data3'},"\n";
print "================================\n";
}
结果,
one
one
-------------------------------
================================
-------------------------------
================================
-------------------------------
================================
如果更改删除代码,它可以正常工作。
delete $hash_backup{'data1'};
结果,
one
one
-------------------------------
one
================================
one
one
-------------------------------
one
================================
one
one
-------------------------------
one
================================
我认为是哈希引用问题。
如何保留原始哈希并删除备份哈希?
【问题讨论】:
-
您不是在复制值,而是在复制引用。这只会创建更多指向相同数据的指针。