我没有深刻或有趣的问题 - 我只是好奇为什么会如此。
我没有深刻或有趣的问题 - 我只是好奇为什么会如此。
假设每个包都依赖于之前的一切正确功能。 END块旨在“清理和关闭”程序包完成之前可能需要处理的任何内容。但是这项工作可能依赖于之前启动的软件包的正确运行,如果允许它们运行其END块,则可能不再适用。
如果你以任何其他方式做到这一点,可能会有不好的错误。
这是一个可能有用的简单示例:
# perl
BEGIN { print "(" }
END { print ")" }
BEGIN { print "[" }
END { print "]" }
这输出: ([])
如果 END
然后是一个FIFO BEGIN/END
不会很好地在一起工作。
更新 - 摘录自 编程Perl 第3版,第18章:编译 - 前卫编译器,复古口译员,第483页:
如果文件中有多个END块,它们的执行顺序与它们的定义相反。也就是说,定义的最后一个END块是程序完成时执行的第一个块。如果您将它们配对,这种反转可以使相关的BEGIN和END块以您期望的方式嵌套
/ I3az /
假设每个包都依赖于之前的一切正确功能。 END块旨在“清理和关闭”程序包完成之前可能需要处理的任何内容。但是这项工作可能依赖于之前启动的软件包的正确运行,如果允许它们运行其END块,则可能不再适用。
如果你以任何其他方式做到这一点,可能会有不好的错误。
这是一个可能有用的简单示例:
# perl
BEGIN { print "(" }
END { print ")" }
BEGIN { print "[" }
END { print "]" }
这输出: ([])
如果 END
然后是一个FIFO BEGIN/END
不会很好地在一起工作。
更新 - 摘录自 编程Perl 第3版,第18章:编译 - 前卫编译器,复古口译员,第483页:
如果文件中有多个END块,它们的执行顺序与它们的定义相反。也就是说,定义的最后一个END块是程序完成时执行的第一个块。如果您将它们配对,这种反转可以使相关的BEGIN和END块以您期望的方式嵌套
/ I3az /
Perl大量借用C和 END
跟随领先 C的 atexit
:
名称
atexit - 注册一个在进程终止时运行的函数
概要
#include <stdlib.h> int atexit(void (*func)(void));
描述
该
atexit()
函数应该注册指向的函数func
,在正常程序终止时无需参数调用。在正常的程序终止时,所有注册的功能都由atexit()
应按其注册的相反顺序调用函数...