[僕] 2005年08月05日 アーカイブ

僕ト云フ事

たろマークはてなブックマーク

2005年08月05日

[cgi-app][cpan][perl] CGI::Application 4.02 のバグ

刺身☆ブーメラン(金子健介)のはてなダイアリー - 今日のPerlMonks

Changes in Latest Version of CGI::Application (4.02)

結論からいうと、CGI-Application-4.02にはバグがあるのでアップグレードするなら4.03にしようねという話なのはわかったのだが。

肝心のバグってた部分ってのが、よーわからん。$self->mode_param('rm')ってハードコーディングされてるからダメってこと?違う気がするんだよなー。setup()で呼ぶべきとされているものをcgiapp_init()で呼んだらおかしくなったってことだろ。cgiapp_init()はえーとsetup()の前に呼ばれるんだっけあとだっけ。そこをわかってないから挙動がおかしいのかどうかもわからないのだな。ううむ。

自分もちょっとわからなかったので追ってみたメモ。

cgiapp_init() は setup() の前で合ってます。
4.02 は、cgiapp_init() の後に mode_param('rm') を呼んじゃってて、cgiapp_init() でいくら mode_param 変えてもデフォルトに上書きされちゃうよって事だと思う。setup() で呼ぶ分には変わらないんだけど。

$self->start_mode('start') は、定義されたかどうか判定してたのにねぇ。
まぁ、順番を変えた方がスマートだったのかな。
#ちなみに、4.01 では、setup() 内で start_mode('start') が呼ばれてた。

まー、mode_param() と start_mode() は、setup() 内で呼ぶのが良さげ。
run_mode の切り替えは、cgiapp_prerun() で。

サブクラスの実行の順番とかはこちらが参考になります。