• ベストアンサー

ファイルの入出力が出来ません。

perlの初心者です。 cgiを作ろうとしています。 標準出力には出力できても、ファイルの入出力が出来ません。 #!/usr/bin/perl open(OUT,">>test"); print OUT "test data"; close (OUT); と実行しても、エラーもでないのですが、ファイルも作られず、書き込みもされません。 しかし、コマンド名'test'としてセーブして、プロンプトから'perl test'とするとファイルに書き込みされるようです。 perlの設定の問題なのでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • Dpop
  • ベストアンサー率51% (279/544)
回答No.1

書き込みモードが違います。 open(OUT,">>test"); は、追加書き出しモードです。 入出力は、 open(OUT,"+<test"); と書きます。また、エラー検出がされていません。 open(OUT,"+<test") or die "open error test"; open の後に or または || を付けて、エラーを検出してください。 それから、もう一点。パーミッションは大丈夫ですか? ちゃんと、書き込み権限を与えてありますか? 通常は、専用のフォルダを作り、そのフォルダのパーミッションを777(プロパイダによっては、707で無いと動作しない場合もあります。)とし、CGIをそのフォルダへ入れてから実行してください。 書き込み権限が無いと、ファイルは作られません。

masanosuke
質問者

お礼

ありがとうございます。 cgiのテストのため自分のLANのLinux上でapacheを立ち上げて他のwindowsマシーンからアクセスしながらテストをしていました。どうも、perlのprintがうまくいかないので、telnetを使って、printのテストをしていました。openのエラーの時はエラーが表示される物と思っていました。確かに"or die ..."をつけるとtelnetからopenしようとするとエラーが出ていたようです。大変参考になりました。 Linuxで直接コマンドを実行すると、open出来るのに、telnetだとなぜエラーになるのですか?新たな疑問です、cgiでうまくprint出来ないのも何か同じような原因があるのでしょうか?

その他の回答 (2)

  • Ethersky
  • ベストアンサー率71% (168/235)
回答No.3

読み書きを併用しないなら open(OUT,"> test"); でいいと思われます。 なお、 open(OUT,"+> test"); は「書いてから読む」用途のものですので「読んでから書く」なら open(OUT,"+< test"); になります。 但し、seekしてポインタを移動しないとだめです。

masanosuke
質問者

お礼

ありがとうございました。

  • Dpop
  • ベストアンサー率51% (279/544)
回答No.2

#1 です。 open(OUT,"+<test"); は、 open(OUT,"+>test"); としてください。上の指定だと、ファイル新規作成に対応できません。失礼しました。

masanosuke
質問者

お礼

ありがとうございました。 いろいろやってみました。どうにかopen出来るようになりました。パーミッションの問題だったようです。

関連するQ&A