ゆうすけさん、いつも詳細なレビューありがとうございます。
[Perl] Encode::FB_XMLCREFでコード変換に失敗&対策 ゆうすけブログ /ウェブリブログFB_XMLCREF が利用できないバージョンが確認できました。
が、ちょっと事実誤認があるので。
これ、単に、
- 2.12までEncode::from_to($str, $from, $to, $check)は、decode()の時にもencode()を$checkの値を使っていたが、
- 2.13以降では、encode()時にのみ$checkの値を適用する
という仕様変更に伴うものです。これのきっかけは、miyagawa君からの報告でした。
ふたたび Encode の件で。
utf-8 あるいは latin-1 が含まれてい string をとってきて、すべて utf-8 にエンコードしなおす、というコードを書きたいんですが、
Encode::decode("utf-8", "bar\xe0foobar", sub { warn $_[0] })みたいなことをすると$Result = 'baràfoobar'; $Result = 'bar'; Modification of a read-only value attempted at /usr/local/lib/perl5/5.8.7/i686-linux-thread-multi-64int/Encode.pm line 167.など、動作が不定になるようです。
これを期に、Encode 2.13以降ではfrom_toのfromの段階、すなわちdecodeの際にはcheckせずとにかくutf8化し、toの段階にあたるencodeの際にcheckを適用するという風にしたのですが、その結果、FB_(PERLQQ|HTMLCREF|XMLCREF)のFBが不要になったのです。
[Perl] Encode::FB_XMLCREFでコード変換に失敗&対策 ゆうすけブログ /ウェブリブログ2.10〜2.12 の間も、FB_XMLCREF を使わずに 0x0400 と直打ちすれば
この0x400こそ、FB_のついていないEncode::XMLCREFの値です。ですから、決め打ちせず、
my $check = ( $Encode::VERSION < 2.13 ) ? Encode::FB_XMLCREF() : Encode::XMLCREF();
としていただければ幸いです(向きにも注意!古い方がFB_が必要な方です)。
あと、
CPAN にはない旧バージョンのアーカイブは、弾さんのサイト↓にありました。
http://www.dan.co.jp/~dankogai/cpan/
(ありがとうございます〜!!)
ですが、こちらは有名なBACKPAN
- BACKPAN
- http://backpan.cpan.org/
- DANKOGAI@BACKPAN
- http://backpan.cpan.org/modules/by-authors/id/D/DA/DANKOGAI/
を利用した方が賢明でしょう。
以上取り急ぎ
Dan the Encode Maintainer
このブログにコメントするにはログインが必要です。
さんログアウト
この記事には許可ユーザしかコメントができません。