■2010-10-22
* [Perl] 5.13.6で
あんまり役に立つとは思えないですが、昨日ツイートしたことを改めて書いておこうかと。Perl 5.13.6(宮川さんリリースなのですね!)の変更に、正規表現に関するものがいくつかあって、その影響で今まで想定した動作やテストがこけたりするかも、という話です。いままでは
print qr/foo/; # => (?-xism:foo) print qr/foo/i; # => (?i-xsm:foo)だったのが、5.13.6から
print qr/foo/; # => (?^:foo) print qr/foo/i; # => (?^i:foo)
になると(というか今回-xism
を意味する'(?^:'
という表記が出来るようになり、文字列化もこれで表現するようになった)。
私はあるモジュール内においてqr演算子でつくった正規表現$re
を間違えて/[$re]/
で使ってしまってて(括弧内で文字列に展開されるので予期せぬものになる)、ところが、これがたまたまテストに通ってしまっていました。そして今回の変更で展開される文字列が変わったためテストにこけました。そもそも間違ったコードだったのでこの場合Perlの変更は直接関係ないのですが、正規表現を文字列化して比較することを前提としたコードには影響がある、ということでここにメモしておきます。CPANモジュールでは事前にテストにこけたものに対してAndreas Koenig氏が知らせてくれてます。参考:#78008: Bleadperl fb85c04 (?^...) breaks CPAN