Perlで特定のモジュール配下を全部newするやつ(Module::Pluggable::Object)
2013年4月10日
ちょい前までは、「Module::Recursive::Require」を使用して、こんな感じで、まとめてnewしていましたが、ふと思い立って「Module::Pluggable::Object」に乗り換えました。
use Module::Pluggable::Object;
my $myapp = Module::Pluggable::Object->new( search_path => "My::App", require => 1 );
my $obj;
for my $plugin ( $myapp->plugins ) {
$obj->{ $plugin } = $plugin->new();
}
ってな感じで、My::App以下にあるモジュールが全部newされて、$objに入ります。
例えば、
package My::App::User;
use parent qw/Class::Accessor::Fast/;
sub id {
my $self = shift;
return 10;
}
1;
て感じのナゾのモジュールがあった場合は、
my $id = $obj->{'My::App::User'}->id();
で、アクセスできます。
2013年のエントリーのサンプルに「Class::Accessor::Fast」を使うのもあれかもしれませんが・・。