采用不同方式读取数据流
一般我们用行输入操作符<>读取数据流,如果是标量上下文,就返回一行,如果是列表上下文,就返回数据流中所有的数据。
总体而言,一次读取一行的方式在时间和内存的开销上效率最高的。
1. 文件Slurp
my $contents = do { local $/; open my ($fh1),'<',$file1 or die ; <$fh>; };
可以选用File::Slurp 模块替代我们完成。
use File::Slurp;
my $text = read_file('filename');
my @lines = read_file('filename');
2.用read或sysread 获得最快的速度
如果对行边界无所谓,倒是可以用它们来实现快速扫描:
open my ($fh1), '<' , $file1 or die; open my ($fh2), '<', $file2 or die; my $chunk = 4096; # 每次读取的数据大小 my ($bytes,$buf1,$buf2,$diff) ; CHUNK: while ($bytes = sysread $fh1, $buf1, $chunk) { sysread $fh2, $buf2, $chunk; $diff++ , last CHUNK if $buf1 ne $buf2 ; } print "$file1 and $file2 differ" if $diff;