[Perl] /PATTERN/o

いぜん書いた PersistentPerl(SpeedyCGI) をお客様のアプリでテストし始めたのですが、ある部分でエラーが発生する事がわかり調査しました。

調べて行くうちに if (/PATTERN/os) というマッチングが2回目以降 正しく動作してないようです。 このマッチングに付いているオプションですが、 s は良く使う 「Treat string as single line.」ですが、 o は初めてみました。

マニュアルを見てみると、「Compile pattern only once.」 とありました。


問題解決です !!

PersistentPerlは プロセスが常駐するので、最初に行われたマッチングの正規表現が(コンパイルされた形で)そのまま2回目も動くの 正規表現中に 変数 などがあると、2回目以降は正しく動作しない事があります。