MooseX::SetOnce(3) User Contributed Perl Documentation MooseX::SetOnce(3)

# [SYNOPSIS](#SYNOPSIS)

Add the "SetOnce" trait to attributes:

```
  package Class;
  use Moose;
  use MooseX::SetOnce;
  has some_attr => (
    is     => 'rw',
    traits => [ qw(SetOnce) ],
  );
```

...and then you can only set them once:

```
  my $object = Class->new;
  $object->some_attr(10);  # works fine
  $object->some_attr(20);  # throws an exception: it's already set!
```

# [DESCRIPTION](#DESCRIPTION)

The 'SetOnce' attribute lets your class have attributes that are not lazy and not set, but that cannot be altered once set.

The logic is very simple: if you try to alter the value of an attribute with the SetOnce trait, either by accessor or writer, and the attribute has a value, it will throw an exception.

If the attribute has a clearer, you may clear the attribute and set it again.

2026-10-25 perl v5.44.0

---

Document: MooseX::SetOnce(3pm) from perl-moosex-setonce 0.203-r5 (Chainguard OS)
Source: https://github.com/rjbs/MooseX-SetOnce
