![](/img/trans.png)
[英]What is the best way to make login session with Perl's HTML::Mason?
[英]What's the best way to make a deep copy of a data structure in Perl?
给定一个数据结构(例如散列的散列),制作深层副本以供立即使用的干净/推荐的方法是什么? 假设合理的情况,数据不是特别大,不存在复杂的循环,可读性/可维护性等。 不惜一切代价比速度更重要。
我知道我可以使用Storable 、 Clone 、 Clone::More、 Clone::Fast 、 Data::Dumper等。当前的最佳实践是什么?
Clone
比Storable::dclone
,但后者支持更多数据类型。
Clone::Fast
和Clone::More
如果内存对我来说是正确的,那么几乎相当,但是功能甚至比克隆更少,而Scalar::Util::Clone
支持甚至更少,但对于某些结构来说,IIRC是最快的。
关于可读性,这些应该都是相同的,它们实际上是可以互换的。
如果您没有特定的性能需求,我会使用Storable的dclone。
我不会因为它如此繁琐和迂回而使用Data::Dumper
。 它可能会非常缓慢。
对于它的价值,如果你想要可定制的克隆,那么Data::Visitor
提供了挂钩功能,相当完整的功能完全深度克隆是默认行为。
我的印象是Storable::dclone()
有点规范。
克隆可能是你想要的。 至少,这就是我见过的所有代码所用的内容。
如果您已经在处理 JSON 并在代码中使用 JSON 模块,那么快速而肮脏的 hack:将结构转换为 JSON,然后将 JSON 转换回结构:
use JSON;
my %hash = (
obj => {},
arr => []
);
my $hash_ref_to_hash_copy = from_json(to_json(\%hash));
唯一的缺点可能是不得不处理散列引用而不是纯散列,但是,这对我来说已经派上用场了几次。
尝试使用Panda :: Lib中的 fclone
,这似乎是最快的(用XS编写)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.