X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FRole%2FTiny.pm;h=10ef3c31bc841c43ff2bb32ca05831879fd2cff7;hb=5e03b55c684139e8f776dceaeee8a6dc51380ff1;hp=d1a2bbb3740915462b2ac5e0b1fb8081a458aa3e;hpb=2215d4b9bdc64e7994b2a90d50cc2ab906115d0f;p=gitmo%2FRole-Tiny.git diff --git a/lib/Role/Tiny.pm b/lib/Role/Tiny.pm index d1a2bbb..10ef3c3 100644 --- a/lib/Role/Tiny.pm +++ b/lib/Role/Tiny.pm @@ -1,6 +1,7 @@ package Role::Tiny; sub _getglob { \*{$_[0]} } +sub _getstash { \%{"$_[0]::"} } use strict; use warnings FATAL => 'all'; @@ -9,9 +10,14 @@ our %INFO; 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; }