動的サブルーチン呼び出し

http://d.hatena.ne.jp/macperl/20070127/p1

パラメータによる処理の分岐を簡単にする

my $mode = $query->param( 'mode' );
main->$mode;
#または、__PACKAGE__->$mode でもOK

これだと、メソッド呼び出し(第一引数がパッケージ名になる)になってしまうのではないでしょうか。macperlさんの場合は、引数を渡してないようなので、動作に支障はないはずですが。


以前似たようなことをしたときは、下のようにやりました。

&{$mode};

ですが、use strictしてるとエラーが出るので、no strict “refs”; しておく必要がありました。

また、サブルーチンに引数を渡して、しかも戻り値を受け取るような場合は、以下のように書きました。

my return_val = do {
no strict "refs";
&{$mode}("arg1");
};

長くなってますが、これで、サブルーチンとして動的に呼び出せるはず。

Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.