LoginSignup
2
0

More than 5 years have passed since last update.

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

Posted at

この前
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
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0