2012-09-14 40 views
5

Perl的文档状态:如何在Perl正则表达式中使用/ r标志?

e Evaluate 'replacement' as an expression 
r Return substitution and leave the original string untouched. 

在替换模式中使用可用的标志。当我将r标志传递给我的替换模式时,它会被解释为语法错误。我正在运行Perl 5.8.8。有没有可能它在我的Perl版本中不受支持?另外,有人可以提供一个如何使用该标志的工作示例,以及如何调用新创建的替代品?

回答

15

也许你应该阅读5.8.8的文档,然后呢?/r被添加到5.14!

在5.8.8中,您可以使用S ///为r的

do { (my $s = $_) =~ s/foo/bar/; $s } 

用法示例做的

s/foo/bar/r 

相当于:

print "abba" =~ s/b/!/rg;   # Prints a!!a 

my $new = $old =~ s/this/that/r; # Leaves $old intact. 

my $trimmed = $val =~ s/^\s+//r =~ s/\s+\z//r; 
my $trimmed = (($val =~ s/^\s+//r) =~ s/\s+\z//r); # Same as previous 
+0

莫非你显示如何在5.14中调用它。我很困惑它如何返回一个不同的变量,但你仍然必须通知变量来运行它。例如: $ var =〜s/this/that/r; 新变量的保存位置在哪里? – user1671989

+0

@ user1671989,它被返回。 «print'abc“=〜s/b /!/ rg;'»打印«'a!c'»。 – ikegami

+0

所以如果它被返回,我把它叫做 $ var =〜s/this/that/r; 它确实会覆盖$ var? 如何在$ var上运行它并将其返回给$ new_var?对不起,作为一个noob,无法绕过它的头。 – user1671989