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

# [SYNOPSIS](#SYNOPSIS)

```
    package Foo;
    use Moose;
    use MooseX::LazyRequire;
    has foo => (
        is            => 'ro',
        lazy_required => 1,
    );
    has bar => (
        is      => 'ro',
        builder => '_build_bar',
    );
    sub _build_bar { shift->foo }
    Foo->new(foo => 42); # succeeds, foo and bar will be 42
    Foo->new(bar => 42); # succeeds, bar will be 42
    Foo->new;            # fails, neither foo nor bare were given
```

# [DESCRIPTION](#DESCRIPTION)

This module adds a "lazy\_required" option to Moose attribute declarations.

The reader methods for all attributes with that option will throw an exception unless a value for the attributes was provided earlier by a constructor parameter or through a writer method.

# [CAVEATS](#CAVEATS)

Prior to Moose 1.9900, roles didn't have an attribute metaclass, so this module can't easily apply its magic to attributes defined in roles. If you want to use "lazy\_required" in role attributes, you'll have to apply the attribute trait yourself:

```
    has foo => (
        traits        => ['LazyRequire'],
        is            => 'ro',
        lazy_required => 1,
    );
```

With Moose 1.9900, you can use this module in roles just the same way you can in classes.

2026-10-25 perl v5.44.0

---

Document: MooseX::LazyRequire(3pm) from perl-moosex-lazyrequire 0.11-r3 (Chainguard OS)
Source: https://github.com/moose/MooseX-LazyRequire
