Tôi đang tìm cách làm sâu (tại thời điểm này, cạn có thể đủ) bản sao của một đối tượng may mắn.Perl: Làm thế nào để sao chép sâu một đối tượng may mắn?
Foo Lớp
package Foo;
our $FOO = new Foo; # initial run
sub new {
my $class = shift;
my $self = {};
bless $self, $class;
return $self;
}
Chương trình chính
use Foo;
my $copy = $Foo::FOO; # instead of creating a ref, want to deep copy here
$copy->{bar} = 'bar';
bar
xuất hiện trong cả hai $Foo::FOO
và $copy
. Tôi nhận ra rằng tôi có thể tạo một bản sao của đối tượng bằng cách thiết lập nó như là , nhưng sau đó nó sẽ không còn được ban phước; ngoài ra, điều này sẽ chỉ làm việc cho các cấu trúc dữ liệu đơn giản (ngay bây giờ không phải là một vấn đề). Cách duy nhất để sao chép theo cách này và sau đó chúc lành cho sau (ví dụ: $copy = bless { %{$Foo::FOO} }, q{Foo};
)?
Tôi đang cố gắng tránh sử dụng Moose, Clone hoặc các mô-đun/gói không phải cốt lõi khác, vì vậy, hãy nhớ điều đó khi trả lời. Được in đậm để nổi bật hơn :)
Giải pháp được chấp nhận có thể thay đổi: lưu ý rằng việc sao chép cấu trúc dữ liệu đơn giản hơn, nhưng không giải quyết được việc sao chép sâu hoặc thậm chí nhiều cấu trúc lớp nâng cao hơn; đó là câu hỏi ban đầu của tôi. Lưu ý rằng câu trả lời đã chọn có thể thay đổi trong tương lai. – vol7ron