如果我写这段代码:
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
它会捕获一个错误,为什么?谁能帮我?
第二个纯粹是偶然的。您的双引号字符串正在为 and 插入空值,$i
并且$j
您实际上正在运行
for (1..3) {
### =
print ;
}
巧合的是,如果您不命名变量,for
它将分配给,并且默认情况下会打印。删除注释标记时,唯一的等号会导致语法错误。$_
print
$_
如果你使用过strict
它,它会阻止你首先编译损坏的代码,如果你使用过warnings
它,它至少会警告你使用未初始化的变量$i
和$j
字符串插值。
您缺少报价:
$code = '
for $i (1..3) {
$j = $i;
print $j;
}';
eval $code;
eval
并且此处的“单引号”是强制性的,以在调用之前不扩展变量。