---
name: "MooX::Role::CloneSet"
section: "3pm"
platform: "linux"
package: "libmoox-role-cloneset-perl"
version: "0.1.1-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/MooX::Role::CloneSet"
---

# MooX::Role::CloneSet(3pm)

create updated copies of immutable objects

## 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 \<roam@ringlet.net\>

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

## AUTHOR

Peter Pentchev \<roam@ringlet.net\>
