采用不同方式读取数据流

一般我们用行输入操作符<>读取数据流,如果是标量上下文,就返回一行,如果是列表上下文,就返回数据流中所有的数据。

总体而言,一次读取一行的方式在时间和内存的开销上效率最高的。

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;

你可能感兴趣的:(读取数据)