Moo::Role - Minimal Object Orientation support for Roles |
Moo::Role - Minimal Object Orientation support for Roles
package My::Role;
use Moo::Role; use strictures 2;
sub foo { ... }
sub bar { ... }
has baz => ( is => 'ro', );
1;
And elsewhere:
package Some::Class;
use Moo; use strictures 2;
# bar gets imported, but not foo with('My::Role');
sub foo { ... }
1;
Moo::Role
builds upon the Role::Tiny manpage, so look there for most of the
documentation on how this works. The main addition here is extra bits to make
the roles more ``Moosey;'' which is to say, it adds has.
See IMPORTED SUBROUTINES in the Role::Tiny manpage for all the other subroutines that are imported by this module.
has attr => ( is => 'ro', );
Declares an attribute for the class to be composed into. See Moo/has for all options.
the Moo::Role manpage cleans up its own imported methods and any imports
declared before the use Moo::Role
statement automatically.
Anything imported after use Moo::Role
will be composed into
consuming packages. A package that consumes this role:
package My::Role::ID;
use Digest::MD5 qw(md5_hex); use Moo::Role; use Digest::SHA qw(sha1_hex);
requires 'name';
sub as_md5 { my ($self) = @_; return md5_hex($self->name); } sub as_sha1 { my ($self) = @_; return sha1_hex($self->name); }
1;
..will now have a $self->sha1_hex()
method available to it
that probably does not do what you expect. On the other hand, a call
to $self->md5_hex()
will die with the helpful error message:
Can't locate object method "md5_hex"
.
See Moo/``CLEANING UP IMPORTS'' for more details.
See Moo for support and contact information.
See Moo for authors.
See Moo for the copyright and license.
Moo::Role - Minimal Object Orientation support for Roles |