perl如何在编译时和运行时做出反应

时间:2012-03-15 09:14:23

标签: perl

我对此的理解是:

编译时 错误是保持perl无法解析文件的错误;比如缺少分号。

运行时错误 是一个无法检测到的错误,直到代码运行为止;例如除以零错误或调用未定义的子程序。

由于perl是一种解释器语言,整个代码或脚本是否会被编译一次然后运行,或者它会为每一行编译然后运行。

有人可以告诉我这件事。

2 个答案:

答案 0 :(得分:2)

该程序将编译成一个optree。遍历并执行了optree。

在运行时,可能需要额外的编译阶段。通常的罪魁祸首是字符串eval和代码单元的延迟/动态加载,例如requiredo

答案 1 :(得分:0)

Perl是一种解释语言,这意味着每次尝试启动脚本时,编译阶段和运行阶段都会按顺序发生。

另一方面,

编译的语言(C,Pascal等)分离出这两个阶段,并且通常有一个称为链接的中间阶段,它们连接在一起目标文件到最终的可执行文件文件中。

在编译语言中,检测未定义的函数可以在编译阶段或链接阶段进行,具体取决于语言规范的严格程度。在原始C调用中,链接器将找到未定义的函数,但在C ++中,它将由编译器找到。

对于更复杂的问题,某些语言(如Java)具有单独的编译和执行阶段,但编译实际上是一个中间的“字节代码”,然后由运行时系统解释(即Java虚拟机。)

严格地说,Perl也使用中间字节代码,但阶段的分离几乎是不可见的。