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