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

2 つ目は純粋に偶然に機能します。二重引用符で囲まれた文字列は、およびの空の値を補間して$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 に答える