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 marked for
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 theClone
trait will get that argument passed to theclone
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.