perlで作った掲示板、エラーが出てしまう。
課題でperlの掲示板を作成したのですが、動作せず困っています。間違いを教えてください。
#!C:/Perl/bin/perl
require 'html_data.pl';
require 'cgi-lib.pl';
require 'jcode.pl'
if($ENV{'REQUEST_METHOD'}eq"POST"){
&ReadParse(*answer);
$name=$answer{'name'};
$mail=$answer{'mail'};
$title=$answer{'title'};
$text=$answer{'text'};
$name=~s/,/,/g;
$name=~s/&/&/g;
&name=~s/"/"/g;
$name=~s/<</g;
$name=~s/>/>/g;
$mail=~s/,/,/g;
$mail=~s/&/&/g;
&mail=~s/"/"/g;
$mail=~s/<</g;
$mail=~s/>/>/g;
$title=~s/,/,/g;
$title=~s/&/&/g;
&title=~s/"/"/g;
$title=~s/<</g;
$title=~s/>/>/g;
$text=~s/,/,/g;
$text=~s/&/&/g;
&text=~s/"/"/g;
$text=~s/<</g;
$text=~s/>/>/g;
$data="$name,$mail,$title,$text";
&jcode'convert(*data,'sjis');
if($name ne""&& $title ne""&& $text ne""){
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time());
$mon=$mon+1;
@youbi=('日','月','火','水','木','金','土');
$time="$mon月$mday日$youbi[$wday]曜日$hour時$min分";
$all_data="$time,$data\n";
open(ANSWER,"<answer.dat");
@all=<ANSWER>;
close(ANSWER);
unshift(@all,$all_data);
open(ANSWER,">answer.dat");
flock(ANSWER,2);
print ANSWER @all;
flock(ANSWER,8)
close(ANSWER);
}
}
&form;
open(ANSWER,"<answer.dat");
@all=<ANSWER>;
foreach(@all){
($time,$name,$mail,$title,$text)=split(/,/,$_);
&toukou;
}
close(ANSWER);
&footer;
exit;
お礼
回答ありがとうございました。 そのへんを変えてみたところ内部エラーが出てしまいました。 これで書き込みモードとかのopen方法はあっていると思うのですが、どこがおかしいのかわかりません。 図ずうしいですが、もしわかったら教えてください。 open(KEIJI, "keijiban.dat") || die "File 'keijiban.dat' Open Error."; # 過去のデータを全て配列に読み込む @all = <KEIJI>; # HTMLタグと衝突する記号などを変換 $num = $all[0] + 1 if( $num eq '' ); $title = &henkan($form{'title'}); $topic = $form{'topic'}; $message = $form{'message'}; #***** 文字列の置換 ***** $message =~ s/\r\n/<BR>/g; # 日本語表記の日時を得るサブルーチン $time = &jp_time if( $time eq '' ); # データを1行にまとめる(項目の区切りはコロン) foreach(@all){ $data = $_; chop $data; ( $fnum ) = ( split(/:/,$data) )[0]; if ( $fnum == $num ) { $data = "$num:$time:$title:$topic:$message\r\n"; &jcode'convert(*data, 'sjis'); } push @all, $data; } close(KEIJI); open(KEIJI, ">keijiban.dat") || die "File 'keijiban.dat' Open Error."; flock(KEIJI, 2); # (新規データ+過去データ)をファイルに上書き print KEIJI @all; flock(KEIJI, 8); close(KEIJI);
補足
ちなみに最初のOPENとCLOSEで間違っていることはわかりました。この開き方ではどうしてだめなんでしょうか?