昨日いっていた、掲示板CGIにおいて発生していたエラー。とりあえず解消しました。
カレントワーキングディレクトリを返すはずのCWDが、なぜか期待どおりの値を返してくれないものだから、必要なファイルが読み込めずエラーが出ていました。なにが原因であるか調べたりもしたのですが、どうにもわからず、しかたがないので対症療法的だけど、メソッドをひとつ増やして解決しました。
設定ファイルにワーキングディレクトリのパスを記入することにして、もしそれがブランクであった場合にはCWDの返り値を、ブランクでなかった場合にはユーザー指定のパスを返すようなメソッドを作ったのでした。そして、これまでCWDからパスを取得するようになっていたところを、片っ端から新メソッドget_working_directoryを使うように書き換えて、これでなんとか期待通りの動作をするようになりました。
掲示板CGIでは、CGI.pmを使用しているのですが、HTMLのヘッダ(つまりDTDからbody要素の開始タグまで)を出力させようというときにエラーを出していたのでした。
このエラー、一体なんで出るのかがわかりません。それこそ『CGI - 簡単なCGI(Common Gateway Interface)クラス』において説明されているように書いているというのに。開発環境でもエラーは出ず、それに同じように書いていたweb拍手支援cgiでも問題は出ず、なのに今回だけ出る。一体なんでなんだろうと頭を抱えたくなります。
問題のコードがこれです:
print $q->start_html(-lang=>$pm->get_language_selected,
-title=>$pagetitle,
-head=>[meta({-http_equiv=>'Content-Style-Type',
-content=>'text/css'}),
Link({-rel=>'stylesheet',
-href=>$pm->get_path_css_rel,
-type=>'text/css'})]);
これはもう、説明どおりなんですが、ですがこれだとなんでかmetaやLinkがCGI.pmのメソッドではなく、この掲示板クラスのメソッドと勘違いされてしまって、だからエラー。一体どうしたものかと迷った結果、metaやLinkがCGI.pmに属するメソッドなんだということを明記することにしました。
print $q->start_html(-lang=>$pm->get_language_selected,
-title=>$pagetitle,
-head=>[$q->meta({-http_equiv=>'Content-Style-Type',
-content=>'text/css'}),
$q->Link({-rel=>'stylesheet',
-href=>$pm->get_path_css_rel,
-type=>'text/css'})]);
とりあえず、これで解決。でも、正直ちょっと迷いました。環境によってこれだけの違いが出るのかと正直驚いて、来週にはBSD & Apacheでテストしてみたいと思います。