我想知道是否有任何方法可以使用die进行一些清理。例如,如果我创建了一些文件,但如果程序遇到需要终止的情况,我希望将它们删除。
谢谢
发布于 2012-11-08 21:35:47
即使程序dies,也会执行END块。
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行为,您必须自己调用它:
$SIG{__DIE__} = sub {
unlink $filename;
CORE::die @_;
}发布于 2012-11-08 21:39:09
您可能正在寻找结束块(请参阅perlsub)。然而,在这个主题上也有许多其他的变体。例如,Guard,它将允许在退出作用域时进行清理(无论是通过返回、死亡还是转到),或者只是简单地使用销毁方法创建自己的对象,将清理粘贴到该销毁方法中。
在这种特定的情况下,您可能还会对File::Remove::clean感兴趣-虽然它的目标是测试文件,但它也可能解决这个特定的问题。
发布于 2012-11-08 22:32:05
这个主题的另一个变体是try/finally块,如Try::Tiny所提供的
use Try::Tiny;
my ($fh, $filename) = tempfile();
try {
some code here...;
}
finally {
unlink $filename;
};https://stackoverflow.com/questions/13289882
复制相似问题