- 论坛徽章:
- 0
|
回复 50# guap514
好吧 楼主很懒 我只能做苦力了。
用这个代码创建一个校验文件。命令行是:perl b.pl t.t >cd.log
t.t是:-rw-rw-r-- 1 etl etl 320843 May 14 14:46 t.t- $/=\1;
- my $i=1;
- while(<>){
- print $_." ".$i++ ."\n";
- }
复制代码 运行之后得到一个校验文件:cd.log。 这是我懒得去弄,就直接全字符检验了。这个检验文件够大了吧,。
好吧,下面的代码开始测试:- use Time::HiRes qw(gettimeofday);
- my ($start_sec, $start_usec) = gettimeofday;
- use Data::Dumper;
- $o=$/;
- $/=\1;
- @a=<>;
- open F,"cd.log" or die "asdfasf";
- $/=$o;
- while(<F>){
- @b=split /\s+/,$_;
- if($a[$b[1]-1] != $b[0] ){
- print "$b[0] $b[1] not eq \n";
- }
- }
- my ($end_sec, $end_usec) = gettimeofday;
- my $time_used = ($end_sec - $start_sec) + ($end_usec - $start_usec)/1000000;
- printf("time used : %.10f\n", $time_used);
复制代码 这个是测试楼组的用数组下标检索判断的。消耗时间如下:- [etl@dmtest bidm]$ perl b.pl t.t
- time used : 1.1311360000
复制代码 之后是substr的。- use Time::HiRes qw(gettimeofday);
- my ($start_sec, $start_usec) = gettimeofday;
- $o=$/;
- $/='';
- $a=<>;
- open F,"cd.log" or die "asdfasf";
- $/=$o;
- while(<F>){
- @b=split /\s+/,$_;
- if(substr($a,$b[1]-1,1) != $b[0] ){
- print "$b[0] $b[1] ".substr($a,$b[1],1)." not eq \n";
- }
- }
- my ($end_sec, $end_usec) = gettimeofday;
- my $time_used = ($end_sec - $start_sec) + ($end_usec - $start_usec)/1000000;
- printf("time used : %.10f\n", $time_used);
复制代码 消耗时间是:- [etl@dmtest bidm]$ perl b.pl t.t
- time used : 0.8436160000
复制代码 所以说,是选错的方法,不是perl不行。。。。 |
|