package Moo::_Utils;
+sub _getglob { \*{$_[0]} }
+sub _getstash { \%{"$_[0]::"} }
+
use strictures 1;
use base qw(Exporter);
our @EXPORT = qw(_getglob _install_modifier _load_module _maybe_load_module);
-sub _getglob { no strict 'refs'; \*{$_[0]} }
-
sub _install_modifier {
my ($into, $type, $name, $code) = @_;
our %MAYBE_LOADED;
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;
}