PERL字符串处理
1. 字符串常用操作
a) 字符串长度:
length("aba") 结果:3
b) 查找定位(双向查找):
index("aba", "a") 结果:0 (找不到返回:-1)
rindex("aba", "a") 结果:2 (索引还是正序的)
另有,从指定位置开始查找,往后找index("aba", "a", 2) =2,往前找rindex("aba","a", 2) = 2
c) 获取子字符串:
substr($str, starti, len); 返回从指定索引开始,长为len的子串;
d) 字符串拼接
点号“.”即可,或是双引号也可。
$str = "$a$b$c\n"; 或 str = $a.$b.$c."\n";
e) 字符串替换(非Replace而是substr)
substr($s, starti, len, replacement);
i.e., substr("zhanglianming", 0, 5, "I love ") = "I love lianming"
f) 大小写-uc、lc、ucfirst(字符串首字符大写)、lcfirst
2. 字符串比较函数eq、ne、lt、gt、le、ge、cmp (cmp就好,不要用操作符<=>)
3. 字符串分割-Split
@数组=split(pattern,串),将字符串用给定模式分成多个单词。
i.e.,
$s = "zhang,lian,ming";
@ss = split(/,/, $s);
print "@ss\n"; 输出:zhang lian ming
上为列表环境返回多个单词,若是标量环境:$变量 = split(pattern,串),则结果是单词个数。
4. 字符串数据合并
$str = join(", ", @数组);
i.e.,
@array = qw(a b c);
print join("-", @array); #a-b-c
5. 字符数组内查找
@array = qw(a b a);
列表环境:@res = grep(/a/, @array); #匹配的结果数组,grep功能强大,主要是用来查找具有某种模式的所有元素
标量环境:$count=grep(/a/,@array); #匹配个数,这个可以判断数组内是否有此元素,或是 grep() != NULL
6. 格式化打印-sprintf
$value=1234.56789;
print sprintf "%.4f\n",$value;
7. 重复连接运算符号-x
print"OK"x4; 结果:OKOKOKOK
8. 双引号字符串中的转义符
符号 含义
\n 换行
\r 回车
\t 制表符
\f formfeed
\b 退格
\a 响铃
\e escape(ASCII中的escape字符)
\007 八进制值(这个是07=bell(响铃))
\x7f 十进制值(这个是7f)
\cC 一个控制符(此为ctrl+c)
\\ 反斜线
\" 双引号
\l 下个字符小写
\L 接着的字符均为小写直到\E
\u 下个字符大写
\U 接着的字符均为大写直到\E
\Q 在non-word字符前加上\,直到\E
\E \L,\E和\Q的结束符
9. pack和unpack函数用于字符串的打包和解包,功能非常强大,支持多种打包格式字符串处理的。
pack 把一串数字或文字..打包成一块memory....得到的可能是文字..或binary内容。例如我们要把字串透过socket传到远方..其实Socket内部就有帮忙把ip做pack的动作..