Linux and UNIX Man Pages

Linux & Unix Commands - Search Man Pages

moosex::clone(3pm) [debian man page]

MooseX::Clone(3pm)					User Contributed Perl Documentation					MooseX::Clone(3pm)

NAME
MooseX::Clone - Fine grained cloning support for Moose objects. SYNOPSIS
package Bar; use Moose; with qw(MooseX::Clone); has foo => ( isa => "Foo", traits => [qw(Clone)], # this attribute will be recursively cloned ); package Foo; use Moose; # this API is used/provided by MooseX::Clone sub clone { my ( $self, %params ) = @_; # ... } # used like this: my $bar = Bar->new( foo => Foo->new ); my $copy = $bar->clone( foo => [ qw(Args for Foo::clone) ] ); DESCRIPTION
Out of the box Moose only provides very barebones cloning support in order to maximize flexibility. This role provides a "clone" method that makes use of the low level cloning support already in Moose and adds selective deep cloning based on introspection on top of that. Attributes with the "Clone" trait will handle cloning of data within the object, typically delegating to the attribute value's own "clone" method. TRAITS
Clone By default Moose objects are cloned like this: bless { %$old }, ref $old; By specifying the Clone trait for certain attributes custom behavior the value's own "clone" method will be invoked. By extending this trait you can create custom cloning for certain attributes. By creating "clone" methods for your objects (e.g. by composing MooseX::Compile) you can make them interact with this trait. NoClone Specifies attributes that should be skipped entirely while cloning. METHODS
clone %params Returns a clone of the object. All attributes which do the MooseX::Clone::Meta::Attribute::Trait::Clone role will handle cloning of that attribute. All other fields are plainly copied over, just like in "clone_object" in Class::MOP::Class. Attributes whose "init_arg" is in %params and who do the "Clone" trait will get that argument passed to the "clone" method (dereferenced). If the attribute does not self-clone then the param is used normally by "clone_object" in Class::MOP::Class, that is it will simply shadow the previous value, and does not have to be an array or hash reference. TODO
Refactor to work in term of a metaclass trait so that "meta->clone_object" will still do the right thing. THANKS
clkao made the food required to write this module VERSION CONTROL
<http://code2.0beta.co.uk/moose/svn/>. Ask on #moose for commit bits. AUTHOR
Yuval Kogman <nothingmuch@woobling.org> COPYRIGHT
Copyright (c) 2008 Yuval Kogman. All rights reserved This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. perl v5.10.1 2010-01-14 MooseX::Clone(3pm)

Check Out this Related Man Page

Data::Clone(3pm)					User Contributed Perl Documentation					  Data::Clone(3pm)

NAME
Data::Clone - Polymorphic data cloning VERSION
This document describes Data::Clone version 0.003. SYNOPSIS
# as a function use Data::Clone; my $data = YAML::Load("foo.yml"); # complex data structure my $cloned = clone($data); # makes Foo clonable package Foo; use Data::Clone; # ... # Foo is clonable my $o = Foo->new(); my $c = clone($o); # $o is deeply copied # used for custom clone methods package Bar; use Data::Clone qw(data_clone); sub clone { my($proto) = @_; my $object = data_clone($proto); $object->do_something(); return $object; } # ... # Bar is also clonable $o = Bar->new(); $c = clone($o); # Bar::clone() is called DESCRIPTION
"Data::Clone" does data cloning, i.e. copies things recursively. This is smart so that it works with not only non-blessed references, but also with blessed references (i.e. objects). When "clone()" finds an object, it calls a "clone" method of the object if the object has a "clone", otherwise it makes a surface copy of the object. That is, this module does polymorphic data cloning. Although there are several modules on CPAN which can clone data, this module has a different cloning policy from almost all of them. See "Cloning policy" and "Comparison to other cloning modules" for details. Cloning policy A cloning policy is a rule that how a cloning routine copies data. Here is the cloning policy of "Data::Clone". Non-reference values Non-reference values are copied normally, which will drop their magics. Scalar references Scalar references including references to other types of references are not copied deeply. They are copied on surface because it is typically used to refer to something unique, namely global variables or magical variables. Array references Array references are copied deeply. The cloning policy is applied to each value recursively. Hash references Hash references are copied deeply. The cloning policy is applied to each value recursively. Glob, IO and Code references These references are not copied deeply. They are copied on surface. Blessed references (objects) Blessed references are not copied deeply by default, because objects might have external resources which "Data::Clone" could not deal with. They will be copied deeply only if "Data::Clone" knows they are clonable, i.e. they have a "clone" method. If you want to make an object clonable, you can use the "clone()" function as a method: package Your::Class; use Data::Clone; # ... my $your_class = Your::Class->new(); my $c = clone($your_object); # $your_object->clone() will be called Or you can import "data_clone()" function to define your custom clone method: package Your::Class; use Data::Clone qw(data_clone); sub clone { my($proto) = @_; my $object = data_clone($proto); # anything what you want return $object; } Of course, you can use "Clone::clone()", "Storable::dclone()", and/or anything you want as an implementation of "clone" methods. Comparison to other cloning modules There are modules which does data cloning. "Storable" is a standard module which can clone data with "dclone()". It has a different cloning policy from "Data::Clone". By default it tries to make a deep copy of all the data including blessed references, but you can change its behaviour with specific hook methods. "Clone" is a well-known cloning module, but it does not polymorphic cloning. This makes a deep copy of data regardless of its types. Moreover, there is no way to change its behaviour, so this is useful only for data which link to no external resources. "Data::Clone" makes a deep copy of data only if it knows that the data are clonable. You can change its behaviour simply by defining "clone" methods. It also exceeds "Storable" and "Clone" in performance. INTERFACE
Exported functions clone(Scalar) Returns a copy of Scalar. Exportable functions data_clone(Salar) Returns a copy of Scalar. The same as "clone()". Provided for custom clone methods. is_cloning() Returns true inside the "clone()" function, false otherwise. DEPENDENCIES
Perl 5.8.1 or later, and a C compiler. BUGS
No bugs have been reported. Please report any bugs or feature requests to the author. SEE ALSO
Storable Clone AUTHOR
Goro Fuji (gfx) <gfuji(at)cpan.org> LICENSE AND COPYRIGHT
Copyright (c) 2010, Goro Fuji (gfx). All rights reserved. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. perl v5.14.2 2011-01-15 Data::Clone(3pm)
Man Page