例如,如果我在字符串的末尾(或开头)有一个分隔符,则生成的数组不会有一个空字符串”作为最后一个(或第一个)元素。@H_502_3@
例:@H_502_3@
@s = split(/x/,'axb')
产生2个元素数组[‘a’,’b’]@H_502_3@
@s = split(/x/,'axbx')
产生相同的数组@H_502_3@
@s = split(/x/,'axbxxxx')
产生相同的数组@H_502_3@
但是,一旦我把东西放在最后,所有这些空字符串就会显示为元素:@H_502_3@
@s = split(/x/,'axbxxxxc')
产生一个6元素数组[‘a’,’b’,”,”,”,’c’]@H_502_3@
如果分隔符处于开头,则行为相似。@H_502_3@
我会期望在分隔符之间,之前或之后的空文本总是在分割中生成元素。任何人都可以向我解释为什么分裂在Perl中如此行事?我只是在Python中尝试过同样的事情,并且按预期工作。@H_502_3@
注意:Perl v5.8@H_502_3@
解决方法
By default,empty leading fields are preserved,and empty trailing ones are deleted. (If all fields are empty,they are considered to be trailing.)@H_502_3@
这就解释了你看到的跟踪字段的行为。这通常是有道理的,因为例如人们往往非常粗心地拖尾空白。但是,如果需要,您可以获得尾随的空白字段:@H_502_3@
split /PATTERN/,EXPR,LIMIT
@H_502_3@If LIMIT is negative,it is treated as if an arbitrarily large LIMIT had been specified.@H_502_3@
所以要得到所有尾随的空字段:@H_502_3@
@s = split(/x/,'axbxxxxc',-1);
(我假设你在看着领先的空字段时犯了一个粗心大意的错误 – 它们绝对保留下来,尝试拆分(/ x /,’xaxbxxxx’),结果大小为3)@H_502_3@