File::Temp 

そもそも詳しくはperldoc File::Tempだが、結構簡単便利に使える。

File::Temp
安全にテンポラリファイルのファイル名とファイルハンドルを返す。

File::Tempは安全にテンポラリファイルを作成、open()する。File::Tempのコンストラクタ及び関数tempfile()はテンポラリファイル名とopen()したファイルハンドルを返す。追加のセキュリティレベルがセキュリティ確保のために用意されている。例えばworld writableなディレクトリにsticky bitが立っていないか、等。safe_levelを参照。
テンポラリディレクトリも扱える。

コンストラクタ

$tmp = File::Temp->new(
TEMPLATE => 'tempXXXXX',
DIR => 'mydir',
SUFFIX => '.dat');


コンストラクタが引数なしで呼び出された際のデフォルトの振る舞いは、関数tempfile()がオプションなしで呼び出されたものと同じで、オブジェクトがデストラクタによって削除される際にテンポラリファイルが削除される点が異なっている。
引数に使用できるオプションはtempfile()と同じ。

UNLINK(デフォルトで真)、DIREXLOCKSUFFIX。追加でファイル名テンプレートはオプションTEMPLATEを使用することで指定できる。オプションOPENはサポートされず常にファイルはオープンされる。
引数の大文字と小文字は区別されない。失敗時にはcroak()を呼び出す。

DIRはデフォルトではカレントディレクトリ。

TEMPLATEはファイル名のテンプレート文字列で、文字列末尾の連続した文字"X"部分をランダムな文字に置き換えられてテンポラリファイル名が作成される。"X"は少なくとも4文字以上であるべき。

SUFFIXはファイル名としてTEMPLATEの後ろに付け加えられる文字列。

デストラクタ

オブジェクト指向インタフェースで生成されたオブジェクトがスコープ外に出ると自動的にデストラクタDESTROY()が実行される。オブジェクト生成時にコンストラクタがUNLINKを1にセットして呼び出されていれば、デストラクタはテンポラリファイルを(unlink1()を使用して)unlink()する。(UNLINKはデフォルトで1)
オブジェクトがfork()によって親プロセスから受け継いだものである場合には、親プロセスでオブジェクトがスコープ外に出れば削除されてしまうはず。
ただしグローバル変数$KEEP_ALLが真であれば全てのテンポラリファイルは削除されずに残される。

コメント

コメントの投稿















管理者にだけ表示を許可する

トラックバック

この記事のトラックバックURL
http://haginov.blog35.fc2.com/tb.php/141-e3f3be0a