我正在使用 Module::Pluggable 从给定目录加载模块:
for my $module ( plugins() ) {
eval "use $module";
if ($@) {
my $error = (split(/\n/, $@))[0];
push @rplugin_errors, $error;
print STDOUT "Failed to load $module: $error\n";
} else {
print STDOUT "Loaded: $module\n";
my $mod = $module->new();
my $module_name = $mod->{name};
$classes{$module_name} = $mod;
}
}
可以通过其他地方的 reload 方法调用此函数。但是,如果我试图“使用”的模块之一引发错误,则它不会被加载并且脚本有些瘫痪。
我想在执行使用之前验证 plugins() 中的每个模块。所以理想情况下我可以做类似的事情:
$error = 0;
for my $module ( plugins() ) {
eval TEST $module;
if ($@) {
print STDERR "$module failed. Will not continue";
$error = 1;
last;
}
}
if ($error == 0) {
for my $module ( plugins() ) {
use $module;
}
}