A_single_file_wiki_wifky2.png

[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 という名前でバックアップされています。 これにより、新関数で必要最小限な処理だけ実行し、 後は、旧関数に任せるということも可能になっています。

ちなみに、型グロブは、関数名だけでなく、同じ名前の変数名も 合わせて差し交わってしまいますので、気をつけてください。 (もっとも、グローバル変数と同じ名前の関数はあまりないと思いますが)

|

Designed for @nifty.