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

Rom*_*man 23 perl

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

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

例:

@s = split(/x/, 'axb')
Run Code Online (Sandbox Code Playgroud)

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

@s = split(/x/, 'axbx')
Run Code Online (Sandbox Code Playgroud)

生成相同的数组

@s = split(/x/, 'axbxxxx')
Run Code Online (Sandbox Code Playgroud)

生成相同的数组

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

@s = split(/x/, 'axbxxxxc')
Run Code Online (Sandbox Code Playgroud)

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

如果分隔符在开头,则行为类似.

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

注意:Perl v5.8

Cas*_*bel 46

文档:

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

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

split /PATTERN/,EXPR,LIMIT

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

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

@s = split(/x/, 'axbxxxxc', -1);
Run Code Online (Sandbox Code Playgroud)

(我假设你在看空领域时犯了一个粗心的错误 - 它们肯定会被保留下来.试试split(/x/, 'xaxbxxxx').结果的大小为3.)

  • 在引用文档时,请附上相关文档的链接.这次我已经为你添加了它. (4认同)