File::Temp で一時ファイルを作成しています。プログラムが正常に終了すると、一時ファイルは自動的に削除されます。私のプログラムがctrl + cで停止されたときに同じことが起こると思っていました。そうではない。
これが私の問題を示す簡単なプログラムです。
望ましい動作はこれです。どうすれば達成できますか?私はLinuxを使用しています。
- ファイルハンドルを閉じるときに一時ファイルが削除されない (ok)
- プログラムが正常に終了すると、一時ファイルが削除されます(OK)
- プログラムが ctrl+c で終了すると一時ファイルが削除される (動作しない)
.
#!/usr/bin/perl -l
use warnings; use strict;
use File::Temp qw(tempfile tmpfile);
my $fh = File::Temp->new;
close $fh;
-f "$fh" || die "$fh does not exist";
print "hit enter and the file will be deleted";
print "hit ctrl+c and it won't";
print "verify with ls $fh after program exits";
readline STDIN;
編集1
tempfile の動作をテストしました。Linuxが私が探しているものをサポートしていることを確認しているようです(ファイルを一時としてマークする/開いているファイルのリンクを解除する)。File::Temp を理想化したようです。
# program will die because os deletes tmpfile after close
my $fh = tempfile;
close $fh;
stat $fh || die;
readline STDIN;