ルモーリン

実行時にモジュール名が決まる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");