Я ищу сделать глубокий (на данный момент, мелкой может быть достаточно) копию благословенного объекта.Perl: Как глубоко скопировать благословенный объект?
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 = bless { %{$Foo::FOO} }, q{Foo};
)?
Я стараюсь избегать использования Moose, Clone или других неядерных модулей/пакетов, поэтому имейте это в виду при ответе. Bolded, так что он выделяется больше :)
Решение принятое решение может измениться: обратите внимание, что это больше для мелкого копирования простых структур данных, но не решит глубокое копирование или даже более сложные структуры классов; который был моим первоначальным вопросом. Учитывая это, выбранный ответ может измениться в будущем. – vol7ron