我在网上看到了以下Perl示例。
#!/usr/bin/perl
$string = 'the cat sat on the mat.';
$string =~ tr/a-z/b/d;
print "$string\n";
结果:
b b b.
有人可以解释一下吗?
答案 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; x
和h
- &gt; y
。 e
只是被删除了。
答案 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
)。