そんなことはありまおんせん。
101号室: [perl][unicode] RLOの除去utf8フラグがあると単純に正規表現で消せなくなるので、一時的にフラグを外す
以下、デモ。LROやRLOは例えばOS X の Terminal.appも対応しています。
use strict; use warnings; use utf8; my $LRO = chr 0x202D; # Unicode: LEFT-TO-RIGHT OVERRIDE my $RLO = chr 0x202E; # Unicode: RIGHT-TO-LEFT OVERRIDE my $hello = 'Hello, world!'; local $\="\n"; binmode STDOUT, ':utf8'; my $str = $RLO . $hello . $LRO . $hello; print $str; print length($str); $str =~ tr/\x{202D}\x{202E}//d; print $str; print length($str);
単純に文字を消すのであれば、上のtr
を使った方法がぐー。Regexpより高速です。ちなみにPerl 5.8.0にはこのtr/\x{10000}-\x{10FFFF}//
などのレンジ指定がきちんと解釈されないバグがありましたが、5.8.1以降直っています。安心してご利用ください。
Dan the Perl Monger
バイト列としてではなく文字列として扱え、ということでしょうか
trを使わなかったのは抜けていました・・・
ご指摘ありがとうございました