苏州整站优化,营销型网站与普通网站的区别,wordpress 登录空白,网络营销论述题本文和大家重点讨论一下Perl split函数的用法#xff0c;Perl中的一个非常有用的函数是Perl split函数-把字符串进行分割并把分割后的结果放入数组中。这个Perl split函数使用规则表达式#xff08;RE#xff09;#xff0c;如果未特定则工作在$_变量上。 Perl split函数可…本文和大家重点讨论一下Perl split函数的用法Perl中的一个非常有用的函数是Perl split函数-把字符串进行分割并把分割后的结果放入数组中。这个Perl split函数使用规则表达式RE如果未特定则工作在$_变量上。 Perl split函数可以这样使用
$infoCaine:Michael:Actor:14,LeafyDrive;
personalsplit(/:/,$info);
其结果是personal(“Caine”,”Michael”,”Actor”,”14,LeafyDrive”); 如果我们已经把信息存放在$_变量中那么可以这样
personalsplit(/:/);
如果各个域被任何数量的冒号分隔可以用RE代码进行分割
$_Capes:Geoff::Shotputter:::BigAvenue;
personalsplit(/:/);
其结果是personal(“Capes”,”Geoff”,”Shotputter”,”BigAvenue”); 但是下面的代码
$_Capes:Geoff::Shotputter:::BigAvenue;
personalsplit(/:/);
的结果是personal(“Capes”,”Geoff”,”“,”Shotputter”,”“,”“,”BigAvenue”);
这个Perl split函数中单词可以被分割成字符句子可以被分割成单词段落可以被分割成句子
charssplit(//,$word);
wordssplit(//,$sentence);
sentencessplit(/\./,$paragraph);
在第一句中空字符串在每个字符间匹配所以chars数组是一个字符的数组。 //之间的部分表示split用到的正则表达式或者说分隔法则 \s是一种通配符代表空格 代表重复一次或者一次以上。 所以\s代表一个或者一个以上的空格。 split(/\s/,line)表示把字符串line)表示把字符串line,按空格为界分开。
在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种才是王道如果需要使用多项也可以进行进行适当的变动。不过两项如果跨度比较大34应该是不错选择5就只能用中间数组。