在perl中使用时髦的'x'

OMG*_*uts 5 perl

我通常的'x'用法是:

print("#" x 78, "\n");
Run Code Online (Sandbox Code Playgroud)

其中连接字符串"#"的78倍.但最近我遇到了这段代码:

while (<>) { print if m{^a}x }
Run Code Online (Sandbox Code Playgroud)

以'a'开头打印每一行输入.我理解正则表达式匹配部分(m {^ a}),但我真的不知道'x'在这里做了什么.

任何解释将不胜感激.

sep*_*p2k 18

它是正则表达式的修饰符.该x修饰符告诉Perl忽略空格和注释,正则表达式中.

在您的示例代码中,它没有区别,因为正则表达式中没有空格或注释.


vol*_*ron 6

第一种情况下的"x"是一个重复运算符,它将字符串作为左参数,重复次数作为右参数.Perl6可以使用"xx"重复运算符复制列表.

您的第二个示例使用正则表达式m{^a}x.虽然您可以使用许多不同类型的分隔符,但新手可能喜欢使用熟悉的符号,它使用正斜杠:m/^a/x

正则表达式中的"x"称为修饰符或标志,它只是可以使用的许多可选标志之一.它用于忽略正则表达式模式中的空格,但它也允许在里面使用常规注释.因为正则表达式模式可能会变得非常冗长和令人困惑,所以使用空格和注释非常有用.

你的例子非常简短(如果该行的第一个字母以"a"开头,则表示你可能不需要空格或评论,但如果你愿意的话,你也可以.)


例:

m/^a     # first letter is an 'a'  
         # <-- you can put more regex on this line because whitespace is ignored
         # <-- and more here if you want
 /x
Run Code Online (Sandbox Code Playgroud)


bjg*_*bjg 5

在这个用例中,'x'是一个正则表达式修饰符,它"通过允许空格和注释来扩展你的模式的易读性." 根据perl文档.然而,这里似乎多余

  • @clintp:和冗余(意思是"不必要")和不必要的区别是什么? (3认同)
  • 不是"多余的",而是"不必要的". (2认同)