【发布时间】:2011-10-01 15:25:27
【问题描述】:
我正在使用以下方法来计算文件中某个模式的出现次数:
my @lines = grep /$text/, <$fp>;
print ($#lines + 1);
但有时它会比实际值多打印一。我查了一下,是因为@lines的最后一个元素为null,也算进去了。
grep 结果的最后一个元素有时怎么可能是空的?还有,这个问题怎么解决?
【问题讨论】:
-
你为什么要给
$#lines加1? -
在不知道模式是什么的情况下,我们没有太多机会理解为什么它在“空”行上匹配。但是,请记住,行以 \n 结尾,这被视为要匹配的内容。事实上,有些模式根本无法匹配。
-
@sergio,因为
$#lines给出了数组最后一个元素的索引(长度为 1,因为它从 0 开始) -
@Lazer:
print scalar @lines;打印数组@lines中有多少行。$#lines是顶部索引,它不是元素数量的同义词。 -
为了让任何人都能回答这个问题,您需要指定
$text是什么。否则就像问:“我的车出了问题!怎么了?”