• ベストアンサー

以下のような記述では エラーになります?

cgi初心者です #!/usr/bin/perl $kinoko='../kino.txt'; open DATA "+<$kinoko"; $mokk=<DATA>; $mokk++; print DATA $mokk; close DATA; print <<END_HTML; <html> <body> <font size="7"> $mokkです </font> </body> </html> END_HTML exit; どこに問題があると考えられるでしょうか

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

  • ベストアンサー
  • leaz024
  • ベストアンサー率75% (398/526)
回答No.2

まず、No.1でも書かれていますが、open ではファイルハンドルとファイル名の間にコンマ(,)が必要です。 これは構文エラーなので「perl -wc ファイル名」などとすればチェックできますから、まずはこれで確認しましょう。 次に HTML の出力部分ですが、CGI では HTML の出力に先立って、HTTPヘッダを出力しなければなりません。 たとえば、「Content-Type:text/html; charset=Shift_JIS」などです。 これを次のようにして出力します。 print <<END_HTML; Content-Type:text/html; charset=Shift_JIS <html>   : ※charsetの値は必要に応じて変更してください。 ※HTTPヘッダとHTMLパートの間には、何も書かれていない空っぽの行が1行必要です。 また、恐らくこれはカウンターのテストスクリプトで、kino.txt に記録しているのではないか、と思うのですが、これではまともにカウントアップできません。 (もし違う目的のスクリプトなのであれば、無視してください。) 質問のスクリプトは kino.txt の値を読み込んだ後、++ した値をそのまま書き込んでいますが、それだと元の値の後ろに書き込まれてしまいカウンターが1ずつ増えません。 順を追って書くと、   回数 読込値 表示値 書込後のファイルの内容    1           1    1    2     1     2    12    3     12     13   1213    4   1213   1214   12131214 のようになってしまいます。 カウントアップした値はファイルの先頭から書かなければならないので、ファイルポインタをseekで戻してやります。 つまり、 open DATA, "+<$kinoko"; $mokk=<DATA>; $mokk++; seek DATA, 0, 0;   # 書き込みの前にファイルポインタをセットする。 print DATA $mokk; close DATA;

その他の回答 (1)

  • the845t
  • ベストアンサー率33% (246/743)
回答No.1

>open DATA "+<$kinoko"; open DATA, "+<$kinoko"; では?

関連するQ&A

専門家に質問してみよう