Perl的编译学习小结
2015-07-26 20:49
246 查看
看前辈们写的测试工具,前后总是有BEGIN 和 END 两个模块,而且在常用的Perl -d debug这些perl脚本的时候,这个Begin和END却没有看到运行过程。今天看了Perl 大骆驼书的编译和命令行接口 了解了。
Perl 的生命周期可以分为,编译 (代码生成 解析树重构阶段) 和执行 四个阶段组成。
1.在编译阶段 perl能够根据BEGIN 引导块进行的更加深入。 BEGIN 块一完成解析就交给解释器以FIFO的顺序进行运行。这样处理的还有use和no 声明,use和no 实际上试伪装的BEGIN块。任何CHECK INIT 和END块都由编译器安排延迟执行。
INIT 以FIFO
CHECK和END以LIFO的顺兴执行。
2.代码生成阶段(可选) 这个时候是把编译完成的程序转换成C源程序或者串行的Perl 字节码(一个代表内部的perl指令的值序列)
这个时候完成CHCEK块的工作。
3. 解析树重构阶段(可选)
要复活程序,必须重构解析树。这个阶段是发生了代码生成阶段并且生成了字节码的情况下 存在的。 perl必须从字节码重构解析树 才能运行。
4. 执行阶段。
解析器 拿来解析树(可能直接从编译阶段得到 或者间接从代码生成阶段或者冲解析树重构阶段得到) 并且运行。
这个阶段开始之前,在主程序运行之前,所有安排好的INIT会以FIFO的顺序执行。
当程序执行后。 会以LIFO的顺序执行END块。
再说一下BEGIN END INIT 和CHECK 多次定义这些块不会有任何问题,因为Perl会跟踪何时调用他们,并且不用通过名字调用。
BEGIN --- 如果在编译过程中碰到 则在编译文件的其他部分之前尽可能快的运行 FIFO
CHECK --- 编译完成之后,程序开始之前。 LIFO
INIT ---- 主流程开始之前 FIFO
END 程序运行之后 LIFO END块会尽可能晚的执行,当程序退出perl解释器,甚至因为一个没有捕获的die或者其他异常。在两种情况下会忽略END块(或者DESTORY) a y一个程序不是退出 而是以exec从一个程序变形到另外一个程序 或者一个进程被未捕获的信号杀死时。
Perl 的生命周期可以分为,编译 (代码生成 解析树重构阶段) 和执行 四个阶段组成。
1.在编译阶段 perl能够根据BEGIN 引导块进行的更加深入。 BEGIN 块一完成解析就交给解释器以FIFO的顺序进行运行。这样处理的还有use和no 声明,use和no 实际上试伪装的BEGIN块。任何CHECK INIT 和END块都由编译器安排延迟执行。
INIT 以FIFO
CHECK和END以LIFO的顺兴执行。
2.代码生成阶段(可选) 这个时候是把编译完成的程序转换成C源程序或者串行的Perl 字节码(一个代表内部的perl指令的值序列)
这个时候完成CHCEK块的工作。
3. 解析树重构阶段(可选)
要复活程序,必须重构解析树。这个阶段是发生了代码生成阶段并且生成了字节码的情况下 存在的。 perl必须从字节码重构解析树 才能运行。
4. 执行阶段。
解析器 拿来解析树(可能直接从编译阶段得到 或者间接从代码生成阶段或者冲解析树重构阶段得到) 并且运行。
这个阶段开始之前,在主程序运行之前,所有安排好的INIT会以FIFO的顺序执行。
当程序执行后。 会以LIFO的顺序执行END块。
再说一下BEGIN END INIT 和CHECK 多次定义这些块不会有任何问题,因为Perl会跟踪何时调用他们,并且不用通过名字调用。
BEGIN --- 如果在编译过程中碰到 则在编译文件的其他部分之前尽可能快的运行 FIFO
CHECK --- 编译完成之后,程序开始之前。 LIFO
INIT ---- 主流程开始之前 FIFO
END 程序运行之后 LIFO END块会尽可能晚的执行,当程序退出perl解释器,甚至因为一个没有捕获的die或者其他异常。在两种情况下会忽略END块(或者DESTORY) a y一个程序不是退出 而是以exec从一个程序变形到另外一个程序 或者一个进程被未捕获的信号杀死时。
相关文章推荐
- C该程序生成一个唯一的序列号
- KVM基本功能管理
- JDK 8 中Interface新增的default方法和static方法的区别和使用
- 帮助Jimmy
- sift是图像匹配的非常经典的算法
- RBF(径向基)神经网络 非线性函数回归的实现
- 【数据结构】2、汉诺塔
- VS2010+CMake重编译opencv2.4.10
- 积累中~~~
- zoj1383
- javascript之变量
- 深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const p
- 预编译头文件
- HDU-2289 Cup
- [转]Android 网络通信框架Volley简介(Google IO 2013)
- Solr其他 配置
- MVC---404页面配置
- GCC链接的几个注意点
- UVA 644
- HDU 4054 Hexadecimal View 十六进制