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

在Perl中,如何告诉split不要删除空的尾随字段?,perl,Perl,正在尝试计算文本字符串中的行数(包括空行)。对split的行为有点惊讶。本来希望以下内容输出2,但它在我的Perl5.14.2上打印了1 $str = "hello\ world\n\n"; @a = split(/\n/, $str); print $#a, "\n"; 似乎split()。我能得到的唯一接近给出行数的是 $str = "hello\ world\n\n"; @a = split(/(\n)/, $str); printf "%d\n", ($#a + 1)/2, "\n";

正在尝试计算文本字符串中的行数(包括空行)。对
split
的行为有点惊讶。本来希望以下内容输出
2
,但它在我的
Perl5.14.2
上打印了
1

$str = "hello\
world\n\n";
@a = split(/\n/, $str);
print $#a, "\n";
似乎
split()。我能得到的唯一接近给出行数的是

$str = "hello\
world\n\n";
@a = split(/(\n)/, $str);
printf "%d\n", ($#a + 1)/2, "\n";
但它看起来更像是一种变通方法,而不是一个简单的解决方案。有什么想法吗

: 若极限为负值,则视为相反 任意大;生产尽可能多的油田

如果省略了限制(或等效为零),则通常为 将其视为阴性,但例外情况是 删除尾随空字段(删除前导空字段 一直保存);如果所有字段均为空,则所有字段均为空 被认为是拖尾的(在这种情况下被剥离)

$perl-E'my$x=“1\n2\n\n”;my@x=split/\n/,$x,-1;说$#x' 三: 若极限为负值,则视为相反 任意大;生产尽可能多的油田

如果省略了限制(或等效为零),则通常为 将其视为阴性,但例外情况是 删除尾随空字段(删除前导空字段 一直保存);如果所有字段均为空,则所有字段均为空 被认为是拖尾的(在这种情况下被剥离)

$perl-E'my$x=“1\n2\n\n”;my@x=split/\n/,$x,-1;说$#x' 三: 若极限为负值,则视为相反 任意大;生产尽可能多的油田

如果省略了限制(或等效为零),则通常为 将其视为阴性,但例外情况是 删除尾随空字段(删除前导空字段 一直保存);如果所有字段均为空,则所有字段均为空 被认为是拖尾的(在这种情况下被剥离)

$perl-E'my$x=“1\n2\n\n”;my@x=split/\n/,$x,-1;说$#x' 三: 若极限为负值,则视为相反 任意大;生产尽可能多的油田

如果省略了限制(或等效为零),则通常为 将其视为阴性,但例外情况是 删除尾随空字段(删除前导空字段 一直保存);如果所有字段均为空,则所有字段均为空 被认为是拖尾的(在这种情况下被剥离)

$perl-E'my$x=“1\n2\n\n”;my@x=split/\n/,$x,-1;说$#x'
3也许问题在于,当标量@a是您实际寻找的对象时,您使用的是$#a


如果您已经意识到这一点或者这不是问题所在,我很抱歉,但是$#a返回@a的最后一个元素的索引,并且(scalar@a)返回@a包含的元素数。由于数组索引从0开始,所以$#a比scalar@a小一个。

也许问题在于,当scalar@a是您实际寻找的对象时,您正在使用$#a


如果您已经意识到这一点或者这不是问题所在,我很抱歉,但是$#a返回@a的最后一个元素的索引,并且(scalar@a)返回@a包含的元素数。由于数组索引从0开始,所以$#a比scalar@a小一个。

也许问题在于,当scalar@a是您实际寻找的对象时,您正在使用$#a


如果您已经意识到这一点或者这不是问题所在,我很抱歉,但是$#a返回@a的最后一个元素的索引,并且(scalar@a)返回@a包含的元素数。由于数组索引从0开始,所以$#a比scalar@a小一个。

也许问题在于,当scalar@a是您实际寻找的对象时,您正在使用$#a


如果您已经意识到这一点或者这不是问题所在,我很抱歉,但是$#a返回@a的最后一个元素的索引,并且(scalar@a)返回@a包含的元素数。由于数组索引从0开始,所以$#a比scalar@a小一个。

要仅计算换行,请执行
$newlines=$str=~y/\n/
要只计算换行,请执行
$newlines=$str=~y/\n/
要只计算换行,请执行
$newlines=$str=~y/\n/
要只计算换行,请执行
$newlines=$str=~y/\n/
$ perl -E 'my $x = "1\n2\n\n"; my @x = split /\n/, $x, -1; say $#x'
3