電子書籍の厳選無料作品が豊富!

Perlでの掲示板作成をしていましたが、エラーを解決出来なくアドバイスいただきたいです。
perl -c bbs.shでコンパイルエラーを確認しましたが、最後のヒアドキュメントの部分でエラーが出ています。ブラウザでページは表示できない状態です。

#!/usr/bin/perl

$bbsfile="./bbs.dat";

&formdec;

if($in{'mode'} eq "regist") {

&bbspost;
};

&bbsdsp;

sub header {
print "Content-type: text/html\n\n";
print <<"EOM";
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<title>掲示板</title>
</head>
<body>
EOM
};


sub bbsdsp {
print "Content-type: text/html\n\n";
print <<"EOM";
<form action="./bbs.sh" method="POST">
<input type="hidden" name="mode" value="regist">
お名前<br>
<input type="text" name="name" value="" size="40"><br><br>
コメント<br>
<textarea name="comment" cols="50" rows="7"></textarea><br>
<input type="comment" value="投稿する">
</form>
<dl>
EOM
open (IN,"$bbsfile");
while(<IN>){
my($no, $date, $name, $comment)=split(/&&/);
print "<dt><hr>[$no] 投稿者:<b>$name</b> &emsp; 投稿日時:<b>$date/b></dt><br><br>\n";
print "<dd>$comment</dd>\n";
}
close(IN);
print <<"EOM";
<dt><hr></dt>
</dl>
</body>
</html>
EOM
exit;
};

sub formdec {
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $buf, $ENV{'CONTENT_LENGTH'});
} else {
$buf=$ENV{'QUERY_STRING'};
}
under(%in);
my @buf=split(/&/,$buf);
foreach (@buf) {
my ($key, $val)= split(/=/);
$val=~tr/+/ /;
$val=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg;
$val=~s/&/&amp;/g;
$val=~s/"/&quot;/g;
$val=~s/</&lt;/g;
$val=~s/>/&gt;/g;
$val=~s/\r\n/<br>/g;
$val=~s/\r/<br>/g;
$val=~s/\n/<br>/g;
$in{$key}=$val;
};
};

sub bbspost{
if ($in{'name'} eq "" || $in{'comment'} eq ""){
sub header;
print "入力内容に不備があります。 <br>\n";
print "ブラウザのBACKで戻ってください。 \n";
print "</body></html>\n";
exit;
}
$ENV{'TZ'}="JST-9";
my($sec, $min, $hour, $mday, $mon, $year, $yday, $isdst)=localtime(time);
my $now=sprintf("%04d/%02d/%02d-%02d:%02d",$year+1900,$mon+1, $mday, $hour, $min);
open(DAT, "+< $bbsfile");
flock(DAT,2);
my $no=1;
while (<DAT>) {
$no++;
}
print DAT "$no&&$now&&$in{'name'}&&$in{'comment'}\n;
close(DAT);

sub header;
print <<"EOM";
ありがとうございます。投稿を受理しました。
<form action="./bbs.sh">
<input type="submit" value="掲示板に戻る">
</form>
</body>
</html>
EOM
exit;
};

質問者からの補足コメント

  • ご回答ありがとうございます。最後の部分でエラーが出ているようですが、下記の部分になります。

    print <<"EOM";
    ありがとうございます。投稿を受理しました。
    <form action="./bbs.sh">
    <input type="submit" value="掲示板に戻る">
    </form>
    </body>
    </html>
    EOM

    「Perlのプログラムについて」の補足画像1
    No.1の回答に寄せられた補足コメントです。 補足日時:2020/07/15 09:50

A 回答 (3件)

こんばんは。


perlは詳しくありませんが、気になるところがありました。

--------------------------------------------------------------------------------
print DAT "$no&&$now&&$in{'name'}&&$in{'comment'}\n;
close(DAT);
--------------------------------------------------------------------------------
このprintに " が1つしかありません。
これかな?
    • good
    • 0

そのメッセージを見ると


Might be a runway mlti-line string...
って出てるよね. そこから考えると
文字列がなんかおかしい
という可能性が見えるよ.

あと } のあとに ; があったりなかったりするのがかなり謎.
    • good
    • 0

どんな「エラー」が出ました?

この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!