our %APPLIED_TO;
our %COMPOSED;
our %COMPOSITE_INFO;
+our @ON_ROLE_CREATE;
# Module state workaround totally stolen from Zefram's Module::Runtime.
BEGIN {
*_WORK_AROUND_BROKEN_MODULE_STATE = "$]" < 5.009 ? sub(){1} : sub(){0};
+ *_MRO_MODULE = "$]" < 5.010 ? sub(){"MRO/Compat.pm"} : sub(){"mro.pm"};
}
sub Role::Tiny::__GUARD__::DESTROY {
@{$INFO{$target}{not_methods}={}}{@not_methods} = @not_methods;
# a role does itself
$APPLIED_TO{$target} = { $target => undef };
+ $_->($target) for @ON_ROLE_CREATE;
}
sub role_application_steps {
die "${role} is not a Role::Tiny" unless $me->is_role($role);
}
- if ($] >= 5.010) {
- require mro;
- } else {
- require MRO::Compat;
- }
+ require(_MRO_MODULE);
my $composite_info = $me->_composite_info_for(@roles);
my %conflicts = %{$composite_info->{conflicts}};
sub does_role {
my ($proto, $role) = @_;
- if ($] >= 5.010) {
- require mro;
- } else {
- require MRO::Compat;
- }
+ require(_MRO_MODULE);
foreach my $class (@{mro::get_linear_isa(ref($proto)||$proto)}) {
return 1 if exists $APPLIED_TO{$class}{$role};
}
=item * On perl 5.8.8 and earlier, applying a role to an object won't apply any
overloads from the role to all copies of the object.
+=back
+
=head1 SEE ALSO
L<Role::Tiny> is the attribute-less subset of L<Moo::Role>; L<Moo::Role> is