3

Perl 中的 y 运算符进行逐个字符的音译。例如,如果我们对字符串“foobar”执行 y/abc/dfg,我们会得到“fooofdr”。但是,如果我想将“ā”音译为“ei”,将“ä”音译为“a:”,将“ō”音译为“әu”,将“o”音译为“ɒ”,该怎么办。

我尝试了以下代码行但没有运气:(

y/āäōo/(ei)(a:)(әu)ɒ/

我们希望有解决这个问题的方法吗?还是我必须重复使用 s 运算符并做很多繁琐的替换?

提前感谢您的任何指导:)

4

2 回答 2

14

在这种情况下,创建一个哈希并轻松地从键到字符串。

use warnings;
use strict;
use utf8;
binmode STDOUT, ":utf8";
my $string = "āäōo";
my %trans = qw/ā ei ä a: ō u o ɒ/;
my $keys = join '', keys %trans;
$string =~ s/([$keys])/$trans{$1}/g;
print "$string\n";

如果您的键长度超过一个字符,您需要通过按长度递减的顺序对键进行排序并使用( | | )而不是连接它们来更改此设置[ ]

于 2009-12-03T05:25:26.970 回答
0

听起来您正在尝试做类似于Text::Unaccent::PurePerl的事情。

于 2009-12-03T16:54:57.630 回答