给定一个数据结构(例如散列哈希),什么是干净/推荐的方式来制作深层副本以供立即使用?假设合理的情况,数据不是特别大,没有复杂的循环,可读性/可维护性等.不惜一切代价比速度更重要.
我知道我可以使用Storable,Clone,Clone :: More,Clone :: Fast,Data :: Dumper等.目前的最佳做法是什么?
我显然误解了一些关于hashrefs如何在Perl中工作的东西,我在这里想要纠正这个问题.
我需要获得一个hashref的副本,我可以在不修改原始文件的情况下进行操作.根据我的研究,复制hashref就像使用equals运算符一样简单:
my $hashref_copy = $hashref;Run Code Online (Sandbox Code Playgroud)
但据我所知,所有这一切都是$hashref_copy指向原始对象的指针.考虑一下这个玩具代码:
my $hashref = {data => "fish"};
my $hashref_copy = $hashref;
$hashref_copy->{data} = "chips";
print "$hashref->{data}\n";
Run Code Online (Sandbox Code Playgroud)
如果$hashref_copy真的是一个独立的副本,我希望这个代码打印"鱼".相反,它打印"芯片".
所以要么1)我误解了一些事情,或者2)Perl被打破了.我很确定它不是#2,尽管我的自我会让我想到.
我哪里错了?我需要做些什么来使修改$hashref_copy 不会出现在原文中$hashref?