perlで作った掲示板、エラーが出てしまう

このQ&Aのポイント
  • 課題でperlの掲示板を作成したのですが、動作せず困っています。間違いを教えてください。
  • 質問者はperlで掲示板を作成しているが、動作しない問題が発生している。解決策を教えてほしい。
  • perlで作成した掲示板の動作に問題があり、解決方法を教えてほしい。
回答を見る
  • ベストアンサー

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;

  • Perl
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.1

syntax error at *** line 7, near "){" syntax error at *** line 74, near ") とりあえず、下記を2行目に以下を入れておくといいでしょう。(参考URL) use CGI::Carp qw(fatalsToBrowser);

参考URL:
http://allabout.co.jp/career/cgiperl/closeup/CU20040209A/

関連するQ&A

  • 投稿内容が文字化けして記録されてしまう。

    #!C:/Perl/bin/perl require 'cgi-lib.pl'; &ReadParse(*answer); $data="$answer{'name'}\n$answer{'mail'}\n$answer{'sex'}\n$answer{'how'}\n$answer{'corner'}\n$answer{'kansou'}\n\n\n\n"; require 'jcode.pl'; &jcode'convert(*data,'euc'); ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time()); $mon=$mon+1; @youbi=('日','月','火','水','木','金','土',); $time="$mon月mday日youbi[$wday]曜日hour時$min分$sec秒$\n"; open(ANSWER,">>answer.dat"); flock(ANSWER,2); print ANSWER"$time$data"; flock(ANSWER,8); close(ANSWER); print"Content-type:text/html\n\n"; print<<EOF; <html> <head> <title>ありがとうございました</title> </head> <body> <center> <font size="2"> <coloe="black"> ご協力ありがとうございました<br><br><br> </font> </center> </body> </html> EOF exit; -------- 課題をだされたので、以上のような内容の アンケートフォームを作りました(作ったというか テキストをほとんど写しただけですが) 使用エディタは秀丸です。 実際、これをform.htmlから動かすと、answer.datに 記録される内容が文字化けしてしまい、読めないの です。 テキスト通りにやったつもりですが、「文字コードを EUCで保存」とあったのですが、EUCで保存すると 上述したスクリプトの日本語が文字化けしてしまう ため、そのまま(shift-jis)で保存しています。 課題が出せないと困るので、どうすれば記入した ものが文字化けせずに出力されるか教えていただけ ないでしょうか?

    • ベストアンサー
    • CGI
  • 【再】Cookieを使用してフォームで送信

    #!/usr/local/bin/perl # ライブラリ require 'cgi-lib.pl'; require 'jcode.pl'; require 'keiji_write_sub.pl'; # デコード &ReadParse(*form); # 名前・メッセージ欄のチェック if ($form{'name'} eq "" || $form{'message'} eq "") { # 名前・メッセージが空ならエラー &input_error; # 終了 exit; } else { # 名前・メッセージも空でないなら書込処理 # HTMLタグと衝突する記号を変換 $name = &henkan($form{'name'}); $mail = &henkan($form{'mail'}); $title = &henkan($form{'title'}); $message = &henkan($form{'message'}); $message =~ s/\r\n/<BR>/g; # 日本語表記の日時を得る $time = &jp_time; # データを1行に(区切りはコロン) $new_data = "$time:$name:$mail:$title:$message\n"; &jcode'convert(*new_data, 'sjis'); open(KEIJI, "<keijiban.dat") || die "File 'keijiban.dat' Open Error."; # 過去のデータを全て配列に読み込む @all_data = <KEIJI>; close(KEIJI); # 配列の先頭に新規データ追加 unshift(@all_data, $new_data); open(KEIJI, ">keijiban.dat") || die "File 'keijiban.dat' Open Error."; #flock(KEIJI, 2); # (新規データ+過去データ)をファイルに上書き print KEIJI @all_data; #flock(KEIJI, 8); close(KEIJI); # 書込完了メッセ &write_ok; } というコードでdatファイルに書き込みしています。 この時に、名前などを1度入力したらCookieに記憶させて次からは自動で入るようにしたいのです。 あちこち検索して読んだりしたのですが、わからなくて…。 どなたか教えてください。

    • ベストアンサー
    • CGI
  • Perl BBS 掲示板 改行処理

    改行処理について教えてください。 今まで書き込み処理で unshift @DATA, "$tm,$FORM{'name'},$FORM{'title'},$FORM{'text'}\n"; としていたのですが、これを use CGI; my $form = new CGI; my $NAME = $form->param('name'); my $TITLE = $form->param('title'); my $TEXT = $form->param('text'); unshift(@DATA,"$tm,$NAME,$TITLE,$TEXT\n"); に変更しました。 すると sub loadFormdata が聞かなくなり、 改行処理他が対応しなくなってしまいました、 この場合、 loadFormdataの部分のどこを変えればよいでしょうか? |------書き込み処理------| sub printdata{ use CGI; my $form = new CGI; &loadFormdata(); open(FILE, "<$FILE"); eval{ flock(FILE, 1) }; @DATA = <FILE>; close FILE; my $tm = time; my $NAME = $form->param('name'); my $TITLE = $form->param('title'); my $TEXT = $form->param('text'); unshift(@DATA,"$tm,$NAME,$TITLE,$TEXT\n"); while(@DATA > $MAX) { pop @DATA; } open(FILE, ">$FILE") or die("error :$!"); eval{ flock(FILE, 2) }; print FILE @DATA; close FILE; } |------改行処理他------| sub loadFormdata { my ($query, $pair); if($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $query, $ENV{'CONTENT_LENGTH'}); } else { $query = $ENV{'QUERY_STRING'}; } foreach $pair (split(/&/, $query)) { my $key = ("$NAME,$TITLE,$TEXT"); my ($key, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg; $value =~ s/&/&amp;/g; $value =~ s/</&lt;/g; $value =~ s/>/&gt;/g; $value =~ s/\x0D\x0A\s*/<br>/g; $value =~ s/\s+/ /; $FORM{$key} = $value; } }

    • ベストアンサー
    • Perl
  • cgiのopenについて

    cgiのopenを使って下記のソースを作りました。 が、読み込んだテキストの一行目しか読み込みませんToT require 'cgi-lib.pl'; &ReadParse(*answer); $data = "$answer{'text'}"; require 'jcode.pl'; &jcode'convert(*data,'sjis'); open(dataright,"<data.txt"); $data= <dataright>; close(dataright); print "Content-type:text/html\n\n"; print <<EOF; <html> <head> <title>メール送信フォーム</title> </head> <body> ------------------<br> お知らせ<br> $data ------------------<br> </body> </html> EOF exit; ちなみにテキストは改行に<br>を入力してあります。 ぜひアドバイスをお願いいたします。

    • ベストアンサー
    • CGI
  • PerlのCGIでフォームのテキスト配列をPerlで取得するには?

    フォームで通常は同じ名前のデータを取得することは無いのですが 表計算のように同じ名前の場合、データの取り出し方がわかりません。 以下、通常の1件の場合のソースです。 #!/usr/bin/perl $| = 1; use strict; our %in; use CGI::Carp qw(fatalsToBrowser); use CGI qw(:standard); require 'jcode.pl'; require 'cgi-lib.pl'; # #-----分岐----- &ReadParse; # 配列でない場合 my $namae = $in{'namae'} print "$namaeで名前が1件表示される"; # これをフォームで namaeが配列になった場合、 #<input type="text" name ="namae"> #<input type="text" name ="namae"> #<input type="text" name ="namae"> # のような場合、3件取得する場合 exit; __END__

    • ベストアンサー
    • CGI
  • perlがうごきません

    htmlファイルには <html> <form action="form2.cgi" method="get"> 食品名1<input type="text"name="form1"> <br> 食品名2<input type="text"name="form2"> <input type="submit"value="送信"> </form> </html> cgiファイルには #! /usr/bin/perl require "cgi-lib.pl"; &ReadParse(); print "Content-type:text/html\n"; print "\n"; print "<html>\n"; print "<head>\n"; print "<title>フォーム</title>\n"; print "</head>\n"; print "<body>\n"; print "おいしい$in{'form1'}\n"; print "まずい$in{'form2'}\n"; print "</body>\n"; print "</html>\n"; exit; cgi-lib.plはサーバーにいれております。 どうしてうごかないのでしょうか。 perlの場所も正確です。

    • ベストアンサー
    • Perl
  • perlの質問

    #!/usr/local/bin/perl require 'jcode.pl'; # 漢字コード変換ライブラリ #********** データを受け取る $query = $ENV{ 'QUERY_STRING' }; &parse_param( $query ); $name = $param{ 'name' }; # 投稿者 $email = $param{ 'email' }; # メールアドレス #********** 結果の出力 print "Content-type: text/html\n\n"; print "投稿者:".$name."<BR>"; print "メールアドレス:".$email; exit; #********** 入力したデータの分解 ********** sub parse_param {  local( $name, $value );  local( $parse_data ) = @_;  @in_params = split( /&/, $parse_data );  foreach $in_param ( @in_params ) {   ( $name, $value ) = split( /=/, $in_param );   $value =~ tr/+/ /;   $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('C', hex($1) )/ge;   &jcode'convert( *value, 'sjis' );   $param{ $name } = $value;  } } の $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack の部分だけ、何の処理をしているかがいまいちわかりません。 わかる方お願いします。

    • ベストアンサー
    • Perl
  • Perlがサーバー上でうごきません

    htmlファイルには <html> <form action="form2.cgi" method="get"> 食品名1<input type="text"name="form1"> <br> 食品名2<input type="text"name="form2"> <input type="submit"value="送信"> </form> </html> cgiファイルには #! /usr/bin/perl require "cgi-lib.pl"; &ReadParse(); print "Content-type:text/html\n"; print "\n"; print "<html>\n"; print "<head>\n"; print "<title>フォーム</title>\n"; print "</head>\n"; print "<body>\n"; print "おいしい$in{'form1'}\n; print "まずい$in{'form2'}\n; print "</body>\n"; print "</html>\n"; exit; cgi-lib.plはサーバーにいれております。 どうしてうごかないのでしょうか。

    • ベストアンサー
    • Perl
  • Perl 掲示板 初心者

    初の投稿で大雑把な質問失礼致します。 (1)目的・・・ホームページに掲示板を設置したい (2)言語・・・Perl (3)文字コード・・・UTF8(Encode) Perlでメールフォームは作ることはできました。 メールに関しては、ネットサーフィンでなんとか完成したのですが、 掲示板は、たくさんでてくるも、どれもうまいこと動作しません・・・ http://webings.net/perl/boardimg1/ ここのサイトのようにしたいのですが、 コピペで貼付けし、サーバーに送り実行すると 書込ファイルが開きませんと表示されます まずファイルの読込から躓いていて、先に進みません・・・ サーバー側に index.html----cgi----bbs.pl----dat----boardimg-----jpg,png,gif等 |-----boardimg.dat このようなフォルダ構造ではないのでしょうか? パーミッションは bbs.pl→777 boardimg.dat→666 そこで、教えて頂きたいのが (1)このサイトで、どう改善すればいいのか・・(すごく大雑把申し訳ないです) (2)初心者でもわかるようなサイト (3)掲示板の仕組み(ファイルの読込、書込について) また、このサイトの掲示板では、Perl内でHTMLが記述されてますが、 ホームページのformからCGI.pmでデータの受け渡し にするほうがいいのでしょうか?

  • Perlプログラムの変更方法

    メーリングリストのようなものをPerlで作って いるのですが、text.txtを一回だけ読み込むような プログラムに変更したいのですが、どこをどのように 変更すれば良いのでしょうか。 ================プログラム本体===================== #!/usr/bin/perl $wunderprize='100% genuine faux diamond'; open LIST,"list.txt"; while($name =<LIST>){ chomp($name); @f=split(/\s+/,$name); if($f[2] ne""){ open MAIL, "|mail $f[2]"; open TEXT,"text.txt"; while($line=<TEXT>){ $line=~ s/<FIRST>/$f[0]/g; $line=~ s/<FAMILY>/$f[1]/g; $line=~ s/<SUCKER>/$f[0] $f[1]/g; $line=~ s/<TRINKET>/fabulous $wunderprize/g; print MAIL "$line\n"; } close MAIL; close TEXT; } } close LIST; ==============text.txt======================== Dear <FIRST>, You have been chosen to win a brand new <TRINKET>!Free! Could you use another <TRINKET> in the <FAMILY> household? Yes <SUCKER>, I bet you could! Just respond by... ===============list.txt======================= 名前 名字 メールアドレス (実際はきちんとしたものを打ち込みます)

    • ベストアンサー
    • Perl

専門家に質問してみよう