2013-05-15 50 views
-2
#!/usr/bin/perl 
use strict; 
use Data::Dumper; 
use warnings; 
my @mdsum; 

open (IN1,"$ARGV[0]") || die "counldn't open"; 
open (MYFILE, '>>md5sum-problem.txt'); 
open (IN2, "mdsumfile.txt"); 
my %knomexl=(); 
my %knomemdsum =(); 
my @arrfile ; 
my $tempkey ; 
my $tempval ; 
my @values ; 
my $val; 
my $i; 
my @newarra; 
my $testxl ; 
my $testmdsum; 
while(<IN1>){ 
    next if /barcode/; 
    @arrfile = split('\t', $_); 
    $knomexl{$arrfile[0]} = $arrfile[2]; 
} 

while(<IN2>){ 
    chomp $_; 
    @newarra = split(/ {1,}/, $_); 
    $tempval = $newarra[0]; 
    $tempkey = $newarra[1]; 
    $tempkey=~ s/\t*$//g; 
    $tempval=~ s/\s*$//g; 
    $tempkey=~s/.tar.gz//g; 
    $knomemdsum{$tempkey} = $tempval; 
} 

@values = keys %knomexl; 

foreach $i(@values){ 
    $testxl = $knomexl{$values[$i]}; 
    print $testxl."\n"; 
    $testmdsum = $knomemdsum{$values[$i]}; 
    print $testmdsum."\n"; 

    if ($testxl ne $testmdsum) { 
     if ($testxl ne ""){ 
      print MYFILE "Files hasving md5sum issue $i\n"; 
     } 
    } 
} 
close (MYFILE); 

我有兩個文件一個都具有文件名和Mdsum價值觀,我需要檢查所有文件的的md5sum值不匹配,所以我理解,在一些價值和相應價值不會是他們的情況,我只想要這些情況。任何解決此代碼?請。此代碼非常簡單,但不知道爲什麼它不工作! :(:(參數不是數字的錯誤,而基於鍵比較哈希值

回答

1
@values = keys %knomexl; 

    foreach $i(@values){ 
     #print Dumper $knomexl{$values[$i]}; 
     $testxl = $knomexl{$i}; 
     print $testxl."\n"; 
     $testmdsum = $knomemdsum{$i}; 
     print $testmdsum."\n"; 

$i@values因爲foreach,而不是一個索引的元素,所以你不應該使用$values[$i]

+0

一個更好的建議也只是'的foreach(鍵%knomexl) {$ knomexl {$ _}}'。 – squiguy

+0

@squiguy這是一種文體選擇,對於解決問題並不重要 – Barmar

+0

確實,你解決了這個問題。 – squiguy