这让我发疯了。帮助?
在我看来,它就像在 Perlforeach
循环中一样,替换模式之外的变量按预期更改,但替换模式内的变量“卡住”了。就好像当 perls///
在代码块中遇到替换模式时foreach
,它会在循环中第一次插入替换模式的内容,然后再也不插入。
这是一些测试代码:
#!/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'?
请注意,“L”值在替换模式中仍然是“a”,即使在代码块的其他地方它随着@replacements
?
这是为什么?
我觉得 Perl 突然坏了,或者我失去了理智。
看起来这种 DOS 行为几乎是在 perl 中发生的。