[hack] 本体内蔵関数の横取りの仕方
Perl 4 以来の機能「型グロブ」を使って、 シンボルテーブル上の名前と関数の対応を書き換えます。
例えば、入力フォーム部分の前に何か表示を追加するためなどに、 入力フォーム表示関数を横取りするには、 プラグインで、次のようなコードを書きます。
package wifky::myplugin; (*::print_form , *wifky::myplugin::org_print_form ) = (*wifky::myplugin::my_print_form , *::print_form ) ; sub my_print_form{ my @argv=@_; # 追加の処理 # 〜もろもろ〜 # オリジナルの入力フォーム部分を表示 &wifky::myplugin::org_print_form(@argv); }
こうすることにより、ユーザ作成の関数(&wifky::myplugin::my_print_form)を、 オリジナルの入力フォーム関数(&::print_form)と差し替えることができます。 その一方で、その旧関数自体は、 &wifky::myplugin::org_print_form という名前でバックアップされています。 これにより、新関数で必要最小限な処理だけ実行し、 後は、旧関数に任せるということも可能になっています。
ちなみに、型グロブは、関数名だけでなく、同じ名前の変数名も 合わせて差し交わってしまいますので、気をつけてください。 (もっとも、グローバル変数と同じ名前の関数はあまりないと思いますが)
|