在使用/ d理解perl tr命令方面需要帮助

时间:2015-06-08 13:15:50

标签: perl translate

我在网上看到了以下Perl示例。

#!/usr/bin/perl 

$string = 'the cat sat on the mat.';
$string =~ tr/a-z/b/d;

print "$string\n";

结果:

b b   b.

有人可以解释一下吗?

2 个答案:

答案 0 :(得分:8)

/d表示delete

这样做tr非常不寻常,因为它令人困惑。

tr/a-z//d

会删除所有' a-z'字符。

tr/a-z/b/ 

会将所有a-z个字符音译为b

这里发生了什么 - 因为你的音译并没有在每一方都映射相同数量的字符 - 地图的任何内容都会被删除。< / p>

所以你有效的做法是:

tr/b-z//d;
tr/a/b/;

E.g。将所有a音译为b,然后删除其他任何内容(空格和点除外)。

举例说明:

use strict;
use warnings;
my $string = 'the cat sat on the mat.';
$string =~ tr/the/xyz/d;

print "$string\n";

警告:

Useless use of /d modifier in transliteration operator at line 5.

并打印:

xyz cax sax on xyz max.

如果您将其更改为:

#!/usr/bin/perl 
use strict;
use warnings;
my $string = 'the cat sat on the mat.';
$string =~ tr/the/xy/d;

print "$string\n";

你得到了:

xy cax sax on xy max.

因此:t - &gt; xh - &gt; ye只是被删除了。

答案 1 :(得分:3)

d用于删除已找到但未替换的字符。

要删除不在匹配列表中的字符,可以将d附加到tr运算符的末尾。

#!/usr/bin/perl 

my $string = 'my name is serenesat';
$string =~ tr/a-z/bcd/d;
print "$string\n";

打印:

 b  b

删除字符串中不匹配的字符,仅替换匹配的字符(a替换为b)。