首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用模具清理

使用模具清理
EN

Stack Overflow用户
提问于 2012-11-08 21:31:07
回答 4查看 768关注 0票数 1

我想知道是否有任何方法可以使用die进行一些清理。例如,如果我创建了一些文件,但如果程序遇到需要终止的情况,我希望将它们删除。

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-11-08 21:35:47

即使程序dies,也会执行END块。

代码语言:javascript
复制
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行为,您必须自己调用它:

代码语言:javascript
复制
$SIG{__DIE__} = sub {
    unlink $filename;
    CORE::die @_;
}
票数 9
EN

Stack Overflow用户

发布于 2012-11-08 21:39:09

您可能正在寻找结束块(请参阅perlsub)。然而,在这个主题上也有许多其他的变体。例如,Guard,它将允许在退出作用域时进行清理(无论是通过返回、死亡还是转到),或者只是简单地使用销毁方法创建自己的对象,将清理粘贴到该销毁方法中。

在这种特定的情况下,您可能还会对File::Remove::clean感兴趣-虽然它的目标是测试文件,但它也可能解决这个特定的问题。

票数 5
EN

Stack Overflow用户

发布于 2012-11-08 22:32:05

这个主题的另一个变体是try/finally块,如Try::Tiny所提供的

代码语言:javascript
复制
use Try::Tiny;

my ($fh, $filename) = tempfile();
try {
    some code here...;
}
finally {
    unlink $filename;
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13289882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档