# NAME
MooX::Role::CloneSet - create updated copies of immutable objects
# SYNOPSIS
package Someone;
use Moo;
with 'MooX::Role::CloneSet';
has name => (
is => 'ro',
);
has race => (
is => 'ro',
);
package main;
my $first = Someone->new(name => 'Drizzt', race => 'drow');
my $hybrid = $first->cset(race => 'dwarf');
my $final = $weird->cset(name => 'Catti-brie', race => 'human');
# DESCRIPTION
`MooX::Role::CloneSet` is a role for immutable objects, providing an easy
way to create a new object with some modified properties. It provides
the `cset()` method that creates a new object with the specified changes,
shallowly copying all the rest of the original object's properties.
# METHODS
- cset(field => value, ...)
Shallowly clone the object, making the specified changes to its attributes.
Note that this method obtains the names and values of the current attributes
by dereferencing the object as a hash reference; since Moo does not provide
metaclasses by default, it cannot really get to them in any other way.
This will not work for parameters that declare an `init_arg`; see
`MooX::Role::CloneSet::BuildArgs` for an alternative if using truly
immutable objects.
# LICENSE
Copyright (C) 2016 Peter Pentchev <
[email protected]>
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
# AUTHOR
Peter Pentchev <
[email protected]>