ActivePerl Build 805のBUG
このページはActivePerl build 805のencoding pragmaを使って
Shift_JIS漢字を読み込むときに正しく認識されない場合があるバグに関するページです。
バグの内容
- Perl 5.8からencoding pragmaを
使うことによってShift_JISを直接扱えるようになりました。例えば
use encoding 'Shift_JIS';
my $str = "あいうえお";
$str =~ s/う/ウ/;
print $str,"\n";
をActivePerl build805で実行すると、「あいウえお」と表示されます。しかし残念ながら
「表」のように2byte目に"\"(\x5C)を含む漢字が、文字列の最終にある場合とか、正規表現の
文字列中にあるとコンパイル時にエラーとなります。また、perlは区切り文字として
アルファベット以外の多くの文字を許しています(例えば、@[]^_`{}|~)からこれらの文字が
漢字の2byte目にあるような場合、エラーになることがあります。
use encoding 'Shift_JIS';
my $str = "出席表"; #error (build 805)
$str =~ s/表/○/; #error (build 805)
$str = qq@ァА@; #error (build 805)
$str =~ s@ァ@А@; #error (build 805)
稲葉浩人氏のパッチと今回使用したパッチ
-
稲葉浩人氏がこのバグを修正するパッチをperl5-porters MLのperl5-porters/2003-02/msg00016に
発表されています。また、このパッチの内Encode moduleに関するものはDan Kogai氏によって
Encode-1.87に取り込まれています。
今回使用したパッチは稲葉浩人氏のものからEncode-1.87に
取り込まれた部分を除いたものです。なお、perl/lib/utf8.tに関する部分はパッチが直接
あたるように書き換えてあります。
バイナリ差分 ap805a.zip(2.8Mbytes)
-
ActivePerl build805のソースのEncode moduleに関するものはEncode-1.87で置き換え、
上記のパッチを当ててWindowsXP&VC++ver6でコンパイル
してみました。上記のエラーは全て解消されております。このActivePerl build 805との
差分をap805a.zipとしてまとめましたので、よろしかったら
お使いください。ap805a.zipをWinzipなどでActivePerl build805をインストールした
ディレクトリ(デフォルトはc:\perl)にdirectory付きで展開してください。perl.exe、
perl58.dllなどのc:\perl\bin配下のファイルとc:\perl\lib以下にあるEncode moduleに
関するファイルが上書きされます。
ActivePerl build806のバイナリ差分は? build805はどこにあるの?
-
現在、ActivePerlの最新版はbuild806になっております。build806に対応するバイナリ差分のmakeを
試みましたが、WindowsXP(+最新パッチ)のもとではmakeに失敗するので、バイナリ差分はありません。
-
ActivePerl build805のバイナリはftp://ftp.activestate.com/ActivePerl/Windows/5.8/に
あります。
テスト
Perl
ホームページ
●
リンクはご自由にどうぞ。問合わせ等の必要はありません。
Last modified: Tue Jun 17 2003
Copyright (C) 2003 SUZUKI Norio, 鈴木紀夫