Perl 字符处理函数的用法

发布时间:2020-03-02编辑:脚本学堂
Perl 字符处理函数的用法

本文介绍两个perl字符处理函数,split函数与substr函数的使用。

split函数
Perl中的一个非常有用的函数是Perl split函数-把字符串进行分割并把分割后的结果放入数组中。这个Perl split函数使用规则表达式(RE),如果未特定则工作在$_变量上。

split函数可以这样使用:
 

复制代码 代码如下:
    $info="Caine:Michael:Actor:14,LeafyDrive"; 
    @personal=split(/:/,$info); 

其结果是:@personal=("Caine","Michael","Actor","14,LeafyDrive");

如果我们已经把信息存放在$_变量中,那么可以这样:
 

复制代码 代码如下:
@personal=split(/:/);

如果各个域被任何数量的冒号分隔,可以用RE代码进行分割:
 

复制代码 代码如下:
    $_="Capes:Geoff::Shotputter:::BigAvenue"; 
    @personal=split(/:+/); 

其结果是:@personal=("Capes","Geoff","Shotputter","BigAvenue");

但是下面的代码:
 

复制代码 代码如下:
    $_="Capes:Geoff::Shotputter:::BigAvenue"; 
    @personal=split(/:/); 

的结果是:@personal=("Capes","Geoff","","Shotputter","","","BigAvenue");

这个Perl split函数中单词可以被分割成字符,句子可以被分割成单词,段落可以被分割成句子:
 

复制代码 代码如下:
    @chars=split(//,$word); 
    @words=split(//,$sentence); 
    @sentences=split(/./,$paragraph); 

在第一句中,空字符串在每个字符间匹配,所以@chars数组是一个字符的数组。>>
//之间的部分表示split用到的正则表达式(或者说分隔法则)
s是一种通配符,代表空格
+代表重复一次或者一次以上。
所以,s+代表一个或者一个以上的空格。
split(/s+/,$line)表示把字符串$line,按空格为界分开。
比如说,$line="你好朋友欢迎光临我的博客61dh.com";
split(/s+/,$line)后得到:

substr函数应用

在编写perl程序的时候,我们有时需要截取一个字符串中的部分内容,这个时候通常会使用Perl substr函数实现这个功能。
 

复制代码 代码如下:
    $str="testtest"; 
    printsubstr($str,0,5); 
    $str="testtest"; 
    printsubstr($str,0,5); 

运行上面的程序,输出结果"testt",这个是我们想要的结果。再看看下面的程序:
 

复制代码 代码如下:
    $str="测试文本"; 
    printsubstr($str,0,1); 
    $str="测试文本"; 
    printsubstr($str,0,1);

这时候输出了一个"?",这显然不是我们想要的结果。因为在perl中,所有从外部输入的字符串(包括写在程序里的字符串)都会当成字节来处 理,"printsubstr($str,0,1);"这句话只是把"测试文本"的第一个字节取出来,并且用print输出,然而单个字节是不能表示一个 中文字符的,所以就输出了"?"。

如果想要上面的程序输出正确的结果,就需要使用decode函数把"测试文本"转换成perl内部字符串,让perl把"测试文本"当成字符串来处理,这样再用"substr($str,0,1);"截取的就不是一个字节,而是一个汉字。

substr函数的用法

指令:substr

语法:substr($string,offset,length)
offset代表起始字符的位置,length代表引用的字符串长度,如果省略length则代表从起始值到字符串的最后一个字符长度。而offset如果是负值的话,就会从字符串右边开始指定字符。
示例:
 

复制代码 代码如下:
   $s=substr("perl5",2,2);#这时$s="rl"; 
    $s=substr("perl5",2);#这时$s="rl5"; 
    $s=substr("perl5",-2,2);#这时$s="er";