如果要用Perl来查一个文件有多少行,怎么办?Perl Cookbook里的Counting Lines (or Paragraphs or Records) in a File就给我们讲了一些方法。

在Windows下,可以配合Cygwin里的wc来得到结果。如果你的Cygwin里已经装了wc,则直接用下面的程序就可以得到你想要的结果:

$count = `wc -l < $file`;
die “wc failed: $?” if $?;
chomp($count);

当然,如果你喜欢的话,也可以直接打开文件,一行一行地读入文件,然后得到文件的行数。

open(FILE, “< $file”) or die “can’t open $file: $!”;
$count++ while ;
# $count now holds the number of lines read

如果你的行是以“\n”结尾的话,可以这样写:

$count += tr/\n/\n/ while sysread(FILE, $_, 2 ** 16);

当然,你也可以模拟wc的形式来写这些代码,下面就是一种形式:

open(FILE, “< $file”) or die “can’t open $file: $!”;
$count++ while ;
# $count now holds the number of lines read

更加简洁的形式:

open(FILE, “< $file”) or die “can’t open $file: $!”;
for ($count=0; ; $count++) { }

还有一种更酷的写法:

1 while ;
$count = $.;

如果你要数一数有多少个段落,就参考这个代码吧:

$/ = ”;            # enable paragraph mode for all reads
open(FILE, $file) or die “can’t open $file: $!”;
1 while ;
$para_count = $.;