Perl的编译学习小结

看前辈们写的测试工具,前后总是有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  --- 如果在编译过程中碰到 则在编

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值