以前までperlでモジュールの動的を行う場合、AUTOLOADが関係すると思っていたのですが、UNIVERSAL::require というモジュールが利用できるそうです。
UNIVERSAL::require を使用しない場合
UNIVERSAL::require を使用しない場合、モジュールの動的ロードは次のように書くことができます。
my $class = "MyApp::Test"; eval{ require $class }; die "can't load module $class ", $@ if ( $@ );
UNIVERSAL::require を使用する場合
UNIVERSAL::requireを使用して先程のサンプルスクリプトを書き換えると次のようになります。
use UNIVERSAL::require; my $class = "MyApp::Test"; $class->require or "can't load module $class ", $@; #または $class->require($version) or die $@; とも書けるらしい
$class->use(@options) って?
このエントリを書く際に次のurlを参考にさせていただいています。
http://egg.bomcity.com/wiki?UNIVERSAL%3A%3Arequire
この中で $class->use(@options) が紹介されています。
モジュールによっては use でロードする事を強要するものもあります。強要というわけでも在りませんがそういうモジュールはロードしてから自前で import をコールしてやる必要がありますが、UNIVERSAL::require はその当りも面倒見てくれます。
"MyApp::$name"->use or die $@; # import で起動オプションを要求するなら。 "MyApp::$name"->use(@options) or die $@;
まっ、$class->use(@options) に関しては別の機会に調べることにします。