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 メソッドを介して呼び出すことができます。しかし、私が「使用」しようとしているモジュールの 1 つがエラーをスローした場合、そのモジュールはロードされておらず、スクリプトは多少不自由です。
use を実行する前に 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;
}
}