ファイルのオープン・クローズ、ロック

Perlでファイルを扱う際には、ファイルハンドルという別名をつけて扱います。ファイルハンドルは半角英大文字を使用します。

ファイルのオープン(open)

Perlでファイルを扱うときには、始めに「オープン」という手続きを行います。そして、ファイルを使い終ったら「クローズ」という手続きを行います。

open関数は以下の形をしています。

open(ファイルハンドル, "処理モードとファイル名")

これ以降クローズするまで、このファイルを扱うときにはファイルハンドルを用います。

処理モードはファイル名にファイルの使用方法(読み出しや書き込み)を指定します。ファイル名の前に下記の記号をつけて指定します。

記号 処理モード
< 読み出し
> 書き込み
>> 追加書き込み
+<、+> 読み書き両用

open (TEST, "<testfile")    # ファイルハンドルTESTで、ファイルtestfileを読み出し専用で開く。

ファイルのオープンに失敗したとき

指定したファイルが存在しないなどの理由で、ファイルのオープンが失敗する場合があります。その場合、open関数の値は偽になります。if文||(論理和演算子)を使って失敗した場合の処理をしておくのがよいです。

if ( ! open関数 ) { ファイルオープンに失敗したときの処理 }; # if文を使った場合
open関数 || ファイルオープンに失敗したときの処理; # ||演算子を使った場合

ファイルのオープンに失敗したときの処理

プログラムの実行を中止したい場合には、die文を用います。die文は以下の形をしています。

die "文字列";

文字列には、終了時に表示するエラーメッセージなどを指定します。

ファイルのクローズ(close)

close関数は以下の形をしています。

close ( ファイルハンドル );

ファイルハンドルで指定したファイルをクローズします。close関数の値は、open関数同様に、成功した場合/失敗した場合で真/偽になります。

ファイルのロック(flock)

複数のプログラムから同時に一つのファイルに読み書きが行われないようにファイルにロック(lock 鍵)をかけることができます。ファイルをオープンしたら、すぐにロックをかけ、ファイルをクローズしたら、すぐにロックを解除するのが良いです。ファイルのロックにはflock関数を使用します。flock関数は次の形をしています。

flock (ファイルハンドル, 操作モード);

操作モードは、以下のようになっています。CGIでよく使われるのは2と8です。

操作モード 機能 説明
1 共有ロック ロック中は読み込みのみ可
2 排他ロック ロック中は読み書き禁止
4 非ブロック ロック中は待たずにあきらめる
8 ロック解除 ロックを解除する

ファイルのロックはOSによっては機能しません。その場合にはコメントアウトしてください。