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」を使うのもあれかもしれませんが・・。