実行時にモジュール名が決まるuseとnew
投稿:2016-05-16
大きいPerlスクリプトを作り、機能単位でプラグインとしてパッケージモジュールに分割、設定ファイルでパッケージ名を指定して呼び出すので、
動的にuseしたい。
でもuseはコンパイル時に動作するので動的なuseができないからなんとかしたい。
ついでにパッケージをクラスとしてオブジェクトを作りたい。
sub object_new {
my $class = shift;
my $obj;
eval <<"EOF";
require $class;
${class}->import();
\$obj = ${class}->new(\@_);
EOF
return $obj;
}
まずクラスのパッケージ「MyClass.pm」を普通にuseする場合。
use MyClass;
my $object = MyClass->new("abc", "def");
これを動的にuseする場合。
my $object = object_new("MyClass", "abc", "def");
