<p>您似乎对<code>=~</code>的工作方式有误解。<code>=~</code>是一个绑定运算符,它将变量与regexp运算符相关联。它不做任何赋值。在</p>
<p>默认情况下,regexp操作符都与主题变量<code>$_</code>一起工作,因此<code>s/foo/bar/;</code>与{<cd5>}相同。不进行赋值。主题变量被转换。在</p>
<p>当操作任何其他变量时,情况类似。<code>$var =~ s/foo/bar/;</code>通过将<code>foo</code>的第一个实例替换为<code>bar</code>来转换<code>$var</code>。不进行赋值。在</p>
<p>我能给你的最好建议是用Python编写Python,用Perl编写Perl。别指望这两种语言是一样的。在</p>
<p>你可以像DVK建议的那样,编写一个子程序来重现你习惯的替换行为。在</p>
<p>或者您可以尝试一些惯用的Perl。基于您表达的在一行中应用多个转换的愿望,我提供了几个您可能会觉得有用的示例。在</p>
<p>在这里,我在一个项目上使用<code>for</code>循环来主题化<code>$var</code>并应用许多硬编码转换:</p>
<pre><code>for( $var ) {
s/foo/bar/;
s/fizz/buzz/;
s/whop/bop-a-loo-bop/;
s/parkay/butter/;
s/cow/burger/;
}
</code></pre>
<p>或者可能需要应用一组可变的变换。我定义了一个子例程来遍历定义旧/新转换对的数组引用列表。这个例子利用Perl面向列表的参数处理来处理任意数量的转换。在</p>
^{pr2}$
<p>最后提供了一个修改其第一个参数的transform版本:</p>
<pre><code>my $foo = 'abcd';
transform_in_place(
$foo =>
[ 'a', 'b' ],
[ 'bb', 'c' ],
[ 'cc', 'd' ],
[ 'dd', 'DONE' ],
);
print "$foo\n";
sub transform_in_place {
for my $i (1..$#_ ) {
my ($old, $new) = @{$_[$i]};
$_[0] =~ s/$old/$new/;
}
}
</code></pre>
<p>对于我自己的项目,我可能会根据特定问题的需要使用前两个选项中的一个。在</p>