mod_perl で exit2006年06月29日 14時54分53秒

mod_perl を使用する場合、通常の exit 関数 (厳密な書き方をするならば CORE::exit とすべきか?) は使用できず、代わりに Apache::exit を使用する必要があるらしい。

しかし実際には、Apache::PerlRunApache::Registory の配下で動作しているスクリプトであるならば、exit は勝手に Apache::exit に置き換えて実行してくれるらしく、exit の通常の使用では自前で置き換える必要はないようだ。

しかし、一つだけ問題が。。。

先日、eval を使えば CGI プログラムでも die を効果的に使えちゃうじゃん、という内容の記事を書いたわけだが、mod_perl を使用する環境で、Apache::Registory によって動作するスクリプトとしてプログラムを書く場合、eval に指定するブロック内で (もしくはそこから呼ばれる関数内で) exit 関数を使うと、evalCORE::exit が呼ばれたものと判断し、エラーとして処理しちゃうようなのだ。

対策としては、return で済むなら済ませるようにするか、use Apache 'exit'; してしまうこと。但し後者は頻繁に修正しテストする場合にはしょっちゅう apache を restart せなあかんかも知れんし、おいらみたいに mod_perl としてでなくても動作するようなプログラムを書こうとしている場合には使えない (useif 文使って分岐しても必ず実行されちゃうからね) という罠。いや、ていうかもちっといい手はないのかね。まぢで。

ヘッダーいぢるのかよ_| ̄|............◎2006年06月29日 23時51分56秒

某 Tok2 の無料鯖に CGI の設置作業をやっているのだが、こいつが吐き出すはずのクッキーがブラウザに上手く飲み込まれない。おかげで認証は通過するのにしつこくパスワードを聞いてくるというふざけた動作をしやがる。なんでだろーと思いつつ、Content-type: text/plain で生テキスト吐き出すテストプログラムをなんとなーく置いて動かしてみたら、改行されるはずのテキストが改行されない上にバナーとかもしっかり表示されやがる。

まぁそういうことなんだろーなーということはうすうす感づいてはいたんだが、よーするにこの鯖は CGI が吐き出す HTTP ヘッダを勝手に書き換えてしまうわけなんだ罠。どーりでクッキーが書き込めないわけだ。仕方ないから Javascript 使うかな? あるいはもうめんどいから hidden 使うか。。。いや、 hidden 使うほうがむしろめんどいや、修正量多くなっちゃうし。('A`)=3