Perl split字符串分割函数用法指南

 更新时间:2013年02月09日 17:45:49   作者:  
本文向大家简单介绍一下Perl split函数的用法,Perl中的一个非常有用的函数是Perl split函数-把字符串进行分割并把分割后的结果放入数组中

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

Perl split函数

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

Perl 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="你好朋友欢迎光临我的网站jb51.net";
split(/\s+/,$line)后得到:
你好朋友欢迎访问我的网站jb51.net

一般用法: @somearray = split(/:+/, $string ); #括号可以不要。  若不指定$string, 则对默认变量$_操作, 两斜线间为分割符,可以用正则表达式,强悍异常。

在perl手册里,有一个用法不多见。即: split /PATTERN/, EXPR, LIMIT;  关键就是这个LIMIT参数,可以节省不少事情。 如果使用了LIMIT,且是正数,表示分割成不多于LIMIT指定的数目的域。If LIMIT is unspecified or zero, trailing null fields are stripped (which potential users of pop would do well to remember). If LIMIT is negative, it is treated as if an arbitrarily large LIMIT had been specified. Note that splitting an EXPR that evaluates to the empty string always returns the empty list, regardless of the LIMIT specified.

通过制定LIMIT,可以在很长(分割产生几万个元素or域)的行分割操作中,只返回关键的前几列的域值,减少了内存使用及时间消耗。比如一般的基因型数据,第一列通常是材料命名,需要通过材料名的判断取舍,这时候就可以这样用。 my ($firstfield) = split /\t/, $someline, 1;  如果需要前面几列的值,这样的方式对大文件效率很好: my (undef, $var1, undef, undef, undef, $var2)=split /\t/, $someline, 6;

有网友对这种方式做了测试,显示较好。引用如下:
>>>
一个文件,每行都有18项,各项之间用\t分割,使用时用到了第6项,折腾了几种用法

复制代码 代码如下:

my @array = split("\t",$_); my $var = $array[6];   测试文件平均用时8.2s
 my($var) = (split("\t",$_))[6];  测试平均用时5.1s
 my(undef,undef,undef,undef,undef,undef,$var) = split("\t",$_); 平均用时3.53s
 my(undef,undef,undef,undef,undef,undef,$var) = split("\t",$_,7);平均用时3.52s
 my $var = (split("\t",$_,7))[6]; 平均用时3.53s

看来后3种才是王道,如果需要使用多项也可以进行进行适当的变动。不过两项如果跨度比较大,3,4应该是不错选择,5就只能用中间数组。

自己动手测试下吧。

相关文章

  • Perl文件读取的经典用法分享

    Perl文件读取的经典用法分享

    Perl文件读取的经典用法,有需要的朋友可以参考下
    2013-02-02
  • perl 中的or与||的区别

    perl 中的or与||的区别

    or比||优先级低,除此之外,两者无区别
    2013-02-02
  • Windows10下安装配置 perl 环境的详细教程

    Windows10下安装配置 perl 环境的详细教程

    Perl 最重要的特性是Perl内部集成了正则表达式的功能,以及巨大的第三方代码库CPAN。这篇文章主要介绍了Windows10下安装配置 perl 环境的详细教程,需要的朋友可以参考下
    2020-12-12
  • 求婚示爱的Perl代码之注释篇

    求婚示爱的Perl代码之注释篇

    Deparse 模块是一个很好的打印机,它可以揭开 Perl 代码神秘的面纱,帮助你理解优化器为你的代码做了那些转换。换言之,它会重新生成Perl代码,试着略去一些晦涩难懂的部分,把代码用一致的格式写出来
    2013-03-03
  • Perl 和 StrawberryPerl 与 ActivePerl 的区别详解

    Perl 和 StrawberryPerl 与 ActivePerl 的区别详解

    这篇文章主要介绍了Perl 和 StrawberryPerl 与 ActivePerl 的区别详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • Perl实现高水线算法(解决多值比较问题方法)

    Perl实现高水线算法(解决多值比较问题方法)

    这篇文章主要介绍了Perl实现高水线算法(解决多值比较问题方法),从本文代码示例中还可以学习到数组遍历、函数写法、函数调用等知识,需要的朋友可以参考下
    2015-06-06
  • Perl实现遍历目录例子

    Perl实现遍历目录例子

    这篇文章主要介绍了Perl实现遍历目录例子,本文示例运行在Windows系统下,而且需要gbk编码,需要的朋友可以参考下
    2014-12-12
  • 将Perl5代码迁移到Perl6上的解决方案

    将Perl5代码迁移到Perl6上的解决方案

    今天小编就为大家分享一篇关于将Perl5代码迁移到Perl6上的解决方案,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • Perl中的真与假深入研究

    Perl中的真与假深入研究

    这篇文章主要介绍了Perl中的真与假深入研究,本文详细讲解了Perl中真值与假值的不同,需要的朋友可以参考下
    2015-06-06
  • cpan安装Net::SSH::Perl中遇到的一些问题

    cpan安装Net::SSH::Perl中遇到的一些问题

    cpan安装Net::SSH::Perl中遇到的一些问题,需要的朋友可以参考下
    2013-02-02

最新评论