Perl

Perlで一時ファイル、File::Tempの使い方

この前
pythonで一時ファイル、一時ディレクトリ(tempfile)
を書いたのでPerl版のも書いてみる

何はなくともmanページ

perldoc.jpのドキュメントなら日本語なので安心。

File::Temp - テンポラリファイルの名前とハンドルを安全に返す - perldoc.jp

使い方

ポイントは2つ。

  • use File::Tempの後に続けてqw/ tempfile /を書くこと
  • tempfileの引数に( UNLINK => 1 )を指定すること

UNLINK => 1を指定しないと/tmpにファイルが残ったままになるので忘れないように。

main.pl
#!/usr/bin/perl
use v5.10; # say関数を使えるようにする
use warnings;

use File::Temp qw/ tempfile /;

my ($fh, $filename) = tempfile( UNLINK => 1 );
print $fh "Created by File::Temp\n";
close $fh; # 閉じておいた方がよかった気がする※要出典

say "filename=$filename";

system("cat $filename"); # この時点では存在する。プロセス終了時に削除される。

実行結果

$ perl main.pl
filename=/tmp/MfjliwahDk
Created by File::Temp
$ ls /tmp/MfjliwahDk
ls: cannot access /tmp/MfjliwahDk: No such file or directory

同じくtempdir

  • tempdirの引数に( CLEANUP => 1 )を指定すること
main.pl
#!/usr/bin/perl
use v5.10;
use warnings;

use File::Temp qw/ tempfile tempdir /;

my ($tmpdir) = tempdir(CLEANUP => 1);
if(-d $tmpdir) {
  say "tmpdir=$tmpdir"; # この時点では存在する。プロセス終了時に削除される。
}

実行結果

$ perl main.pl
tmpdir=/tmp/9iHtvMPpvq
$ ls /tmp/9iHtvMPpvq
ls: cannot access /tmp/9iHtvMPpvq: No such file or directory