刚刚学的perl,就写了一个半自动比较测试结果的程序。之所以是半自动,就是把两个程序的测试输出相减,然后用眼看。
以后再写个更智能的。而且这个通用性也不好。
不过哪本书上说的是写这种脚本如果太追求完美,花时间太长也不合算,是不?
上代码:
#!/usr/bin/perl
use strict;
#print @ARGV;
my $file1=shift @ARGV;
my $file2=shift @ARGV;
if(!open LOG1,"<$file1"){
die "Bad file arg./n";
}
if(!open LOG2,"<$file2"){
die "Bad file arg./n";
}
my @values1;
my @values2;
my @diffs;
foreach(<LOG1>){
s/[^,-/.?/s+/d+/d*]//g;
my @items = ( split //s+|,/,$_ );
foreach(@items){
s/--/-/g;
if(//d+/){
@values1 = (@values1,$_);
}
}
}
#foreach (@values1){
# print "$_/n";
#}
foreach(<LOG2>){
s/[^,-/.?/s+/d+/d*]//g;
my @items = ( split //s+|,/,$_ );
foreach(@items){
s/--/-/g;
if(//d+/){
@values2 = (@values2,$_);
}
}
}
#foreach (@values2){
# print "$_/n";
#}
foreach(@values1){
push(@diffs,$_-(shift @values2));
}
close LOG1;
close LOG2;
#foreach(@diffs){
# print "$_/n";
#}
foreach(@diffs){
if($_ eq 0){
$_ = 'yes';
}
}
open LOG1,"<$file1";
my @orig=<LOG1>;
#foreach(@orig){
# print "$_/n";
#}
foreach(@orig){
s/-?/d+/.?/d*/<replaceflag>/g;
}
#print @orig;
my $diffvar=shift @diffs;
foreach(@orig){
# print "orig $_/n";
while(s/<replaceflag>/$diffvar/){
$diffvar=shift @diffs;
# print "change to $_/n";
}
}
my $index=1;
foreach(@orig){
s/<watch>//;
s/(Head data)/$1 $index/;
if(/avg_final/) {
$index=$index+1;
}
}
print @orig;