Carrot
view release on metacpan or search on metacpan
lib/Carrot/Modularity/Package/Loader.pm view on Meta::CPAN
# *
# //returns
{
my ($this, $pkg_name) = splice(\@ARGUMENTS, 0, 2);
my $pkg_file = $pkg_patterns->package_as_file_name($pkg_name);
$this->rewrite($pkg_file) if (MAP_FLAG); # this is development
if (exists($MODULES_LOADED{$pkg_file}))
{
if (@ARGUMENTS) # arguments can only be passed for first time loading
{
$translated_errors->oppose(
'package_already_loaded',
[$pkg_name]);
}
return;
}
my $relative_file = $pkg_file;
unless ($search_path->qualify_first($pkg_file))
{
$translated_errors->oppose(
'non_existent_package_file',
[$pkg_file, $search_path->as_list]);
}
if (exists($MODULES_LOADED{$pkg_file}))
{
if (@ARGUMENTS) # arguments can only be passed for first time loading
{
$translated_errors->oppose(
'package_already_loaded',
[$pkg_name]);
}
return;
}
# if (SHADOW_FLAG)
# {
# my $shadow_file = ($pkg_file =~ s{\.\Kpm\z}{}sr).'/shadow-manual.pm';
# if (-f $shadow_file)
# {
# $pkg_file = $shadow_file;
# }
# }
# $MODULES_LOADED{$relative_file} = IS_UNDEFINED;
#FIXME: enables finding the dot directory, but should be undefined
$MODULES_LOADED{$relative_file} = $pkg_file;
my $indent = '| ' x $pending;
print STDERR "START loading $indent$pkg_name\n" if (TRACE_FLAG);
$pending += 1;
$generic_events->evt_package_load_before($pkg_name, $pkg_file);
# my $eval_error = $eval_error_class->constructor;
my $rv;
eval {
{
no strict 'refs';
*{$pkg_name.'::PERL_FILE_LOADED'} =
\&Carrot::Meta::Greenhouse::PERL_FILE_LOADED;
}
$rv = require($pkg_file);
# maintain entries in a compatible way
$MODULES_LOADED{$relative_file} = delete($MODULES_LOADED{$pkg_file});
return(IS_TRUE);
} or do {
delete($MODULES_LOADED{$pkg_file});
$translated_errors->escalate(
'package_loading_failed',
[$pkg_name, $pkg_file],
$EVAL_ERROR);
};
# } or $eval_error->failure($EVAL_ERROR);
{
no strict 'refs';
undef *{$pkg_name.'::PERL_FILE_LOADED'};
}
$pending -= 1;
# if ($EVAL_ERROR) #$eval_error->is_failure)
# {
# print STDERR " FAIL loading $indent$pkg_file\n" if (TRACE_FLAG);
## $eval_error->escalate;
# die($EVAL_ERROR);
# }
print STDERR " END loading $indent^\n" if (TRACE_FLAG);
$generic_events->evt_package_load_after($pkg_name);
return($rv);
}
sub rewrite
# /type method
# /effect ""
# //parameters
# pkg_name
# //returns
{
my ($this, $pkg_file) = @ARGUMENTS;
foreach my $mapping (@$mappings)
{
my ($name, $length, $value) = @$mapping;
next unless (substr($pkg_file, 0, $length) eq $name);
$_[SPX_PKG_FILE] = $value;
last;
}
return;
}
sub dot_ini_got_association
# /type class_method
# /effect "Processes an association from an .ini file."
# //parameters
# name
# value
# //returns
{
my ($class, $name, $value) = @ARGUMENTS;
push($mappings, [$name, length($name), $value]);
( run in 2.616 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )