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/