用模具清理

时间:2012-11-08 13:31:07

标签: perl

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

由于

4 个答案:

答案 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