为什么Perl eval会出错

1 perl eval

如果我写这段代码:

for $i (1..3) { 
 $j = $i;
print $j;
}  
Run Code Online (Sandbox Code Playgroud)

有用.

这段代码将起作用:

$code = "  
 for $i (1..3) { 
  #### $j = $i;
  print $j;
}  
eval $code  
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试这样写:

$code = "
for $i (1..3) { 
$j = $i;
print $j;
 }  
eval $code  
Run Code Online (Sandbox Code Playgroud)

它会发现错误,为什么?谁能帮我?

hob*_*bbs 9

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

for  (1..3) {
  ### = 
  print ;
}
Run Code Online (Sandbox Code Playgroud)

巧合的是因为如果你没有命名变量for就会分配$_,并默认print打印$_.删除注释标记时,单独的等号会导致语法错误.

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