Role::Tiny - Roles. Like a nouvelle cuisine portion size slice of Moose.
package Some::Role; use Role::Tiny; sub foo { ... } sub bar { ... } around baz => sub { ... } 1;
else where
package Some::Class; use Role::Tiny::With; # bar gets imported, but not foo with 'Some::Role'; sub foo { ... } # baz is wrapped in the around modifier by Class::Method::Modifiers sub baz { ... } 1;
If you wanted attributes as well, look at Moo::Role.
Role::Tiny is a minimalist role composition tool.
Role::Tiny
Role composition can be thought of as much more clever and meaningful multiple inheritance. The basics of this implementation of roles is:
If a method is already defined on a class, that method will not be composed in from the role.
If a method that the role "requires" to be implemented is not implemented, role application will fail loudly.
Unlike Class::C3, where the last class inherited from "wins," role composition is the other way around, where first wins. In a more complete system (see Moose) roles are checked to see if they clash. The goal of this is to be much simpler, hence disallowing composition of multiple roles at once.
Role::Tiny->apply_role_to_package('Some::Package', 'Some::Role');
Composes role with package. See also Role::Tiny::With.
Role::Tiny->apply_roles_to_object($foo, qw(Some::Role1 Some::Role2));
Composes roles in order into object directly. Object is reblessed into the resulting class.
Role::Tiny->create_class_with_roles('Some::Base', qw(Some::Role1 Some::Role2));
Creates a new class based on base, with the roles composed into it in order. New class is returned.
if (Role::Tiny::does_role($foo, 'Some::Role')) { ... }
Returns true if class has been composed with role.
This subroutine is also installed as ->does on any class a Role::Tiny is composed into unless that class already has an ->does method, so
if ($foo->does('Some::Role')) { ... }
will work for classes but to test a role, one must use ::does_role directly
requires qw(foo bar);
Declares a list of methods that must be defined to compose role.
with 'Some::Role1'; with 'Some::Role2';
Composes another role into the current role. Only one role may be composed in at a time to allow the code to remain as simple as possible.
before foo => sub { ... };
See "before method(s) => sub { ... }" in Class::Method::Modifiers for full documentation.
Note that since you are not required to use method modifiers, Class::Method::Modifiers is lazily loaded and we do not declare it as a dependency. If your Role::Tiny role uses modifiers you must depend on both Class::Method::Modifiers and Role::Tiny.
around foo => sub { ... };
See "around method(s) => sub { ... }" in Class::Method::Modifiers for full documentation.
after foo => sub { ... };
See "after method(s) => sub { ... }" in Class::Method::Modifiers for full documentation.
Role::Tiny is the attribute-less subset of Moo::Role; Moo::Role is a meta-protocol-less subset of the king of role systems, Moose::Role.
If you don't want method modifiers and do want to be forcibly restricted to a single role application per class, Ovid's Role::Basic exists. But Stevan Little (the Moose author) and I are both still convinced that he's Doing It Wrong.
mst - Matt S. Trout (cpan:MSTROUT) <mst@shadowcat.co.uk>
dg - David Leadbeater (cpan:DGL) <dgl@dgl.cx>
frew - Arthur Axel "fREW" Schmidt (cpan:FREW) <frioux@gmail.com>
hobbs - Andrew Rodland (cpan:ARODLAND) <arodland@cpan.org>
jnap - John Napiorkowski (cpan:JJNAPIORK) <jjn1056@yahoo.com>
ribasushi - Peter Rabbitson (cpan:RIBASUSHI) <ribasushi@cpan.org>
chip - Chip Salzenberg (cpan:CHIPS) <chip@pobox.com>
ajgb - Alex J. G. Burzyński (cpan:AJGB) <ajgb@cpan.org>
doy - Jesse Luehrs (cpan:DOY) <doy at tozt dot net>
perigrin - Chris Prather (cpan:PERIGRIN) <chris@prather.org>
Copyright (c) 2010-2012 the Role::Tiny "AUTHOR" and "CONTRIBUTORS" as listed above.
This library is free software and may be distributed under the same terms as perl itself.
1 POD Error
The following errors were encountered while parsing the POD:
Non-ASCII character seen before =encoding in 'Burzyński'. Assuming UTF-8
To install Role::Tiny, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Role::Tiny
CPAN shell
perl -MCPAN -e shell install Role::Tiny
For more information on module installation, please visit the detailed CPAN module installation guide.