LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1128|回复: 4

关于tr///运算符的一个问题?

[复制链接]
发表于 2004-5-1 14:30:04 | 显示全部楼层 |阅读模式

  1. $text="abcdef sdf ";
  2. $text=~tr/a-z/A-Z/;
  3. print $text ."\n";
复制代码

结果:
ABCDEF SDF
这个好理解,就是把小写字符转换成大写字符,而且是一一对应的.如果这样:

  1. $text="abcdef sdf ";
  2. $text=~tr/a-z/0-9/;
  3. print $text ."\n";
复制代码

结果:
012345 935
这是为什么?
ps:初学perl,感觉tr///很想unix的tr命令
发表于 2004-5-1 14:58:41 | 显示全部楼层
怎么找到tr 的解释呀??没有手册好难学,大家请原谅,我没买有什么书!!:eek::eek:
发表于 2004-5-1 17:46:29 | 显示全部楼层
这个问题我遇到过,按照Perl的定义,在tr///操作符中,如果替代字符集的个数少于原字符集时,将复制替代字符集中最后一个字符,直到与原字符集长度相等,所以,你定义的字符集会变成这个样子:
abcdefghijklmnopqrstuvwxyz
01234567899999999999999999
事实上,从j开始,全部都被替换为9了。
 楼主| 发表于 2004-5-1 23:23:31 | 显示全部楼层
最初由 ZenInPalm 发表
这个问题我遇到过,按照Perl的定义,在tr///操作符中,如果替代字符集的个数少于原字符集时,将复制替代字符集中最后一个字符,直到与原字符集长度相等,所以,你定义的字符集会变成这个样子:
abcdefghijklmnopqrstuvwxyz
01234567899999999999999999
事实上,从j开始,全部都被替换为9了。

呵呵,这样的解释有些勉强吧~~~:thank
发表于 2004-5-2 09:44:33 | 显示全部楼层
这个解释可不勉强,因为tr///就是这么规定的。
而如果在tr///后面加上修饰词d,它就会把多余的字符删掉。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表