regex - qr() 的输出何时以及为何发生变化?

标签 regex perl

perl 的输出 qr已经改变了,显然在 5.10.1 和 5.14.2 之间的某个时候,并且改变没有记录 - 至少没有完全记录。

要演示更改,请在每个版本上执行以下单行:

perl -e 'print qr(foo)is."\n"'

perl 5.10.1-17squeeze6 的输出(Debian 挤压):
(?-xism:foo)

perl 5.14.2-21+deb7u1 (Debian wheezy) 的输出:
(?^:foo)

perl 文档( perldoc perlop )说:

$rex = qr/my.STRING/is;
print $rex; # prints (?si-xm:my.STRING)
s/$rex/foo/;



这似乎不再是真的:
$ perl -e 'print qr/my.STRING/is."\n"'
(?^si:my.STRING)

我想知道此更改何时发生(哪个版本的 Perl,或支持库或其他什么)。

一些背景,以防万一:

此更改导致大量单元测试失败。我需要决定是否应该简单地更新单元测试以反射(reflect)新格式,或者使测试足够动态以支持两种格式等。为了做出明智的决定,我想了解为什么会发生变化。了解事件发生的时间和地点似乎是调查的最佳起点。

最佳答案

它记录在 perl5140delta 中:

Regular Expressions

(?^...) construct signifies default modifiers

[...] Stringification of regular expressions now uses this notation. [...]

This change is likely to break code that compares stringified regular expressions with fixed strings containing ?-xism.



函数 regexp_pattern 可用于解析修饰符以进行规范化。

关于regex - qr() 的输出何时以及为何发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20348491/

相关文章:

正则表达式如何匹配除空行以外的所有行尾?

python - 通过一组字符串将字符串拆分为列表

mysql:最好的说法是 "the string up to the first instance of any of the following keywords"?

javascript - 防止计算字段出现多个小数点

perl - 如何使用 Perl 连接到 SQL Server?

perl - 您使用哪个版本的 Perl?

java - 正则表达式仅获取键值对并省略一些字符

linux - "perl -n"时跳行

python - Perl 相当于 Python 的散列(或 Java 的 hashCode)函数?

perl - 构建 perl 模块出现图元文件错误