在perl中使用时髦的'x'

时间:2010-06-30 14:28:12

标签: perl

我通常的'x'用法是:

print("#" x 78, "\n");

将字符串“#”连接78次。但最近我遇到了这段代码:

while (<>) { print if m{^a}x }

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

任何解释都将不胜感激。

3 个答案:

答案 0 :(得分:18)

这是正则表达式的修饰符。 x修饰符告诉perl忽略正则表达式中的空格和注释。

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

答案 1 :(得分: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

答案 2 :(得分:5)

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