Perl 模块 Clone

简介

深度复制 Perl 中的数据结构;

可以像下面这样使用

use Clone 'clone';
 
my $data = {
   set => [ 1 .. 50 ],
   foo => {
       answer => 42,
       object => SomeObject->new,
   },
};
 
my $cloned_data = clone($data);
 
$cloned_data->{foo}{answer} = 1;
print $cloned_data->{foo}{answer};  # '1'
print $data->{foo}{answer};         # '42'

也可以把它应用到你的类中

package Foo;
use parent 'Clone';
sub new { bless {}, shift }
 
package main;
 
my $obj = Foo->new;
my $copy = $obj->clone;

详细说明

这个模块提供了一个 clone 方法,使用这个方法可以递归地复制嵌套的hash,array,scalar和reference类型的值,包括绑定的对象和变量。clone() 接收一个标量作为参数,并且进行深度复制。

my $copy = clone (\@array);
 
# or
 
my %copy = %{ clone (\%hash) };

注:它能够正确的处理,递归引用(循环引用)或自引用的hash结构。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 简介 把两个任意深度的hash合并成一个。 使用方式如下: 详情 在任何层级,都只从一个hash结构合并无冲突的键...
    JSON_NULL阅读 6,291评论 3 2
  • 列表一直是计算机的核心部分,因为之前有计算机,在这段时间里,许多恶魔占据了他们的细节。 它们实际上是 Perl 6...
    焉知非鱼阅读 5,774评论 0 0
  • 最近在看 Greg London 的Impatient Perl,再次感受 Perl 的奇怪(不过之前用过 Rub...
    Pope怯懦懦地阅读 4,572评论 1 5
  • 捕获 签名不仅仅是语法,它们是含有一列参数对象的 first-class 对象 。同样地,有一种含有参数集的数据...
    焉知非鱼阅读 3,775评论 0 0
  • 2009 有用的和有意思的循环 让我们来看一个基本的例子. 这是一个最简单清晰的语法的例子.在这并没有使用括号来包...
    焉知非鱼阅读 3,704评论 0 0