camel

そんなことはありまおんせん。

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