my %hash1 = ( 'A' => { 'log1' => [ '1', '0.0163934' ], log2' => ['1','0.0163934'], 'log3' => ['1','0.0163934' ], } 'B' => { 'log1' => [ '1', '0.0134521' ], 'log3' => ['2','0.0244508'], } ); my %hash2 = ( 'p0001' => { 'log1' => '1', 'log2' => '3', 'log5' => '1', 'log8' => '1',... } 'p0002' => { 'log1' => '1', 'log3' => '2',... } p0004 => ..., p0056 => ..., ); #### $hash1{$logt}{$keylogs}[1]; $hash2{$p}{$pkeylogs}; $hash3{$p} {$logt} =>$totalscore; foreach my $keylogt (keys(%hash1)){ foreach my $keyp (keys(%hash2)){ foreach my $keypinner (keys %{$hash2{$keyp}}){ foreach my $keylogtinner (keys %{$hash1{$keylogt}}){ until($keypinner eq $keylogtinner){ ... $totalscore+=$hash1{$keylogt}{$keylogtinner}[1]; } else{ $totalscore+=$delta; } } } } }