天行健,君子以自强不息!
分类: PERL
2013-04-15 21:55:35
perldoc >>>
do 语句做了类似的功能:do 'filea' == eval `cat filea`;
形式
1.eval Expression
2.eval BLOCK
"1"在运行时编译和执行
"2"在编译时编译,运行时执行
因此,"1"编译多次,运行多次。"2”编译一次,运行多次。
eval 会在编译和运行的过程中产生的错误和异常记录在变量$@中。
**举例**:
A:eval $x;
B:eval "$x";
C:eval '$x';
D:eval { $x };
根据“1”和“2”:A,B,C 是在运行时编译,D在编译时编译
A与B完全等价。在运行时编译时会对变量进行展开,然后对展开的值进行eval。设$x='my $a=20;print "hello","$a\n"';
那么,eval $x ==> eval { my $a=20;print "hello","$a\n"};
C因为是单引号包起来,在运行时编译时候不进行变量展开。
D在编译时编译,在运行时候进行运行。
返回值
在列表环境中返回列表,在标量环境中返回标量,类似函数。
返回值是最后一个语句的值。可以通过return语句明确返回值。
错误时返回undef和空表,同时会将错误信息记录在$@中。
A control flow operator like or can bypass the setting of $@
用途
形式“2”常用来捕获异常。
形式“1”来构造灵活的代码。