【发布时间】:2013-05-04 02:24:46
【问题描述】:
我正在寻找一个受祝福对象的深层(此时,浅层可能就足够了)副本。
Foo 类
package Foo;
our $FOO = new Foo; # initial run
sub new {
my $class = shift;
my $self = {};
bless $self, $class;
return $self;
}
主程序
use Foo;
my $copy = $Foo::FOO; # instead of creating a ref, want to deep copy here
$copy->{bar} = 'bar';
bar 出现在 $Foo::FOO 和 $copy 中。我意识到我可以通过将其设置为$copy = { %{$Foo::FOO} } 来创建该对象的副本,但随后它将不再受到祝福;此外,这仅适用于简单的数据结构(现在不是问题)。是不是只能这样复制,然后祝福(如$copy = bless { %{$Foo::FOO} }, q{Foo};)?
我尽量避免使用 Moose、Clone 或其他非核心模块/包,因此请在回复时记住这一点。更多:)
【问题讨论】:
-
接受的解决方案可能会改变:注意它更适合浅拷贝简单的数据结构,但不能解决深拷贝,甚至更高级的类结构;这是我最初的问题。请记住,所选答案将来可能会发生变化。