perl の if 文の判定がうまくいきません

[戻る]
彪子 2006/12/22(金) 23:11:41
お世話になっております。よろしくお願いします。

if 文の分岐が期待どおりにできませんので、教えていただければ幸いです。

あるメール送信フォーム (ソースは (1) ) 

(1) http://www.niji.or.jp/home/ashizuka/data/postmail01.htm

に、次のような if 文を記述しています。

(2) if ($in{'language'} eq "english")
{
(a) 
}
else
{
(b) 
}

この cgi を呼び出すのに、

(ア) http://www.niji.or.jp/home/ashizuka/postmail01/postmail01.cgi

(イ) http://www.niji.or.jp/home/ashizuka/postmail01/postmail01.cgi/?
language=english

という2つの呼び出しかたを試すと、(ア) はもちろん『偽』ですが、 (イ) の呼び出しかたで
も (b) を実行、つまり『偽』と判定されてしまいます。
もちろん、このスクリプトの中には、ここ以外にも if 文がたくさんあり、これらは私が思っ
たとおりに動いていますので、構文、文法で間違った理解をしていないように思うのですが、何
か原因がおわかりになりましたらお教えいただけないでしょうか。どうかよろしくお願いいたし
ます。

瀬戸っぷ [E-Mail] 2006/12/22(金) 23:55:10
他にも参照しているスクリプトがあるようですが……

POSTでパラメータを読み取っている場合、URLにあるパラメータ読むようになっていない
のでは?
まずは、渡されたパラメータを表示するだけのcgiにして、
うまく受け取っているか確認してみてはどうでしょうか?

彪子 2006/12/23(土) 13:53:39
瀬戸っぷさん、ありがとうございます。
まず前回の (イ) は間違いで、正しくは

(ウ) http://www.niji.or.jp/home/ashizuka/postmail01/postmail01.cgi?
language=english

です。すみません。

(ウ) をクリックすると、このフォームの第一画面が表示されますが、この画面のソースを見る
と、パラメータを第二画面に引き継ぐための

(エ) <input type=hidden name="language" value="english">

というタグができていることがわかります。
また、

(オ) http://www.niji.or.jp/home/ashizuka/postmail01/postmail01.cgi?
language=english&subject=ホームページから

でアクセスすると、第一画面に

(カ) <input type=hidden name="subject" value="ホームページから"><input 
type=hidden name="language" value="english">

というタグができます。subject はメールの件名を指定するパラメータで、 (オ) でメールを
送信すると、あるホームページの管理者に『ホームページから』という件名のメールがとどきま
す。

なお、 (2) の if 文を取り去って、(a) の命令つまり、

$dict{'head01'} = "MAIL TRANSMISSION FORM";

等を無条件に実行し、 (b) を実行しないようにしたスクリプトが

(キ) http://www.niji.or.jp/home/ashizuka/postmail01_e/postmail01.cgi

で、これは意図した結果が得られます。
以上やってみた限りでは、私には if 文の分岐以外でおかしいところが見つけられないので
す。
以上を読んでいただいていかがでしょうか。何かおわかりになることがありましたら教えていた
だければ幸いです。どうかよろしくお願いします。

彪子 2006/12/23(土) 18:00:01
[[解決]]
瀬戸っぷさん、すみません。

瀬戸っぷさんがおっしゃるように、$in の定義ができていなかったようです。

#ア require './cgi-lib.pl';
#ア &ReadParse ( *in) ;

のコメントをはずすと、意図した結果が得られました。でもお恥ずかしいんですが、このスクリ
プトから遠ざかっていたので、どうしてこんなことをしたのか覚えていないのです。すみませ
ん。
どうもありがとうございました。

古いスレッドには追加発言できません。