use strict; use warnings; use Data::Dumper; #print Dumper \%hash2; my %spair = (); my $prod; foreach my $si (keys %hash2) { foreach my $sn (keys %hash2) { if ($si == $sn) { $prod = $hash2{$si}; } else { $prod = $hash2{$si}*$hash2{$sn}; } $spair{$si."-".$sn} = $prod; } } print Dumper \%spair;