• ベストアンサー

Perlでファイルの新規作成

Perl中級者です。 フォームから受け取ったデータの一つをファイル名として 新たにデータ保存用のファイルを自動生成することは可能でしょうか? ログを定期的に別ファイルとして保存する掲示板や、cgiファイルさえ設置すれば必要なデータ保存用ファイル(空ファイル)を自動生成してくれるようなスクリプトを見かけますので、不可能ではないと思っているのですが・・・。 <作りたいスクリプトの概要> 1.管理者が管理用フォームで文字列Aを登録する。 2.A.datという名のファイルが自動生成される。 3.閲覧者がAについて閲覧者用フォームで送った内容がA.datに書き込まれる。 4.管理者用ページでA.datの内容が一覧表示される。 というもので、2の部分が分かりません。 可能であるならば、その方法をご教授願います。 不足情報がありましたら補足します。

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

  • ベストアンサー
noname#25358
noname#25358
回答No.2

 えーと。  ファイルの入出力の挙動を決定しているのは、ファイル名の前に付けた ">" という文字です。  ">" はファイルを新規作成(または作り直し)して書き込み、">>" は既存のファイルに追加、"<" は読み込みです。(他にもいくつかありますが、目下これで充分です)  よって、入力用ファイルに "OUT" と名前を付けることもできます。"NURARI" とか "GITTYON" でもいいんです。  で、書き込みが行われなくても、プログラムが「書き込むための準備」をしたのですから、クローズは必要です。  cgi とは別のフォルダに作る場合は、ディレクトリを移動するよりも、相対パスでそのディレクトリを指定します。  たとえば、cgi が /massasoyt/cgi-bin/ というディレクトリにあったとします。  そしてデータは、その直下である /massasoyt/cgi-bin/data/ にあったとすると、オープンするときは、   open(OUT, ">data/A.dat");  と指定することになります。しかしデータが、/massasoyt/data/ にあったとすると、1度戻らなければ行けないわけですので、  1つ上に戻るときは、   open(OUT, ">../data/A.dat");  となります。

noname#48234
質問者

お礼

度重なる質問にお答えいただいて本当にありがとうございました。問題は全て解決しました。全くのゼロからスクリプトを書くというのは壁も多いですが勉強になりますね。 なるべく自力でやりますが、どうしても・・・というときはまたお助けください。ありがとうございました。

その他の回答 (2)

回答No.3

>ハンドルOUTは任意ですか? 任意です。 変数と同じようなものだと思っていただければ よいかと思います。 >ファイル生成段階では書き込みません。 >このopenはcloseする必要がありますか? read/write関係なく、ファイルをopenしたのならば 最後に必ずcloseしなければなりません。

noname#48234
質問者

お礼

開けたら閉める。プログラムの世界でも常識のようですね(笑)。ご回答ありがとうございました。

noname#25358
noname#25358
回答No.1

 普通に作れますよ。   open(OUT, ">A.dat");  これでOKです。  ただし、その A.dat というファイルが出来ることになるフォルダの属性を、書き込み可能にしておく必要があります。  また、そのファイルの所有者は nobody になりますので、telnet で操作するときは chmod で所有者を自分に移す必要があります。

noname#48234
質問者

補足

ありがとうございます、できました。 てっきりopenは既存のファイルを開くためだけのものと思っていました。また、フォルダのパーミッションも違っていました。 他にもいくつかお聞きしてよろしいでしょうか? 1.ハンドルOUTは任意ですか?新規作成のための特殊なものなのですか? 2.ファイル生成段階では書き込みません。このopenはcloseする必要がありますか? 3.本体のcgiファイルと異なったディレクトリに新規作成する場合、chdir、opendir・closedirのどちらを使うのでしょうか?それとも別の方法でしょうか?どちらを使ってもうまくいきませんでした。chdirで作れたのですが、もとのディレクトリ(一つ上)に戻る方法が分からず、その後の処理がおかしくなってしまいました。 以上、お時間がございましたらお願いします。