加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl split函数的用法

发布时间:2020-12-16 00:13:14 所属栏目:大数据 来源:网络整理
导读:Perl中的一个非常有用的函数是split - 把字符串进行分割并把分割后的结果放入数组中。这个函数使用规则表达式(RE),如果未特定则工作在$_变量上。 split函数可以这样使用: $info = "Caine:Michael:Actor:14,Leafy Drive"; @personal = split(/:/,$info);

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

split函数可以这样使用:

$info = "Caine:Michael:Actor:14,Leafy Drive";
@personal = split(/:/,$info);

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

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

@personal = split(/:/);

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

$_ = "Capes:Geoff::Shot putter:::Big Avenue";
@personal = split(/:+/);

其结果是

@personal = ("Capes","Geoff","Shot putter","Big Avenue");?

但是下面的代码:

$_ = "Capes:Geoff::Shot putter:::Big Avenue";
@personal = split(/:/);

的结果是

@personal = ("Capes","","Big Avenue");?
单词可以被分割成字符,句子可以被分割成单词,段落可以被分割成句子:

@chars = split(//,$word);
@words = split(/ /,$sentence);
@sentences = split(/./,$paragraph);

在第一句中,空字符串在每个字符间匹配,所以@chars数组是一个字符的数组。>>

?

==========================================================================

才学习perl,前几天偶然发现split的几种用法,就测试了一下各种用法的效率。大神却说:P大个事,还以为抢鸡蛋呢?perl还讲个毛的效率,怎么搞都是慢,用洗洗屁屁搞。

先引用一段split的手册

split /PATTERN/,EXPR,LIMIT?
split /PATTERN/,EXPR?
split /PATTERN/?
split?
这个函数扫描字串中 EXPR 给出的分隔符,并且把该字串劈成一个子字串列表,在列表环境中返回生成的列表值,或者在标量环境中返回子字串的数量。(注:标量环境同时还令 split 把它的结果写到 @_,不过这个用法现在废弃了。

)分隔符是用重复的模式匹配进行判断的,用的是 PATTERN 里给出的正则表达式,因此分隔符可以是任意大小,并且不一定在每次匹配都是一样的字串。(分隔符不象平常那样返回;我们在本节稍后讨论例外情况。)如果 PATTERN 完

全不能匹配该字串,那么 split 把原始字串当作子字串返回。如果它匹配了一次,那么你就得到两个子字串,以此类推。你可以在 PATTERN 里使用正则表达式修饰词,比如 /PATTERN/i,/PATTERN/x,等等。如果你以模式 /^/ 进行分

裂,那么就假设是 //m 修饰词。?
如果声明了 LIMIT 并且是正的,该函数分裂成不超过那么多的域(当然如果它用光了分隔符,那么是可以分裂成比较少的子字串的)。如果 LIMIT 是负数,那就把它当作声明了任意大的 LIMIT。如果省略了 LIMIT 或者是零,那么将从

结果中删除结尾的空域(那些潜在的 pop 用户应该好好记住)。如果省略了 EXPR,那么该函数就分裂 $_ 字串。如果还省略了 PATTERN 或者它是一个文本空格,“ ”,那么该函数对空格进行操作,/s+/,但是忽任何开头的空格。

这天看见一个文件,每行都有18项,各项之间用t分割,使用时用到了第6项,话说这天正好求知欲比较强,就折腾了几种用法
1:my @array = split("t",$_); my $var = $array[6];?? 测试文件平均用时8.2s
2. my($var) = (split("t",$_))[6];? 测试平均用时5.1s
3. my(undef,undef,$var) = split("t",$_); 平均用时3.53s
4. my(undef,$_,7);平均用时3.52s
5. my $var = (split("t",7))[6]; 平均用时3.53s

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读