如果我写这段代码:
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
它会发现错误,为什么?谁可以帮助我?
答案 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
调用之前不扩展变量。