|
Packit |
8df772 |
Clone - recursively copy Perl datatypes
|
|
Packit |
8df772 |
=======================================
|
|
Packit |
8df772 |
|
|
Packit |
8df772 |
[![Build Status](https://travis-ci.org/garu/Clone.png?branch=master)](https://travis-ci.org/garu/Clone)
|
|
Packit |
8df772 |
[![Coverage Status](https://coveralls.io/repos/garu/Clone/badge.png?branch=master)](https://coveralls.io/r/garu/Clone?branch=master)
|
|
Packit |
8df772 |
[![CPAN version](https://badge.fury.io/pl/Clone.svg)](https://metacpan.org/pod/Clone)
|
|
Packit |
8df772 |
|
|
Packit |
8df772 |
This module provides a `clone()` method which makes recursive
|
|
Packit |
8df772 |
copies of nested hash, array, scalar and reference types,
|
|
Packit |
8df772 |
including tied variables and objects.
|
|
Packit |
8df772 |
|
|
Packit |
8df772 |
```perl
|
|
Packit |
8df772 |
use Clone 'clone';
|
|
Packit |
8df772 |
|
|
Packit |
8df772 |
my $data = {
|
|
Packit |
8df772 |
set => [ 1 .. 50 ],
|
|
Packit |
8df772 |
foo => {
|
|
Packit |
8df772 |
answer => 42,
|
|
Packit |
8df772 |
object => SomeObject->new,
|
|
Packit |
8df772 |
},
|
|
Packit |
8df772 |
};
|
|
Packit |
8df772 |
|
|
Packit |
8df772 |
my $cloned_data = clone($data);
|
|
Packit |
8df772 |
|
|
Packit |
8df772 |
$cloned_data->{foo}{answer} = 1;
|
|
Packit |
8df772 |
print $cloned_data->{foo}{answer}; # '1'
|
|
Packit |
8df772 |
print $data->{foo}{answer}; # '42'
|
|
Packit |
8df772 |
```
|
|
Packit |
8df772 |
|
|
Packit |
8df772 |
You can also add it to your class:
|
|
Packit |
8df772 |
|
|
Packit |
8df772 |
```perl
|
|
Packit |
8df772 |
package Foo;
|
|
Packit |
8df772 |
use parent 'Clone';
|
|
Packit |
8df772 |
sub new { bless {}, shift }
|
|
Packit |
8df772 |
|
|
Packit |
8df772 |
package main;
|
|
Packit |
8df772 |
|
|
Packit |
8df772 |
my $obj = Foo->new;
|
|
Packit |
8df772 |
my $copy = $obj->clone;
|
|
Packit |
8df772 |
```
|
|
Packit |
8df772 |
|
|
Packit |
8df772 |
`clone()` takes a scalar argument and duplicates it. To duplicate lists,
|
|
Packit |
8df772 |
arrays or hashes, pass them in by reference, e.g.
|
|
Packit |
8df772 |
|
|
Packit |
8df772 |
```perl
|
|
Packit |
8df772 |
my $copy = clone (\@array);
|
|
Packit |
8df772 |
|
|
Packit |
8df772 |
# or
|
|
Packit |
8df772 |
|
|
Packit |
8df772 |
my %copy = %{ clone (\%hash) };
|
|
Packit |
8df772 |
```
|
|
Packit |
8df772 |
|
|
Packit |
8df772 |
See Also
|
|
Packit |
8df772 |
--------
|
|
Packit |
8df772 |
|
|
Packit |
8df772 |
[Storable](https://metacpan.org/pod/Storable)'s `dclone()` is a flexible solution for cloning variables,
|
|
Packit |
8df772 |
albeit slower for average-sized data structures. Simple
|
|
Packit |
8df772 |
and naive benchmarks show that Clone is faster for data structures
|
|
Packit |
8df772 |
with 3 or fewer levels, while `dclone()` can be faster for structures
|
|
Packit |
8df772 |
4 or more levels deep.
|
|
Packit |
8df772 |
|
|
Packit |
8df772 |
COPYRIGHT
|
|
Packit |
8df772 |
---------
|
|
Packit |
8df772 |
|
|
Packit |
8df772 |
Copyright 2001-2017 Ray Finch. All Rights Reserved.
|
|
Packit |
8df772 |
|
|
Packit |
8df772 |
This module is free software; you can redistribute it and/or
|
|
Packit |
8df772 |
modify it under the same terms as Perl itself.
|
|
Packit |
8df772 |
|
|
Packit |
8df772 |
AUTHOR
|
|
Packit |
8df772 |
------
|
|
Packit |
8df772 |
|
|
Packit |
8df772 |
Ray Finch `<rdf@cpan.org>`
|
|
Packit |
8df772 |
|
|
Packit |
8df772 |
Breno G. de Oliveira `<garu@cpan.org>` and
|
|
Packit |
8df772 |
Florian Ragwitz `<rafl@debian.org>` perform routine maintenance
|
|
Packit |
8df772 |
releases since 2012.
|