我注意到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
答案 0 :(得分:46)
默认情况下,会保留空的前导字段,并删除空的尾随字段。 (如果所有字段都为空,则认为它们是尾随的。)
这解释了您在尾随字段中看到的行为。这通常是有道理的,因为例如,人们通常非常粗心地追踪空白。但是,如果需要,可以获取尾随空白字段:
split /PATTERN/,EXPR,LIMIT
如果LIMIT为负数,则将其视为指定了任意大的LIMIT。
所以要获取所有尾随空字段:
@s = split(/x/, 'axbxxxxc', -1);
(我假设你在查看领先的空白字段时犯了一个粗心的错误 - 它们肯定会被保留。请尝试split(/x/, 'xaxbxxxx')
。结果的大小为3。)