Perl在分隔符之前/之后用空文本分割

时间:2010-09-14 18:08:05

标签: perl

我注意到Perl的split命令有些奇怪的行为,特别是在我希望结果数组包含空字符串的情况下,但实际上并没有。

例如,如果我在字符串的结尾(或开头)有一个分隔符,则结果数组没有空字符串''作为最后一个(或第一个)元素。 / p>

示例:

@s = split(/x/, 'axb')

生成2个元素数组['a','b']

@s = split(/x/, 'axbx')

生成相同的数组

@s = split(/x/, 'axbxxxx')

生成相同的数组

但是当我在最后放置一些东西时,所有这些空字符串都会显示为元素:

@s = split(/x/, 'axbxxxxc')

产生一个6元素数组['a','b','','','','c']

如果分隔符位于开头,则行为相似。

我希望在分隔符之间,之前或之后的空文本总是在分割中生成元素。任何人都可以向我解释为什么分裂在Perl中表现得像这样?我只是在Python中尝试了相同的东西,它按预期工作。

注意:Perl v5.8

1 个答案:

答案 0 :(得分:46)

来自the documentation

  

默认情况下,会保留空的前导字段,并删除空的尾随字段。 (如果所有字段都为空,则认为它们是尾随的。)

这解释了您在尾随字段中看到的行为。这通常是有道理的,因为例如,人们通常非常粗心地追踪空白。但是,如果需要,可以获取尾随空白字段:

  

split /PATTERN/,EXPR,LIMIT

     

如果LIMIT为负数,则将其视为指定了任意大的LIMIT。

所以要获取所有尾随空字段:

@s = split(/x/, 'axbxxxxc', -1);

(我假设你在查看领先的空白字段时犯了一个粗心的错误 - 它们肯定会被保留。请尝试split(/x/, 'xaxbxxxx')。结果的大小为3。)