如何获取perl(s/)的替换文本?

如何获取perl(s/)的替换文本?,perl,substitution,Perl,Substitution,我使用以下代码进行替换。有没有办法检索被替换的文本?在本例中,我想获取字符串_5p_outsuffix.txt 检查与正则表达式相关的变量部分,特别是变量$&检查与正则表达式相关的变量部分,特别是变量$&您应该捕获匹配字符串: $filename =~ s/($insuffix)$/qq{"$outsuffix"}/ee; print "$filename\n"; print "Substituted: $1\n"; 由于这引入了额外级别的大括号,因此必须调整替换字符串中使用的任何捕获的数量。

我使用以下代码进行替换。有没有办法检索被替换的文本?在本例中,我想获取字符串_5p_outsuffix.txt


检查与正则表达式相关的变量部分,特别是变量$&

检查与正则表达式相关的变量部分,特别是变量$&

您应该捕获匹配字符串:

$filename =~ s/($insuffix)$/qq{"$outsuffix"}/ee;
print "$filename\n";
print "Substituted: $1\n";
由于这引入了额外级别的大括号,因此必须调整替换字符串中使用的任何捕获的数量。或者,您可以使用/p修饰符创建内置的${^MATCH}变量,该变量包含最后一个成功的正则表达式匹配的字符串。这看起来像

$filename =~ s/$insuffix$/qq{"$outsuffix"}/eep;
print "$filename\n";
print "Substituted: ${^MATCH}\n";
为此,您不应使用$&因为它会使程序中的所有正则表达式速度大大降低。

您应该捕获匹配字符串:

$filename =~ s/($insuffix)$/qq{"$outsuffix"}/ee;
print "$filename\n";
print "Substituted: $1\n";
由于这引入了额外级别的大括号,因此必须调整替换字符串中使用的任何捕获的数量。或者,您可以使用/p修饰符创建内置的${^MATCH}变量,该变量包含最后一个成功的正则表达式匹配的字符串。这看起来像

$filename =~ s/$insuffix$/qq{"$outsuffix"}/eep;
print "$filename\n";
print "Substituted: ${^MATCH}\n";

您不应该为此使用$&因为它会使程序中的所有正则表达式大大减慢。

如果他已经依赖于$insuffix中的括号,该怎么办?他必须重新索引$1,$2变量。要使用${^MATCH},除了/ee之外,他还需要/p修饰符。关于答案中的最后一个括号,我建议读者查看下面的“性能问题”部分,看看这个问题在多大程度上适用于他们的Perl版本。具体地说,在Perl 5.20.0中,默认情况下启用了一个新的写时拷贝系统,这最终解决了这三个变量的所有性能问题,并使它们可以安全地在任何地方使用。@sundar:因为在野外仍然很少找到5.20版,所以这种情况不太可能发生。记住,您编写的任何东西都可能在某个时候在一个非常旧的Perl版本下运行在一个完全不同的系统上,这也是明智的做法?他必须重新索引$1,$2变量。要使用${^MATCH},除了/ee之外,他还需要/p修饰符。关于答案中的最后一个括号,我建议读者查看下面的“性能问题”部分,看看这个问题在多大程度上适用于他们的Perl版本。具体地说,在Perl 5.20.0中,默认情况下启用了一个新的写时拷贝系统,这最终解决了这三个变量的所有性能问题,并使它们可以安全地在任何地方使用。@sundar:因为在野外仍然很少找到5.20版,所以这种情况不太可能发生。记住,您编写的任何东西在某个时候都可能在一个非常旧的Perl版本下运行在一个非常不同的系统上,这也是明智的。