新規記事投稿 フォロー記事投稿 記事のキャンセル
From: koba <mailto:ykoba@dcn.ne.jp>
Subject: Re: サブルーチンが動かない?
Date: 2000/05/31 12:42:44
Reference: mesh.forum.4/00204

うぇぶ会議室についての質問等、どこに書けばいいのか
わからずあちこち?に書いてしまいました。^^;
ごめんなさい。

5月30日に、TADさんは書きました。

>過去の記事にあったような気がするのですが、

 もうしわけありません。過去の記事はまだ全て読んでなかったり
します。いちお検索もしてみたんですが・・
# 質問する前には過去の記事をちゃんと読んでから・・っていう大鉄則
#は知っているつもりなのに、そうしてませんでした。

>文字コードを単純にEUCに変換しただけではうまく動かない、という回答を
>昔にあさんがしていたと思います。違ってたらごめんなさい。

 なるほど・・
 以前、Perlの勉強がてらに簡単なPerlを書いたときにも同様の問題に
ぶつかりました。詳細はよく覚えてないのですが、漢字コードというよりは、
改行コードの問題だと思ってます。
 つまり、「CR+LF」だとだめで、「LF」のみじゃないと。
おそらく、作者さまもこのことを前提として配布している Shift-JISのファイル
も改行コードは LF のみとなってますね。EUCに変換したときにももちろん
LFのみとしました。


>まずは、コード変換しないままで動かしてみたらどうでしょうか。

 実は投稿してからやってみたのですが、結果は同じでした。

>>これは、article.cgi によって表示されるはずですので、同様にコマンドラインから
>>>perl article.cgi としてみたら表示されるのは、Bad Forum の文字。
>>コマンドラインからステップ実行でデバッグしてみると、
>>$title = forum::get_title($room); 
>>&WarningMsg('Bad Forum') if ($title eq '');
>>のところだと思います。つまり、$title に正しく値が入っていないのでしょうか?
>
>article.cgiは記事の投稿用のフォームを出力するCGIですが、
>これを実行するときには最低限、どこの部屋への投稿かを指定する必要があります。
>「新規記事投稿」のリンクを見るとわかりますが、'article.cgi?room=hogehoge'と
>なってますよね。
>なので、上記の「Bad Forum」が出力されるのはarticle.cgiが正常に動作している
>証拠です。(^^)

 そうですね。投稿してから、それに気がつきました。
ただ、、、本来の動きとしては、この場合の出力って、「Bad Forum」と出力
されるだけではなく、それに続いて HTMLのソースを吐きますよね?
 じゃないと、ブラウザで表示できないから。
 ですが、私の場合には、続くはずのHTMLのソースが吐き出されないのです。
「Bad Forum」だけしか吐き出されないのでやっぱりブラウザで表示されない
のです。

 そこで、先に投稿してからいくつか試しました。
1) もともと index.cgi にて&forum'convert_print(*output); でHTMLを吐き出して
  くれなかったので、print $output; に変更したのと同様のことを、article.cgi 
 でも行った。  しかし現象はかわらず、HTMLを吐き出してくれない。
  そこで強引に
    $title = forum::get_title($room); 
  により取得されるはずの titleを $title = 'test' と強引にセット。
    -> 投稿フォームが表示された。
       しかし、入力し、投稿、プレヴュー を押してもまた投稿フォームに
      もどっちゃう・・ やっぱり $titleに正しく値が入っていないから?

2) UNIXマシンではなく、Windows98上にて、ANHTTPDと、ActivePerl にて
   動作を試みた。(漢字コード等変更せず)
    -> site.pl への必要な情報を盛り込んでみたらあっさりとHTMLは表示。
        ただし、上記と同じように、投稿フォームにて投稿/プレヴューしようと
       しても元に戻っちゃう・・・

 UNIX上のPerlはPerl5ですので、パッケージ内のサブルーチンの呼び方も
 ためしに、Perl5の記述にしてみましたがやっぱり変わらず。。
  &forum'convert_print(*output);  -> form::convert_print(*output);

 一体何が問題なのだろう・・・参ってます。
 Perlの知識がなくても、簡単に設定できる・・・・・・と思ってたのに今は、
Perlの本と格闘中です。