3

Perl の y 演算子は、文字ごとの音訳を行います。たとえば、文字列 "foobar" に対して y/abc/dfg を実行すると、"foofdr" が得られます。しかし、"ā" を "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";

キーの長さが 1 文字を超える場合は、長さの短い順にキーを並べ替え、( | | )代わりに[ ].

于 2009-12-03T05:25:26.970 に答える
0

Text :: Unaccent::PurePerlに似たようなことをしようとしているようです。

于 2009-12-03T16:54:57.630 に答える