Role::Tiny(3pm) User Contributed Perl Documentation Role::Tiny(3pm) NAME Role::Tiny - Roles: a nouvelle cuisine portion size slice of Moose SYNOPSIS package Some::Role; use Role::Tiny; sub foo { ... } sub bar { ... } around baz => sub { ... }; 1; elsewhere 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. DESCRIPTION "Role::Tiny" is a minimalist role composition tool. ROLE COMPOSITION Role composition can be thought of as much more clever and meaningful multiple inheritance. The basics of this implementation of roles is: o If a method is already defined on a class, that method will not be composed in from the role. A method inherited by a class gets overridden by the role's method of the same name, though. o 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 the class wins. If multiple roles are applied in a single call (single with statement), then if any of their provided methods clash, an exception is raised unless the class provides a method since this conflict indicates a potential problem. ROLE METHODS All subs created after importing Role::Tiny will be considered methods to be composed. For example: package MyRole; use List::Util qw(min); sub mysub { } use Role::Tiny; use List::Util qw(max); sub mymethod { } In this role, "max" and "mymethod" will be included when composing MyRole, and "min" and "mysub" will not. For additional control, namespace::clean can be used to exclude undesired subs from roles. IMPORTED SUBROUTINES requires requires qw(foo bar); Declares a list of methods that must be defined to compose role. with with 'Some::Role1'; with 'Some::Role1', 'Some::Role2'; Composes another role into the current role (or class via Role::Tiny::With). If you have conflicts and want to resolve them in favour of Some::Role1 you can instead write: with 'Some::Role1'; with 'Some::Role2'; If you have conflicts and want to resolve different conflicts in favour of different roles, please refactor your codebase. before 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 around foo => sub { ... }; See "around 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. after after foo => sub { ... }; See "after 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. Strict and Warnings In addition to importing subroutines, using "Role::Tiny" applies strict and warnings to the caller. SUBROUTINES does_role 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. Additionally, Role::Tiny will override the standard Perl "DOES" method for your class. However, if "any" class in your class' inheritance hierarchy provides "DOES", then Role::Tiny will not override it. METHODS make_role Role::Tiny->make_role('Some::Role'); Makes a package into a role, but does not export any subs into it. apply_roles_to_package Role::Tiny->apply_roles_to_package( 'Some::Package', 'Some::Role', 'Some::Other::Role' ); Composes role with package. See also Role::Tiny::With. apply_roles_to_object 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. Note that the object's methods get overridden by the role's ones with the same names. create_class_with_roles 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. is_role Role::Tiny->is_role('Some::Role1') Returns true if the given package is a role. CAVEATS o On perl 5.8.8 and earlier, applying a role to an object won't apply any overloads from the role to other copies of the object. o On perl 5.16 and earlier, applying a role to a class won't apply any overloads from the role to any existing instances of the class. SEE ALSO 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. Ovid's Role::Basic provides roles with a similar scope, but without method modifiers, and having some extra usage restrictions. AUTHOR mst - Matt S. Trout (cpan:MSTROUT) <mst AT shadowcat.uk> CONTRIBUTORS dg - David Leadbeater (cpan:DGL) <dgl AT dgl.cx> frew - Arthur Axel "fREW" Schmidt (cpan:FREW) <frioux AT gmail.com> hobbs - Andrew Rodland (cpan:ARODLAND) <arodland AT cpan.org> jnap - John Napiorkowski (cpan:JJNAPIORK) <jjn1056 AT yahoo.com> ribasushi - Peter Rabbitson (cpan:RIBASUSHI) <ribasushi AT cpan.org> chip - Chip Salzenberg (cpan:CHIPS) <chip AT pobox.com> ajgb - Alex J. G. Burzyski (cpan:AJGB) <ajgb AT cpan.org> doy - Jesse Luehrs (cpan:DOY) <doy at tozt dot net> perigrin - Chris Prather (cpan:PERIGRIN) <chris AT prather.org> Mithaldu - Christian Walde (cpan:MITHALDU) <walde.christian AT googlemail.com> ilmari - Dagfinn Ilmari Mannsaker (cpan:ILMARI) <ilmari AT ilmari.org> tobyink - Toby Inkster (cpan:TOBYINK) <tobyink AT cpan.org> haarg - Graham Knop (cpan:HAARG) <haarg AT haarg.org> COPYRIGHT Copyright (c) 2010-2012 the Role::Tiny "AUTHOR" and "CONTRIBUTORS" as listed above. LICENSE This library is free software and may be distributed under the same terms as perl itself. perl v5.32.0 2021-01-24 Role::Tiny(3pm)
Generated by $Id: phpMan.php,v 4.55 2007/09/05 04:42:51 chedong Exp $ Author: Che Dong
On Apache
Under GNU General Public License
2024-12-12 19:39 @3.144.123.183 CrawledBy Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)