1# $Id: Clone.pm,v 0.31 2009/01/20 04:54:37 ray Exp $ 2package Clone; 3 4use strict; 5use Carp; 6use vars qw($VERSION @ISA @EXPORT @EXPORT_OK $AUTOLOAD); 7 8require Exporter; 9require DynaLoader; 10require AutoLoader; 11 12@ISA = qw(Exporter DynaLoader); 13# Items to export into callers namespace by default. Note: do not export 14# names by default without a very good reason. Use EXPORT_OK instead. 15# Do not simply export all your public functions/methods/constants. 16@EXPORT = qw(); 17@EXPORT_OK = qw( clone ); 18 19$VERSION = '0.31'; 20 21bootstrap Clone $VERSION; 22 23# Preloaded methods go here. 24 25# Autoload methods go after =cut, and are processed by the autosplit program. 26 271; 28__END__ 29 30=head1 NAME 31 32Clone - recursively copy Perl datatypes 33 34=head1 SYNOPSIS 35 36 use Clone; 37 38 push @Foo::ISA, 'Clone'; 39 40 $a = new Foo; 41 $b = $a->clone(); 42 43 # or 44 45 use Clone qw(clone); 46 47 $a = { 'foo' => 'bar', 'move' => 'zig' }; 48 $b = [ 'alpha', 'beta', 'gamma', 'vlissides' ]; 49 $c = new Foo(); 50 51 $d = clone($a); 52 $e = clone($b); 53 $f = clone($c); 54 55=head1 DESCRIPTION 56 57This module provides a clone() method which makes recursive 58copies of nested hash, array, scalar and reference types, 59including tied variables and objects. 60 61 62clone() takes a scalar argument and an optional parameter that 63can be used to limit the depth of the copy. To duplicate lists, 64arrays or hashes, pass them in by reference. e.g. 65 66 my $copy = clone (\@array); 67 68 # or 69 70 my %copy = %{ clone (\%hash) }; 71 72 73For a slower, but more flexible solution see Storable's dclone(). 74 75=head1 AUTHOR 76 77Ray Finch, rdf@cpan.org 78 79Copyright 2001 Ray Finch. 80 81This module is free software; you can redistribute it and/or 82modify it under the same terms as Perl itself. 83 84=head1 SEE ALSO 85 86Storable(3). 87 88=cut 89