为什么tr/a-z/b/d
会替换perl中的字符a
?是不是要删除a to z
中的所有字符?
$string = 'the cat sat on the mat.';
$string =~ tr/a-z/b/d;
print "$string\n"; # => b b b. Why?
答案 0 :(得分:5)
如果使用
/d
修饰符,则REPLACEMENTLIST始终完全按照指定进行解释。否则,如果REPLACEMENTLIST比SEARCHLIST短,则复制最后一个字符直到它足够长。
由于您使用了/d
修饰符,因此不会扩展REPLACEMENTLIST
。因此,a
会被b
替换,而a-z
匹配的其余字母会被删除,因为REPLACEMENTLIST
中没有任何内容可以替换它们。
如果您在没有/d
修饰符的情况下执行此操作,您将获得预期的行为。它等同于:
tr/a-z/bbbbbbbbbbbbbbbbbbbbbbbbbb/
因为复制。
答案 1 :(得分:4)
搜索列表为a-z
。替换列表为b
。选项/d
已给出。这意味着将a
替换为b
,并删除所有其他没有替换的匹配项。文档here。
答案 2 :(得分:3)
第二个范围比第一个范围短。所以a被b替换,b-z被空字符串替换,因为末尾有额外的d标志。