Ich suche eine tiefe Kopie eines gesegneten Objekts (an dieser Stelle seicht vielleicht).Perl: Wie man ein gesegnetes Objekt tief kopiert?
Foo Klasse
package Foo;
our $FOO = new Foo; # initial run
sub new {
my $class = shift;
my $self = {};
bless $self, $class;
return $self;
}
Hauptprogramm
use Foo;
my $copy = $Foo::FOO; # instead of creating a ref, want to deep copy here
$copy->{bar} = 'bar';
bar
sowohl erscheint in $Foo::FOO
und $copy
. Ich weiß, dass ich eine Kopie des Objekts erstellen konnte, indem ich es als einrichtete, aber dann wäre es nicht mehr gesegnet; Außerdem würde dies nur für einfache Datenstrukturen funktionieren (momentan kein Problem). Ist die einzige Möglichkeit, diesen Weg zu kopieren und danach zu segnen (zB $copy = bless { %{$Foo::FOO} }, q{Foo};
)?
Ich versuche, die Verwendung von Moose, Clone oder anderen Nicht-Core-Modulen/-Paketen zu vermeiden. Bitte beachten Sie dies bei der Antwort. So fett, dass es mehr herausragt :)
Akzeptierte Lösung kann sich ändern: Beachten Sie, dass es mehr für das flache Kopieren einfacher Datenstrukturen ist, aber tiefes Kopieren oder sogar höher entwickelte Klassenstrukturen nicht lösen würde; Das war meine ursprüngliche Frage. In diesem Sinne kann sich die ausgewählte Antwort in Zukunft ändern. – vol7ron