采用不同方式读取数据流

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

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

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;
posted @ 2013-04-23 15:03  新闻官  阅读(357)  评论(0编辑  收藏  举报