package Role::Tiny;
sub _getglob { \*{$_[0]} }
+sub _getstash { \%{"$_[0]::"} }
use strict;
use warnings FATAL => 'all';
our %APPLIED_TO;
our %COMPOSED;
+# inlined from Moo::_Utils - update that first.
+
sub _load_module {
- return 1 if $_[0]->can('can');
(my $proto = $_[0]) =~ s/::/\//g;
+ return 1 if $INC{"${proto}.pm"};
+ # can't just ->can('can') because a sub-package Foo::Bar::Baz
+ # creates a 'Baz::' key in Foo::Bar's symbol table
+ return 1 if grep !/::$/, keys %{_getstash($_[0])||{}};
require "${proto}.pm";
return 1;
}
sub import {
my $target = caller;
- my $me = $_[0];
+ my $me = shift;
strictures->import;
return if $INFO{$target}; # already exported into this package
# get symbol table reference
package Some::Class;
- require Role::Tiny;
+ use Role::Tiny::With;
# bar gets imported, but not foo
- Role::Tiny->apply_role_to_package('Some::Role', __PACKAGE__);
+ with 'Some::Role';
sub foo { ... }
Role::Tiny->apply_role_to_package('Some::Package', 'Some::Role');
-Composes role with package
+Composes role with package. See also L<Role::Tiny::With>.
=head2 apply_roles_to_object