cal*_*llo 2 perl performance transliteration processing-efficiency
我有这么长的音译:
$text =~ tr/áà?â?å?ä?ã???????????????ç??????ð????éè?ê?ë????????/aaaaaaaaaaaaaaaaabbbbcccccccccdddddddeeeee/;
# Etc. (About 400 chars)
我想将它分成几个音译,因为生成的代码更容易维护:
$text =~ tr/áà?â?å?ä?ã???????/aaaaaaaaaaaaaaaaa/;
$text =~ tr/????/bbbb/;
$text =~ tr/????ç????/ccccccccc/;
# Etc.
我相信这会让事情变得缓慢,但我想肯定地知道.此过程在非常繁忙的服务器上每秒运行大约1000次.
谢谢.
你可以建立一个音译器:
my %translits = (
   'áà?â?å?ä?ã???????' => 'a',
   '????'              => 'b',
   '????ç????'         => 'c',
);
my $pat  = '';
my $repl = '';
for (keys(%translit)) {
   $pat  .= $_;
   $repl .= $translit{$_} x length($_);
}
my $tr1 = eval "sub { tr/\Q$pat\E/\Q$repl\E/ }" or die $@;
   -or-
my $tr2 = eval "sub { \$_[0] =~ tr/\Q$pat\E/\Q$repl\E/ }" or die $@;
然后像这样使用它:
$tr1->() for $str;
   -or-
$tr2->($str);
当然,你总是可以使用Text :: Unidecode.
| 归档时间: | 
 | 
| 查看次数: | 102 次 | 
| 最近记录: |