use XSAccessor if available
[gitmo/Role-Tiny.git] / lib / Class / Tiny / _Utils.pm
index b046068..b166515 100644 (file)
@@ -3,7 +3,7 @@ package Class::Tiny::_Utils;
 use strictures 1;
 use base qw(Exporter);
 
-our @EXPORT = qw(_getglob _install_modifier);
+our @EXPORT = qw(_getglob _install_modifier _maybe_load_module);
 
 sub _getglob { no strict 'refs'; \*{$_[0]} }
 
@@ -22,4 +22,20 @@ sub _install_modifier {
   Class::Method::Modifiers::install_modifier(@_);
 }
 
+our %MAYBE_LOADED;
+
+sub _maybe_load_module {
+  return $MAYBE_LOADED{$_[0]} if exists $MAYBE_LOADED{$_[0]};
+  (my $proto = $_[0]) =~ s/::/\//g;
+  if (eval { require "${proto}.pm"; 1 }) {
+    $MAYBE_LOADED{$_[0]} = 1;
+  } else {
+    if (exists $INC{"${proto}.pm"}) {
+      warn "$_[0] exists but failed to load with error: $@";
+    }
+    $MAYBE_LOADED{$_[0]} = 0;
+  }
+  return $MAYBE_LOADED{$_[0]};
+}
+
 1;