在Perl中怎么实现利用缓冲区读写文件??

救命啊问题还没有解决~~~~~
本人根据CPAN上的模块File::ReadBackwards修改写了个File::BufferedReader模块,通过对一个1,000,000行的文件读取测试,想对<>操作,时间有所减少,先将File::BufferedReader模块,测试代码及文件格式类型描写如下:

文件格式:(文件名为temp)
CHR     SNP     AL1     AL2     FREQ1   TRAIT   EFFECT  SE      H2      LOD     PVALUE
22      rs738829        G       A       0.802   1       -0.017  0.033   0.711   0.062   0.5943
22      rs915674        G       A       0.871   1       0.005   0.035   0.046   0.005   0.8799
22      rs915675        C       A       0.802   1       0.003   0.033   0.015   0.001   0.9381
22      rs915677        G       A       0.955   1       0.016   0.055   0.161   0.018   0.7714

用<>操作符号一行一行读测试代码:

open(IN,"temp");
<IN>;
@pvalues=();
$start=time();
while(<IN>){
    chomp;
    @array=split("\t",$_);
    push @pvalues,$array[10];
}
$cost=time()-$start;
print "cost time : $cost seconds\n";


用File::BufferedReader模块测试代码
use File::BufferedReader;
$start=time();
@pvalues=();
$bw = File::BufferedReader->new("temp") or die "Can't open the file";
$bw->readline;
until($bw->eof){
    $line=$bw->readline;
    chomp($line);
    @array=split("\t",$line);
    push @pvalues,$array[10];
}
$cost=time()-$start;
print "cost time : $cost seconds\n";


File::BufferedReader.pm模块见下面:
接上一个帖子:
File::BufferedREader.pm
package File::BufferedReader ;
use strict;
use Symbol;
use Fcntl qw( :seek O_RDONLY ) ;
use Carp ;

my $max_read_size = 1 << 14 ;
my $default_rec_sep ;

BEGIN {
    if ( $^O =~ /win32/i || $^O =~ /vms/i ) {
        $default_rec_sep = "\015\012" ;
    }elsif ( $^O =~ /mac/i ) {
        $default_rec_sep = "\015" ;
    }else {
        $default_rec_sep = "\012" ;
    }
}

sub new{
    my($class,$filename,$rec_sep,$sep_is_regex) = @_;

     defined( $filename ) || return ;
     $rec_sep ||= $default_rec_sep ;
     my $is_crlf = $rec_sep eq "\015\012" ;
     my $handle = gensym;
     sysopen( $handle, $filename, O_RDONLY ) || return ;
     binmode $handle ;

     my $self = bless{
        'file_name' => $filename,
        'handle' => $handle,
        'seek_pos' => 0,
        'lines' => [],
        'is_crlf' => $is_crlf,
        'rec_sep' => $rec_sep,
        'sep_is_regex' => $sep_is_regex,
        'is_last' =>0
     }, $class;
     return ($self);
}

sub readline{
     my ($self) = @_;
     my $read_buf ;
     my $lines_ref = $self->{'lines'};
     return unless $lines_ref;
     while(1){
     
     if(@{$lines_ref}>1){
           $lines_ref->[0] =~s/\015\012/\n/
                              if $self->{'is_crlf'} ;
        return (shift @{$lines_ref});
     }
     my $is_last = $self->{'is_last'};

     if($is_last == 1){
         $lines_ref->[0] =~s/\015\012/\n/
                    if $self->{'is_crlf'} ;
         return (shift @{$lines_ref});
     }
     my $handle = $self->{'handle'};
     my $seek_pos = $self->{'seek_pos'};

    sysseek($handle,$seek_pos,SEEK_SET);

     my $read_cnt = sysread($handle,$read_buf,$max_read_size);
     $self->{'seek_pos'}+=$read_cnt;

     $self->{'is_last'}=1 if ($read_cnt<$max_read_size);

     my $text = shift @{$lines_ref} if @{$lines_ref} ;
     $text .= $read_buf;

    @{$lines_ref} = ( $self->{'sep_is_regex'} ) ?
                         $text =~ /(.*?$self->{'rec_sep'}|.+)/gs :
                        $text =~ /(.*?\Q$self->{'rec_sep'}\E|.+)/gs ;
    }
}

sub eof {
     my ($self) = @_;

     my $lines_count = @{$self->{'lines'}};
     my $is_last = $self->{'is_last'};

     return($is_last == 1 && $lines_count ==0);
}

sub close {

     my ( $self ) = @_ ;

     my $handle = delete( $self->{'handle'} ) ;
     delete( $self->{'lines'} ) ;

     CORE::close( $handle ) ;
}


测试结果:
对1,000,000的测试
<>操作的17s
采用BufferedReader并设置缓冲区大小为8k,花了13s,缓冲区为16k,花15s

对10,000,000的测试
<>操作169s
采用BufferedReader并设置缓冲区大小为8k,花了132s,缓冲区为16k,花251s

本人机器配置,内存2G,cpu Core2 Duo E4600(2.4GH)

有什么好的别的方法,忘高手指教!!!
这程序有点复杂.
把文件切开并行处理吧。其实你虽然是一行一行处理的。OS本身会有磁盘读写的buffer的,所以慢也慢不到哪里去。
分割文件如果是在UNIX下或者Linux下问题不大,但是我的程序是在Windows Server上运行,
分割文件可能效率会更低,再者就是对文本分割就又是读一遍文件,会增加I/O的,程序处理的时间会更长。

我感觉最好的解决方案就是充分利用机器的硬件配置,比如内存、CPU,尽可能使用更多的Buffer来提高读写
文本的效率,具体怎么实现,还期望高手给出指点。
急!急!
在线等
求助斑竹。。。。。。
求也没用,bz也不知道。呵呵