あなたの天然記念物
ホーム更新雑談Perl鉄ゲタランドナーコースガイド自転車Linuxリンク経歴連絡先

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