#line 1
package UNIVERSAL::require;
$UNIVERSAL::require::VERSION = '0.11';
# We do this because UNIVERSAL.pm uses CORE::require(). We're going
# to put our own require() into UNIVERSAL and that makes an ambiguity.
# So we load it up beforehand to avoid that.
BEGIN { require UNIVERSAL }
package UNIVERSAL;
use strict;
use vars qw($Level);
$Level = 0;
#line 69
sub require {
my($module, $want_version) = @_;
$UNIVERSAL::require::ERROR = '';
die("UNIVERSAL::require() can only be run as a class method")
if ref $module;
die("UNIVERSAL::require() takes no or one arguments") if @_ > 2;
my($call_package, $call_file, $call_line) = caller($Level);
# Load the module.
my $file = $module . '.pm';
$file =~ s{::}{/}g;
# For performance reasons, check if its already been loaded. This makes
# things about 4 times faster.
return 1 if $INC{$file};
my $return = eval qq{
#line $call_line "$call_file"
CORE::require(\$file);
};
# Check for module load failure.
if( $@ ) {
$UNIVERSAL::require::ERROR = $@;
return $return;
}
# Module version check.
if( @_ == 2 ) {
eval qq{
#line $call_line "$call_file"
\$module->VERSION($want_version);
};
if( $@ ) {
$UNIVERSAL::require::ERROR = $@;
return 0;
}
}
return $return;
}
#line 136
sub use {
my($module, @imports) = @_;
local $Level = 1;
my $return = $module->require or return 0;
my($call_package, $call_file, $call_line) = caller;
eval qq{
package $call_package;
#line $call_line "$call_file"
\$module->import(\@imports);
};
if( $@ ) {
$UNIVERSAL::require::ERROR = $@;
return 0;
}
return $return;
}
#line 191
1;