めも帖

「めも帖」代わりにダラダラと書いていったり、めもしたりしているだけです。

動的にuse

で、動的にPMを呼び出したい。動的にuseしたいわ。
という方法が。

今日わかったperlの不思議。
perl でモジュールを use しますが、時としてクラス名を動的に生成して use したい時があります。
そんなときは以下のようにします。

my $class = "Foo::Bar::$baz";
eval qq(require $class; import $class);

よくやる間違いは、

my $class = "Foo::Bar::$baz";
eval { require $class; import $class };

これをやっても use されないようだ。この eval の用法はエラーをトラップしたりするときに使用するものです。最初の例は、引数を perl の構文として評価するもの(だと思っている…)
ようは、eval EXPR はシンタックスエラーを実行時に $@ に返すのに対し、 eval BLOCK はシンタックスエラーをコンパイル時に返す点が異なる(らしいw)

require $class; import $class を perl の構文として評価するといいらしい。
なじぇ?

どうやら、require は bareword でないとだめなようだ。
だから、eval qq() とかやると require に bareword を渡すことができるんだろな。
これは、perldoc -f require に詳しくでてる。

http://clouder.jp/yoshiki/mt/archives/000184.html