Perl で、Java の Class.forName() のようなことをしたいのですが、どうやるのが定番なんでしょうか?

プラグインのような形にしたいので、Perlのコードの中に、具体的なクラス名を書きたくないと思っています。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2009/09/18 12:14:43
  • 終了:2009/09/25 12:15:03

回答(2件)

id:b-wind No.1

b-wind回答回数3344ベストアンサー獲得回数4402009/09/19 11:32:33

ポイント35pt

自パッケージの名前なら、

print __PACKAGE__;

クラスになっていれば、こんな事も出来る。

use Data::Dumper;
my $obj = __PACKAGE__->new();
print Dumper($obj)

任意のオブジェクトのパッケージ名を知りたいなら。

print ref($obj);

ref [Perl講座 -Smart]

id:yoshifumi1975

ありがとうございました。

2009/09/22 15:21:23
id:decoy2004 No.2

decoy2004回答回数20ベストアンサー獲得回数22009/09/22 11:20:48

ポイント35pt

eval 関数

引数を Perl のプログラムであるかのように解析し、実行する関数

例えば、

$obj = new Plugin;

この行から具体的なクラス名を取り除くと、

$newop = "new ";

$name = "Plugin";

$obj = eval $newop$name;

$name 変数に外部から得た文字列を代入してやれば、具体的なクラス名を書かないで実現できます。

eval [Perl講座 -Smart] - http://www.rfs.jp/sb/perl/05/eval.html

id:yoshifumi1975

ありがとうございました。

2009/09/22 15:23:30
  • id:yoshifumi1975
    自分でも調べて見たところ、require が使えそうです。
    eval、require、その他のCPANモジュール、どれが定番何でしょうかね。
  • id:b-wind
    >どれが定番何でしょうかね。
    定番は無いと思う。
    モダン Perl 自体まだまだし下火だし、一般には旧来の腐った CGI のイメージのほうが強い。

    http://search.cpan.org/search?query=Plugin&mode=all
    Plugin 構造をとっている各種フレームワークを参考にしてみては?

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません