我通常的'x'用法是:
print("#" x 78, "\n");
将字符串“#”连接78次。但最近我遇到了这段代码:
while (<>) { print if m{^a}x }
以'a'开头打印每一行输入。我理解正则表达式匹配部分(m {^ a}),但我真的不知道'x'在这里做了什么。
任何解释都将不胜感激。
答案 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文档。但是这里似乎多余了