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

答えて

6

これは、Perlに式を1回だけコンパイルするように指示します。 What is /o really for?を参照してください。

5

正規表現の/ oオプション(perlopとperlrerefで説明)は、正規表現をコンパイルするようにPerlに指示します。これは、パターンに変数が含まれている場合にのみ有効です。 Perls 5.6以降では、パターンが変更されない場合は自動的にこれを処理します。

source

5

絶対に何もありません!

補間に影響し、そのパターンには何も補間されません。

何か補間されている場合、/ oは、マッチ演算子が何回実行されても、補間を1回だけ発生させます。より多くの議論のための

>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