use strictしているときに、「クラス名」のインスタンスを作りたかったりする。
例えば、そのクラス名が設定ファイルなどに書かれていて、そのクラスをnewしたい場合。
use strict;
use utf8;
my $class = "Hoge::Fuga";
my $obj = new $class;
実は上記のperl -cは問題なく通る。
が、実行してみると「Hoge::Fuga」をuseしていないから
Can't locate object method "new" via package "CSV::Reader" (perhaps you forgot to load "Hoge::Fuga"?) at sample.pl line 4.
とか怒られる。
で、そのまま、
use $class;
とか書くと、
syntax error at sample.pl line xx, near "use $class"
と怒られる。
どうやって書くのか?
useごとevalの中に入れてしまえばよい。
use strict;
use utf8;
my $class = "Hoge::Fuga";
eval "use $class;";
if ($@) {
die "Error!!! $@\n";
}
my $obj = new $class;
今度は怒られない。
ただ、本当に「Hoge/Fuga.pm」が無い時でも先に進んでしまうので、
$@をチェックしてevalが成功したことは確認しないといけない。