|
![]() | 作者: xingguojun [xingguojun]
![]() |
登录 |
#!usr/bin/perl $string="this is a string"; @array=split(//,$string); foreach(@array){ if($_ne"a"){ $upcase=ork($_)&0xdf; $string2.=chr($upcase); }else{ $string2.=$_; } } 请问:我看书上说 在ascii表中,大写字符的区别在于第六位,小写字符的第六位是1,而对就大写字符的第六位是0。所以将小写字符用ord函数转换成数字,然后将该数字第六位转 换成0。最后将数字用chr函数转换字符,于是得到对应的大写字符。 请问那位perl高手能给我讲一下,上面到底说的是什么意思呀$_这个perl内置函数到底是做什么的呀?十分的感 谢您!!! |
地主 发表时间: 04/23 21:53 |
![]() | 回复: xingguojun [xingguojun] ![]() |
登录 |
我知道了!~ |
B1层 发表时间: 04/25 15:24 |
![]() | 回复: aoming [aoming] ![]() |
登录 |
首先要说的是你的脚本有错。 #!usr/bin/perl $string="this is a string"; @array=split(//,$string); #把字符串this is a string用split去掉空格(你的那个脚本中匹配少了空格 split(/这里有个空格/,$string) foreach(@array) #然后分别把this、is、a、string当作数组@array中的元素。这里foreach(@array)的完整写法其实应该是foreach $_(@array), { if($_ne"a"){ $upcase=ork($_)&0xdf; #(ork改为ord;$_和ne之间要有空格)这里没看懂&0xdf是什么意思,&也许在这里是位与的运算符,我数学学的猪,还不懂位与,so这里丢丑了。。而0xdf显然是个16进制数,我转换了一下,其值为223 $string2.=chr($upcase); #这里再用chr将ASCII的数值转换为相应的字符,如果&0xfd是与转换字符的ASCII值为大写的ASCII有关,那么可以猜测这个小脚本的目的是将一个字符的小写字母A转换为大写字母A }else{ $string2.=$_; } } #用.连接$string2 改好一些表达上的错误后,再脚本最后加了个输出print $string2;调试运行,最终得到这个输出效果: TIaS 因此,整个脚本是将字符串的每个单词的首写转换成大写,如果遇到字母a,忽略处理。结果还说明&0xfd实现的确实是预先猜想的。整个小脚本是让人熟悉一些基本的标量转换操作,可惜关键的位与部分我却不懂,至于位与的运算,还请朋友们赐教。 $_ perl的预定义变量,或者说内部变量,perl语言预先设置好在缺省状态下默认要找的变量 类似的还有 $ARG、@_、%ENV等等 参考,不过看起来很头痛,是E文:( http://www.20cn.org/~aoming/wdzl/PerlLesson/perlmanual/perlvar.html#perlvar_name_0 ok,其实perl里有大小写字母转换的函数,lc()、uc()、lcfirst()、ucfirst()都可以实现。 |
B2层 发表时间: 04/25 18:41 |
![]() | 回复: aoming [aoming] ![]() |
登录 |
哦,还差点忽略了说,那个#!usr/bin/perl中感叹号改成小写。另外就是请以后发表主题时,将标题描述清楚。 |
B3层 发表时间: 04/25 18:42 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号