2008年7月27日日曜日

今更 Perl 5.6 での UTF-8 フラグ

perl 5.8.0 以降ではそれなりに使える UTF-8 フラグであるが、 perl 5.6.x では邪魔でしかない。 perl 5.6.0 では tr 演算子, 5.6.1 以降では pack, unpack 関数を使って外せるが、それよりも bytes semantics で substr を使って外すほうが圧倒的に速い。5.8 以降に持っていっても utf8::encode と実用上ほぼ互角の速度で、特に問題はなさそう。
use bytes;
$utf8off_str = substr $utf8on_str, 0;
perl 5.6.0 未満でも動いてほしいのであればこうなるかな。
BEGIN { eval { require bytes; bytes->import; }; }
$utf8off_str = substr $utf8on_str, 0;

0 件のコメント: