Encode 2.30 2.31 を Release したのでお知らせします。
- /lang/perl/Encode/trunk - CodeRepos::Share - Trac
- Dan Kogai / Encode - search.cpan.org
- http://www.dan.co.jp/~dankogai/cpan/Encode-2.31.tar.gz
変更はそれほどありません。
$Revision: 2.31 $ $Date: 2009/02/16 06:18:09 $ ! lib/Encode/MIME/Header.pm "Revert [29767] and [29771] since it breaks perl 5.8" by miyagawa http://coderepos.org/share/changeset/30111 2.30 2009/02/15 17:44:13 ! encoding.pm fixed regexes, et cetera. by drry http://coderepos.org/share/changeset/29767 ! lib/Encode/MIME/Header.pm Addressed: Encode::MIME::Header::decode should respect CHECK http://rt.cpan.org/Ticket/Display.html?id=43204 http://coderepos.org/share/changeset/29767
drryさん、ありがとうございました。が、一つだけお願い。//は使わないで下さい。Perl 5.8ではサポートしていないので。||と置き換えました。この場合はそれでOKなので。
....ごめん。//の出所はこっちの方でした。
mergeするときにこんがらがっちゃいました。
Dan the Encode Maintainer
追記[同日16:00]:
MIYAGAWA reportsThis change made Encode/MIME/Header.pm not compile on 5.8. Reverted. http://coderepos.org/share/changeset/30111 Ship 2.31 with the trunk :(
ぎゃああ、なんてこったい。というわけで2.31をreleaseしたのですが、問題となったのはたった一つの+でした。
--- lib/Encode/MIME/Header.pm 2009/02/15 17:44:13 2.8
+++ lib/Encode/MIME/Header.pm 2009/02/16 06:18:13
@@ -100,7 +100,7 @@
my $re_encoded_word = qr{
=\? # begin encoded word
(?:[-0-9A-Za-z_]+) # charset (encoding)
- (?:\*[A-Za-z]{1,8}+(?:-[A-Za-z]{1,8})*)? # language (RFC 2231)
+ (?:\*[A-Za-z]{1,8}(?:-[A-Za-z]{1,8})*)? # language (RFC 2231)
\?(?:[QqBb])\? # delimiter
(?:.*?) # Base64-encodede contents
\?= # end encoded word
ちょっと調べてみると....
% perl5.10.0 -le 'print "perl" =~ /^\w{1,8}+$/'
1
% perl5.8.8 -le 'print "perl" =~ /^\w{1,8}+$/'
Nested quantifiers in regex; marked by <-- HERE in m/^\w{1,8}+ <-- HERE $/ at -e line 1.
というわけで、Perl 5.10.0 の bug を偶然にも踏んでいたようです。bleedperlとmaintperlでもチェックしてみようとしたら、現在の revision がどっちもコンパイルしない....
regexp - possessive quantifier (独占的|絶対最大)量指定子とは何か?
http://blog.livedoor.jp/dankogai/archives/51178734.html
> ちがうよ!バグじゃないよ!
> - (?:\*[A-Za-z]{1,8}+(?:-[A-Za-z]{1,8})*)? # language (RFC 2231)
> + (?:\*[A-Za-z]{1,8}(?:-[A-Za-z]{1,8})*)? # language (RFC 2231)
これって、いつものノリで「一つ以上」という感覚で + 付けちゃた感じでしょうか。
RFC2231 → RFC1766 とか辿ったあたりで力尽きましたけど、{1,8}ぐらいの幅なら
絶対最大量指定子(possessive quantifier)を使う場面でもなさそう、と思いました。