[僕] CGI::Application 4.02 のバグ

僕ト云フ事

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

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() で。

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

blog comments powered by Disqus

コメント

# 刺身☆ブーメラン (2005年08月06日 00:58)

フォローありがとうございます!やっぱりそこでしたか・・・モジュールのソースを読むのは勉強になるとおもうので自分もチャレンジしていきたいです。
挙げてらっしゃる参考ページは自分もブックマークしていましたが、詳しく読んでいませんでした。この機会にじっくり理解を深めたいと思います。

# 海賊たろ [TypeKey Profile Page] (2005年08月06日 10:17)

コメントありがとうございます!
確かにモジュールのソース読むのは勉強になりますね。自分の場合は、英語の読み書きが満足に出来ないので、Chenges だけだといまいち分からなかったというのもあるのですが:p