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