试图计算一串文字(包括空行)中的行数。对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";
但它看起来更像是一种解决方法,而不是直接解决方案。有任何想法吗?
答案 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