2011-07-19 98 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