02 May 2013

perl でモジュールを動的にロードする

UNIVERSAL::require をつかうと良いそうだ

use UNIVERSAL::require;
my $package = "Foo::Bar";
$package->require;

ちょっとあれな方法だと

my $package = "Foo::Bar";
eval "require $package";

ふつうに require $package; とやると require が $package の内容にファイルパス (/foo/bar/Foo/Bar.pm みたいな文字列) を期待してしまうらしくダメらしい.

Mouse::Util::load_class など, モジュールがロードの仕組みを提供しているものもある