これは私を夢中にさせています。ヘルプ?
Perl ループ内のように見えますforeach
が、置換パターンの外側の変数は期待どおりに変更されますが、置換パターンの内側の変数は「スタック」します。あたかも perl がコード ブロックs///
内で置換パターンに遭遇した場合foreach
、最初はループを介して置換パターンの内容を補間し、2 回目は補間しないようです。
ここにいくつかのテストコードがあります:
#!/usr/bin/perl
@replacements=("a", "b", "c");
@input=("xxletterxx");
foreach $replacement (@replacements) {
foreach $line (@input) {
$line=~s/xxletterxx/$replacement/g;
print "R: $replacement\n";
print "L: $line\n";
}
}
これを印刷する必要があると思います:
R: a
L: a
R: b
L: b
R: c
L: c
...しかし、代わりにこれを出力します:
R: a
L: a
R: b
L: a <--- Why isn't this 'b'?
R: c
L: a <--- Why isn't this 'c'?
コード ブロックの他の場所で@replacements
?
何故ですか?
Perl が突然壊れたような気がします。
この DOS の動作は perl で発生しているようです。