norah'# で最新版を配っている模様なのでダウンロード、バージョンアップしてみようと思う。
と、いうことがちょっと前にあって、サンプルと一緒にブログに書こうとしたのだけど、今になってサンプルコードを書いてみると速度に違いがない。2倍以上の違いが出ていた気がするんだけど。速度に違いが出るには何かもう少し条件があるのかもしれない。
とエラーになった。CentのyumとPerlのCPANがそれぞれperlパッケージを管理しているのでバッティングしたのだと思う。Perlの側でTest::Harnessを更新する。Can't use an undefined value as an ARRAY reference at /usr/lib/perl5/5.8.8/Test/Harness.pm line 373.
直った。% su -
# perl -MCPAN -e shell
cpan shell -- CPAN exploration and modules installation (v1.7602)
ReadLine support enabled
cpan> install Test::Harness
(略)
Result: PASS
/usr/bin/make test -- OK
Running make install
Installing /usr/lib/perl5/5.8.8/Test/Harness.pm
Installing /usr/bin/prove
Writing /usr/lib/perl5/5.8.8/i386-linux-thread-multi/auto/Test/Harness/.packlist
Appending installation info to /usr/lib/perl5/5.8.8/i386-linux-thread-multi/perllocal.pod
/usr/bin/make install -- OK
cpan> exit
Lockfile removed.
# exit
%
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');
UNLINK(デフォルトで真)、DIR、EXLOCK、SUFFIX。追加でファイル名テンプレートはオプションTEMPLATEを使用することで指定できる。オプションOPENはサポートされず常にファイルはオープンされる。
引数の大文字と小文字は区別されない。失敗時にはcroak()を呼び出す。
DIRはデフォルトではカレントディレクトリ。
TEMPLATEはファイル名のテンプレート文字列で、文字列末尾の連続した文字"X"部分をランダムな文字に置き換えられてテンポラリファイル名が作成される。"X"は少なくとも4文字以上であるべき。
SUFFIXはファイル名としてTEMPLATEの後ろに付け加えられる文字列。
デストラクタ
オブジェクト指向インタフェースで生成されたオブジェクトがスコープ外に出ると自動的にデストラクタDESTROY()が実行される。オブジェクト生成時にコンストラクタがUNLINKを1にセットして呼び出されていれば、デストラクタはテンポラリファイルを(unlink1()を使用して)unlink()する。(UNLINKはデフォルトで1)
オブジェクトがfork()によって親プロセスから受け継いだものである場合には、親プロセスでオブジェクトがスコープ外に出れば削除されてしまうはず。
ただしグローバル変数$KEEP_ALLが真であれば全てのテンポラリファイルは削除されずに残される。