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

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

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

我们是否希望有解决此问题的方法?还是我必须反复使用 s 运算符并进行大量繁琐的替换?

预先感谢您的任何指导:)

最佳答案

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

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";

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

关于perl - 我可以使用 y 运算符在 Perl 中进行非一对一音译吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1837814/

10-09 18:53