Module::Pluggable は大変ステキっぽい気がする #
プラグイン形式で機能を増やせるようにするって時に、今までワシがやっていたことは
# plugin ディレクトリ以下のディレクトリ構造から、プラグインリスト取得。
# コードは省略
for my $plugin (@plugins) {
eval {
require "plugin/Hoge/Fuga.pm";
Hoge::Fuga->exec();
};
if ($@) {
# エラー処理
}
}
という感じなんだが、Module::Pluggable を使うと
package Hige;
use Module::Pluggable requre => 1;
.
.
.
1;
package Hige::Plugin::Hoge;
.
.
.
1;
とかして、本体で
my $mc = Hige->new();
my @plugins = $mc->plugins(); # plugin 一覧取得
for my $plugin (@plugins) {
next if $plugin->can('exec');
$plugin->exec();
}
で OK。
なんだか幸せになれそうな予感。