我想知道是否有任何方法可以使用骰子进行清理。例如,如果我创建了一些文件,但是如果程序遇到需要死的情况,我希望删除它们。
由于
答案 0 :(得分:9)
END
s。,也会执行 die
个块
use File::Temp qw( tempfile );
# create "things"
my ($fh, $filename) = tempfile();
# die because of a problem
die ('a problem occured');
# clean up when dying
END { unlink $filename; }
如果您只想在die
而不是正常退出时执行某些操作,则可以使用%SIG
- 只需注意处理程序替换正常die
1}}行为,你必须自己调用:
$SIG{__DIE__} = sub {
unlink $filename;
CORE::die @_;
}
答案 1 :(得分:5)
您可能正在寻找END块(请参阅perlsub)。但是,该主题还有许多其他变体。例如,Guard,它将允许清除退出范围(无论是通过return,die还是goto),或者只是使用DESTROY方法创建自己的对象,将清理粘贴在DESTROY方法中。
在这种特定情况下,您可能也对File::Remove :: clean感兴趣 - 虽然它针对测试文件,但它也可以解决这个特定问题。
答案 2 :(得分:1)
此主题的另一个变体是try
/ finally
块,例如由Try::Tiny
给出:
use Try::Tiny;
my ($fh, $filename) = tempfile();
try {
some code here...;
}
finally {
unlink $filename;
};
答案 3 :(得分:0)
如果这些是临时文件,您想要在完成后删除,无论您是否死亡,请使用File::Temp。