Perlで特定のモジュール配下を全部newするやつ(Module::Pluggable::Object)

ちょい前までは、「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」を使うのもあれかもしれませんが・・。