2011-07-19 67 views
1

下面的Perl正则表达式修饰符有什么作用?Perl的正则表达式修饰符

/o 

例如,

$string =~ /foo\(\"([^\)]*)\"\)/o) 

什么是/o是什么意思?

+5

检查[这里](http://stackoverflow.com/questions/550258/does-the-o-modifier-for-perl-regular-expressions-still-provide-any-benefit)更多的讨论关于'/ o'修饰符。 – dave

回答

5

正则表达式的/ o选项(记录在perlop和perlreref中)告诉Perl仅编译一次正则表达式。这只在模式包含变量时才有用。如果模式没有改变,Perls 5.6和更高版本会自动处理它。

source

5

绝对没有!

它会影响插值,并且没有任何内容插入到该模式中。

如果有插入的东西,/ o会导致插值只发生一次,无论匹配运算符执行多少次。

>perl -E"for (['o','foo'],['a','bar'],['e','neo']) { 
    my ($pat, $s) = @$_; say $s =~ /$pat/ ? $& : 0 }" 
o 
a 
e 

>perl -E"for (['o','foo'],['a','bar'],['e','neo']) { 
    my ($pat, $s) = @$_; say $s =~ /$pat/o ? $& : 0 }" 
o 
0 
o 
+1

即使有插值,它几乎没有!即使它*做了某事,你可能不希望它!所以使用/ o没有多少意义。 – hobbs

+1

@hobbs,我完全同意。使用qr //好得多。 – ikegami