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

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");
};

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

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


The reCAPTCHA verification period has expired. Please reload the page.

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください