为什么Perl eval会出错

时间:2013-11-03 18:41:51

标签: 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  

它会发现错误,为什么?谁可以帮助我?

2 个答案:

答案 0 :(得分:9)

第二个纯粹是偶然的。您的双引号字符串正在插入$i$j的空值,而您实际上正在运行

for  (1..3) {
  ### = 
  print ;
}
如果您没有为变量命名,{p = 1}}会for分配给$_,而print默认会打印$_,这恰巧可行。删除注释标记时,单独的等号会导致语法错误。

如果您使用过strict,那么它会阻止您首先编译损坏的代码,如果您使用过warnings,它至少会警告您使用未初始化的代码字符串插值中的变量$i$j

答案 1 :(得分:3)

你错过了一句话:

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

和“单引号”必须在eval调用之前不扩展变量。