我通常的'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'在这里做了什么.
任何解释将不胜感激.
第一种情况下的"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)
在这个用例中,'x'是一个正则表达式修饰符,它"通过允许空格和注释来扩展你的模式的易读性." 根据perl文档.然而,这里似乎多余