動的サブルーチン呼び出し
2007/01/29
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"); };
長くなってますが、これで、サブルーチンとして動的に呼び出せるはず。