eval { thaw("lol_not_storable"); };
是不一样的东西
eval qq/thaw("lol_not_storable");/;
在Perl有足够的机会来解析第一,而是等待解析第二。观察下面是编译错误:
use 5.014;
use strict;
use warnings;
say 'Would print without compile error';
eval { $i++; };
^D
Global symbol "$i" requires explicit package name at - line 8.
Execution of - aborted due to compilation errors.
而eval '$i++'
不会。我认为你所听到的关于eval
的大多数灰心症是后者的更多类型,而不是前者。后者评估一个字符串作为代码,前者主要告诉Perl“不要死”。
这里的字符串版本:
use 5.014;
use strict;
use warnings;
say 'Would print without compile error';
eval ' $i++;';
输出:
Would print without compile error
的代码仍然无法编译,但只有当它的eval
-ed,只有具有效力当我检查[email protected]
,这全文如下:
[email protected]= 'Global symbol "$i" requires explicit package name at (eval 24) line 1.
'
你有什么反对'eval'? (或者其中一个包装,像[Try :: Tiny](http://search.cpan.org/perldoc?Try::Tiny)? – cjm 2012-03-16 09:22:02
[»你不能没有检查就做到这一点,最简单的方法是只是做解码,然后处理异常«](http://stackoverflow.com/a/2583981/46395) – daxim 2012-03-16 10:27:48
@cjm没有什么真正的,但我已经意识到如何捕捉与eval这个错误。有一个“错误报告”部分http://perldoc.perl.org/Storable.html,我希望有一个解决方案可以使用它,但我无法让它自己工作。 – GoldenNewby 2012-03-17 00:37:36