スクリプトの1つでPerl::Criticを実行すると、次のメッセージが表示されます。
Regular expression without "/x" flag at line 21, column 26. See page 236 of PBP.
ここでポリシー情報を調べましたが、拡張モードで正規表現を作成すると、コードを見ている人に役立つことを理解しています。
ただし、/xフラグを使用するようにコードを変換する方法として立ち往生しています。
CPANの例:
# Match a single-quoted string efficiently...
m{'[^\\']*(?:\\.[^\\']*)*'}; #Huh?
# Same thing with extended format...
m{
' # an opening single quote
[^\\'] # any non-special chars (i.e. not backslash or single quote)
(?: # then all of...
\\ . # any explicitly backslashed char
[^\\']* # followed by an non-special chars
)* # ...repeated zero or more times
' # a closing single quote
}x;
これは、正規表現だけを見る場合に意味があります。
私のコード:
if ($line =~ /^\s*package\s+(\S+);/ ) {
ifステートメント内で拡張正規表現を使用する方法が正確にはわかりません。私はそれをこのように書くことができます:
if (
$line =~ /
^\s* # starting with zero or more spaces
package
\s+ # at least one space
(\S+) # capture any non-space characters
; # ending in a semi-colon
/x
)
{
そして、これは機能しますが、これはオリジナルよりもほとんど読みにくいと思います。これを書くためのより良い方法(またはベストプラクティスの方法)はありますか?qr//を使って変数を作成できると思います。
私はこの特定の正規表現を書き直すことについてのアドバイスを本当に探していません(ただし、改善できる場合はアドバイスを受け取ります)-ifステートメント内で正規表現を拡張する方法についてのアドバイスをもっと探しています。
Perl :: Criticは単なるガイドラインですが、それに従うとよいでしょう。
前もって感謝します!
編集: いくつかの回答を受け取った後、コメント付きの正規表現を複数行にする必要は必ずしもないことがわかりました。基本的な正規表現を理解している人は、私の例が何をしているかを理解できるはずです。私が追加したコメントは、おそらく少し不必要で冗長でした。拡張正規表現フラグを使用するというアイデアは気に入っていますが、正規表現の各部分をもう少し明確にするために、正規表現にスペースを埋め込みます。すべての入力をありがとう!