在perl中,如何在一次传递中用一组不同的字符替换一组字符?

时间:2012-02-09 19:47:28

标签: perl

鉴于......

Ax~B~xCx~xDx

...发出......

A~-B-~C~-~D~

我想用〜替换〜字符,用〜。

替换x字符

我可以写......

s/~/-/g;s/x/~/g; 

...但是(看起来像)经过两次字符串。

2 个答案:

答案 0 :(得分:14)

根据字符使用“transliterate”进行替换。试试这个:

tr/~x/\-~/;

答案 1 :(得分:2)

由于你正在处理单个字符,tr ///是明显的答案:

tr/~x/-~/;

但是,你需要s ///来处理更长的序列:

my %subs = ( '~' => '-', 'x' => '~' );
my $pat = join '|', map quotemeta, keys %subs;
s/($pat)/$subs{$1}/g;