remove bless because it confuses things
[gitmo/Moo.git] / lib / Moo / _Utils.pm
1 package Moo::_Utils;
2
3 use strictures 1;
4 use base qw(Exporter);
5
6 our @EXPORT = qw(_getglob _install_modifier _maybe_load_module);
7
8 sub _getglob { no strict 'refs'; \*{$_[0]} }
9
10 sub _install_modifier {
11   my ($into, $type, $name, $code) = @_;
12   my $ref = ref(my $to_modify = $into->can($name));
13
14   require Sub::Defer;
15   Sub::Defer::undefer_sub($to_modify);
16
17   require Class::Method::Modifiers;
18   Class::Method::Modifiers::install_modifier(@_);
19 }
20
21 our %MAYBE_LOADED;
22
23 sub _maybe_load_module {
24   return $MAYBE_LOADED{$_[0]} if exists $MAYBE_LOADED{$_[0]};
25   (my $proto = $_[0]) =~ s/::/\//g;
26   if (eval { require "${proto}.pm"; 1 }) {
27     $MAYBE_LOADED{$_[0]} = 1;
28   } else {
29     if (exists $INC{"${proto}.pm"}) {
30       warn "$_[0] exists but failed to load with error: $@";
31     }
32     $MAYBE_LOADED{$_[0]} = 0;
33   }
34   return $MAYBE_LOADED{$_[0]};
35 }
36
37 1;