use strict;
use warnings;
my %bucket = (
key1 => { '1' => 3},
key2 => { '1' => 3,
'2' => 2},
key3 => { '1' => 11,
'2' => 36}
);
my %spair = ();
my $cnt =0;
foreach my $kmer ( keys %bucket )
{
foreach my $si (keys %{$bucket{$kmer}})
{ foreach my $sn (keys %{$bucket{$kmer}})
{
next if exists $spair{$sn."-".$si};
if ( $si == $sn )
{
$cnt = $bucket{$kmer}{$si};
}
else
{
$cnt = $bucket{$kmer}{$si}*$bucket{$kmer}{$sn};
}
$spair{$si."-".$sn} +=$cnt;
}
} # ----- end foreach -----
} # ----- end foreach -----
use Data::Dumper;
print Dumper \%spair;
####
$VAR1 = {
'1-1' => 17, # 3+3+11
'2-2' => 38, # 2+36
'1-2' => 402 # (3*2)+(11*36), this is correct already
};
####
$VAR1 = {
'1-1' => 3, #wrong
'2-2' => 2, #wrong
'1-2' => 402 #correct
};