![](/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.