我在我的一个脚本上运行了 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 只是一个指导方针,但最好遵循它。
提前致谢!
编辑: 所以在收到一些答案后,我很清楚,并不总是需要使用带有注释的正则表达式多行。了解基本正则表达式的人应该能够理解我的示例在做什么——我添加的评论可能有点不必要和冗长。我喜欢使用扩展正则表达式标志的想法,但仍然在正则表达式中嵌入空格以使正则表达式的每个部分更加清晰。感谢所有的投入!