用模具清理

use*_*367 1 perl

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

谢谢

Mar*_*eed 9

END即使程序dies 也执行块.

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; }
Run Code Online (Sandbox Code Playgroud)

如果你只想die在正常退出而不是在正常退出上做某事,你可以使用%SIG- 只要知道处理程序取代die你必须自己调用的正常行为:

$SIG{__DIE__} = sub {
    unlink $filename;
    CORE::die @_;
}
Run Code Online (Sandbox Code Playgroud)

  • File :: Temp会为你做这个(`tempfile(UNLINK => 1)`) (2认同)

Tan*_*lus 5

你可能正在寻找一个END块(参见perlsub).但是,该主题还有许多其他变体.例如,Guard,它将允许清除退出范围(无论是通过返回,死亡还是转到),或者只是使用DESTROY方法创建自己的对象,将清理粘贴在DESTROY方法中.

在这种特定情况下,您可能也对File :: Remove :: clean 感兴趣- 虽然它针对测试文件,但它也可能解决这个特定问题.