Blame README

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.