MooseX::LazyRequire - Required attributes which fail only when trying to use them
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
This module adds a lazy_required option to Moose attribute declarations.
lazy_required
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.
Apparently Moose roles don'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, );
Florian Ragwitz <rafl@debian.org>
This software is copyright (c) 2010 by Florian Ragwitz.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
To install MooseX::LazyRequire, copy and paste the appropriate command in to your terminal.
cpanm
cpanm MooseX::LazyRequire
CPAN shell
perl -MCPAN -e shell install MooseX::LazyRequire
For more information on module installation, please visit the detailed CPAN module installation guide.