Perl根据其参数类型的不同,以两种似乎截然不同的方工作。
如果给定的是字符串,Perl就会将它当作小程序并编译执行(如前面所提到的那样);
这被称做动态表达式计算。字符串的内容在编译时可以是以已知的也可能是未知的。
如果给定的参数为一个代码块——–也就是说在编译时代码是知道的,则eval 则被用来捕获运行时的例外。
字符串形式:表达式计算:
[root@master perl]# cat m21.pl
a=10;b = 20;
str=′c =a+b’;
eval str;printc,”\n”;
[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块中的剩余代码,并将$@设置为相应的错误信息。