CGI-BBS > CGI > Perl > Perlについてヒアドキュメントが正常に動作しないを何とかしたい


カレッヂ
カレッヂ


質問者 覆面管理人  投稿日 2004/2/20(金) 18:07:06
はじめまして。
質問はタイトルに書いたとおりです。

これ↓
#!/usr/bin/perl --
# hello.cgi -- ダミー
print "Content-type: text/html\n\n";

read(STDIN,$str,$ENV{"CONTENT_LENGTH"});

&write($ENV{"CONTENT_LENGTH"}, $str);

sub write {
my($no1,$no2) = @_;
print<<"EOD";
<body bgcolor=silver text=navy>
<h1>CGI TEST</h1>
length:$no1<P>
data:$no2<P>
EOD
}
は、正常に動作したのですが、
これ↓

&write(0);
中略
&write(1);

sub write{
my($frg) = @_;
if($frg == 0){
   print<<'EOD1';
   Content-type: text/html
   
   <html><head</head><body text=navy><center>
   <h2>Hit&Blow</h2>"
   EOD1
}
elsif($frg == 1){
    print<<'EOD2';
    <form action='hitblow.cgi' method='post'>
    4<br>
    <input type=hidden name='ans' value='$ans'>
    <input type=text size=4 name='num'><br><br>
    <input type=submit value=''><br>
    </form></center></body></html>
    EOD2
}
}
は、なぜかサーバ付属のCGI構文チェックをすると、
Can't find string terminator "EOD1" anywhere before EOF at 
/home/sites/www.pinpoint.co.jp/web/cgi-bin/hitandblow.cgi line 50.
と、でて、実際動かしてみてもエラーがでます。
何故ですか?
上の文章を読むとEOD1に対応する終了がないみたいな書き方ですけど
ちゃんと最後にEOD1はあるし・・・
何より最初のスクリプトがちゃんと動くのが納得いかない・・・

プロバイダ参照:
サーバのOS:UNIXサーバ
パソコンのOS:Mac9
エディタ:MacJPerl
FTPソフト:
サーバ移転:していない
改造:(未選択)
CGI習熟度:middle

回答者 しあわせのツボ  [削除]  投稿日 2004/2/20(金) 19:51:57
ヒアドキュメントの終了を示す行は、指定した文字列と改行コード以外が存在してはいけません。
行頭にタブやスペースを入れた場合も、その条件を満たさなくなります。
インデントせず、行頭に記述してください。
質問者 覆面管理人  [削除]  投稿日 2004/2/23(月) 09:48:28
ありがとうございました。
ご指摘された点を修正したら、きちんと動きました。

このページは終了したので返信(回答)は書きこめません
 


Web裏技