Perl在分隔符之前/之后拆分为空文本

Perl在分隔符之前/之后拆分为空文本,perl,Perl,我注意到Perl的split命令出现了一些奇怪的行为,特别是在我希望生成的数组包含空字符串“”的情况下,但实际上并非如此 例如,如果在字符串的末尾(或开头)有一个分隔符,则生成的数组的最后一个(或第一个)元素不是空字符串 例如: @s = split(/x/, 'axb') 生成2元素数组['a','b'] @s = split(/x/, 'axbx') 生成相同的数组 @s = split(/x/, 'axbxxxx') 生成相同的数组 @s = split(/x/, 'axbxxxx'

我注意到Perl的split命令出现了一些奇怪的行为,特别是在我希望生成的数组包含空字符串“”的情况下,但实际上并非如此

例如,如果在字符串的末尾(或开头)有一个分隔符,则生成的数组的最后一个(或第一个)元素不是空字符串

例如:

@s = split(/x/, 'axb')
生成2元素数组['a','b']

@s = split(/x/, 'axbx')
生成相同的数组

@s = split(/x/, 'axbxxxx')
生成相同的数组

@s = split(/x/, 'axbxxxx')
但一旦我在末尾添加了一些内容,所有这些空字符串都会显示为元素:

@s = split(/x/, 'axbxxxxc')
生成一个6元素数组['a','b','','','','c']

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

我希望分隔符之间、之前或之后的空文本总是在拆分中生成元素。有人能向我解释一下为什么在Perl中拆分的行为是这样的吗?我刚刚在Python中尝试了同样的方法,结果正如预期的那样

注意:Perl v5.8来自:

默认情况下,保留空的前导字段,删除空的尾随字段。(如果所有字段均为空,则视为尾随。)

这就解释了尾随字段的行为。这通常是有道理的,因为人们通常非常不注意尾随空格,例如。但是,如果需要,可以获取尾随的空白字段:

split/PATTERN/,EXPR,LIMIT

若极限为负值,则视为指定了任意大的极限

因此,要获取所有尾随的空字段:

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

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

从文档中引用时,请包含相关文档的链接。这次我给你加了。哇,我觉得不直接去看医生很愚蠢。是的,你是对的,我在测试前导空格时一定犯了一些粗心的错误,只是再试一次,发现它们被保留了下来。谢谢你给我写的关于限制-1的便条,这帮了我的忙@Roman Stolper:只有在特殊的
split''
在任何空格上拆分时,才会丢弃前导空字段。(
split//
,另一方面,遵循常规规则,保留前导空字段并仅对空格字符进行拆分。)好的,不仅仅是在这种情况下;另一种情况是,当正则表达式与零宽度匹配时,前导的空字段被丢弃。有关此问题的讨论,请参阅。