代码之家  ›  专栏  ›  技术社区  ›  OMG_peanuts

Perl中的时髦“x”用法

  •  5
  • OMG_peanuts  · 技术社区  · 16 年前

    我常用的“x”用法是:

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

    它连接78倍的字符串“”。但最近我遇到了这个密码:

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

    打印以“A”开头的每一行输入。我了解regexp匹配部分(m ^a),但我真的不知道“x”在这里做什么。

    任何解释都将不胜感激。

    3 回复  |  直到 15 年前
        1
  •  18
  •   sepp2k    16 年前

    它是regex的修饰符。这个 x 修饰符告诉Perl忽略regex中的空白和注释。

    在示例代码中,由于regex中没有空格或注释,所以它没有任何区别。

        2
  •  6
  •   vol7ron    16 年前

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

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

    regex中的“x”称为修饰符或标志,但它只是可以使用的许多可选标志之一。它用于忽略regex模式中的空白,但也允许在内部使用普通注释。因为regex模式会变得非常长和混乱,所以使用空白和注释非常有用。

    您的示例非常简短(它所说的只是行的第一个字母以“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
    
        3
  •  5
  •   bjg    16 年前

    在这个用例中,“x”是一个regex修饰符,它“通过允许空白和注释来扩展模式的易读性”。但是这里似乎是多余的