1

如果我写这段代码:

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  

它会捕获一个错误,为什么?谁能帮我?

4

2 回答 2

9

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

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

巧合的是,如果您不命名变量,for它将分配给,并且默认情况下会打印。删除注释标记时,唯一的等号会导致语法错误。$_print$_

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

于 2013-11-03T18:53:20.587 回答
3

您缺少报价:

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

eval并且此处的“单引号”是强制性的,以在调用之前不扩展变量。

于 2013-11-03T18:48:24.530 回答