2013-11-03 71 views
1

如果我寫這樣的代碼:爲什麼Perl的EVAL得到錯誤

for $i (1..3) { 
$j = $i; 
print $j; 
} 

它的工作原理。

而這個代碼將工作:

$code = " 
for $i (1..3) { 
    #### $j = $i; 
    print $j; 
} 
eval $code 

但是,如果我嘗試寫這樣的:

$code = " 
for $i (1..3) { 
$j = $i; 
print $j; 
} 
eval $code 

它將捕獲錯誤,爲什麼呢?誰能幫我?

+1

這是你的真實碼嗎?看起來不像第二個可運行 – Suic

+5

永遠不要說「錯誤」,而不指定*完全*錯誤。 – TLP

+4

始終使用'use strict;使用警告;'! – ikegami

回答

3

你缺少一個報價:

$code = ' 
for $i (1..3) { 
    $j = $i; 
    print $j; 
}'; 
eval $code; 

和「單引號」這裏是強制性的,以不擴大eval調用之前變量。

9

第二個純粹是偶然的。您的雙引號字符串爲$i$j插空值和你實際運行

for (1..3) { 
    ### = 
    print ; 
} 

巧合的作品,因爲for將分配給$_,如果你不名的變量,並print將打印$_默認。當您刪除評論標記時,單獨的等號會導致語法錯誤。

如果您用過strict它會阻止你編譯擺在首位的斷碼,如果你使用過warnings將至少有警告你關於串插使用未初始化變量的$i$j