第 5章 eval

Perl根据其参数类型的不同,以两种似乎截然不同的方工作。

如果给定的是字符串,Perl就会将它当作小程序并编译执行(如前面所提到的那样);

这被称做动态表达式计算。字符串的内容在编译时可以是以已知的也可能是未知的。

如果给定的参数为一个代码块——–也就是说在编译时代码是知道的,则eval 则被用来捕获运行时的例外。

字符串形式:表达式计算:

[root@master perl]# cat m21.pl
a=10;b = 20;
str=c =a+b’;
eval str;printc,” ”;
[root@master perl]# perl m21.pl
30

代码块形式,例外处理:

在这种形式下,eval后面跟的是一个代码块,而不再是包含字符串的标量变量。

它被用来处理运行时错误,或称做例外。错误可以是内建的(如内存溢出,除数为0)

[root@master perl]# cat m22.pl
eval {
a=10;b=0;

c=a/b;  
};  
print
@;
[root@master perl]# perl m22.pl
Illegal division by zero at m22.pl line 4.

在编译脚本时,Perl对代码块进行语法检查并生成编译代码。在遇到运行错时,Perl将

跳过eval块中的剩余代码,并将$@设置为相应的错误信息。

原文地址:https://www.cnblogs.com/hzcya1995/p/13351342.html