在Perl中,如何判断split不要删除空的尾随字段?

时间:2015-03-19 01:54:54

标签: perl

试图计算一串文字(包括空行)中的行数。对split的行为感到有些惊讶。我希望以下内容输出2,但在1上打印perl 5.14.2

$str = "hello\
world\n\n";
@a = split(/\n/, $str);
print $#a, "\n";

似乎split()对连续\n不敏感(在字符串末尾添加更多\n's不会增加打印输出)。唯一能让它接近给出行数的是

$str = "hello\
world\n\n";
@a = split(/(\n)/, $str);
printf "%d\n", ($#a + 1)/2, "\n";

但它看起来更像是一种解决方法,而不是直接解决方案。有任何想法吗?

2 个答案:

答案 0 :(得分:3)

perldoc -f split

  

如果LIMIT为负数,则将其视为相反               任意大;尽可能多的领域。

     

如果省略LIMIT(或等效地为零),则通常是               对待它就好像是负面的,但除了那个               尾随空字段被剥离(空的前导字段为               永远保存);如果所有字段都为空,则所有字段均为空               被认为是尾随(因此在这种情况下被剥夺)。

$ perl -E 'my $x = "1\n2\n\n"; my @x = split /\n/, $x, -1; say $#x'
3

答案 1 :(得分:0)

也许问题是当你正在寻找标量@a时你使用$#a?

如果您已经意识到这一点或者这不是问题,我道歉,但$#a返回@a的最后一个元素的索引,而(标量@a)返回@a包含的元素数。由于数组索引从0开始,$#a比标量@a。

小1