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)
你可能正在寻找一个END块(参见perlsub).但是,该主题还有许多其他变体.例如,Guard,它将允许清除退出范围(无论是通过返回,死亡还是转到),或者只是使用DESTROY方法创建自己的对象,将清理粘贴在DESTROY方法中.
在这种特定情况下,您可能也对File :: Remove :: clean 感兴趣- 虽然它针对测试文件,但它也可能解决这个特定问题.