split不返回空元素

Ole*_*nge 1 perl

为什么这些并非都返回bbb?

$ perl -e '$a="  "; print map { "b" } split / /, $a;'
<<nothing>>
$ perl -e '$a=",,"; print map { "b" } split /,/, $a;'
<<nothing>>
$ perl -e '$a="  a"; print map { "b" } split / /, $a;'
bbb
$ perl -e '$a=",,a"; print map { "b" } split /,/, $a;'
bbb
Run Code Online (Sandbox Code Playgroud)

我希望split在所有情况下返回一个包含3个元素的数组.

$ perl -V
Summary of my perl5 (revision 5 version 24 subversion 1) configuration:
Run Code Online (Sandbox Code Playgroud)

yst*_*sth 9

split第三个参数表示要生成多少元素:

split /PATTERN/,EXPR,LIMIT

......如果LIMIT是否定的,则将其视为任意大; 生成尽可能多的字段.

如果LIMIT省略(或等效地为零),则通常将其视为否定为负但除了尾随空字段被剥离(始终保留空的前导字段); 如果所有字段都为空,则认为所有字段都是尾随的(因此在这种情况下会被删除).

它默认为0,这意味着尽可能多,但不留任何尾随的空元素.

您可以传递-1第三个参数split来抑制此行为.