my %hash=(A=>4, B=>5, C=>10, D=>2, E=>9); my @zip = map { [ $_, $hash{$_} ] } sort keys %hash; do { my $f = shift @zip; print ("@$f * @$_ = ", $f->[1] * $_->[1], "\n") for (@zip); } while (@zip); #### my %hash=(A=>4, B=>5, C=>10, D=>2, E=>9); my @zip = sort keys %hash; do { my $f = shift @zip; for (@zip) { my ($v1,$v2) = @hash{$f,$_}; print "$f($v1) * $_($v2) = ", $v1 * $v2, "\n"; } } while (@zip); #### A(4) * B(5) = 20 A(4) * C(10) = 40 A(4) * D(2) = 8 A(4) * E(9) = 36 B(5) * C(10) = 50 B(5) * D(2) = 10 B(5) * E(9) = 45 C(10) * D(2) = 20 C(10) * E(9) = 90 D(2) * E(9) = 18