list ---- HAT KNIFE 1 HAT KNIFE 7 BALL KNIFE 3 CAT CLOTH 1 DOG CLOTH 2 code ---- my %matrix; while (<>) { my ($id1, $id2, $int) = split; $matrix{$id1}{$id2} += $int; } foreach $key1 (keys %matrix) { foreach $key2 (keys %{%matrix->{$key1}}) { print "\$matrix{$key1}{$key2} = $matrix{$key1}{$key2} "; } print"\n"; } output ------ $matrix{CAT}{CLOTH} = 1 $matrix{DOG}{CLOTH} = 2 $matrix{HAT}{KNIFE} = 8 $matrix{BALL}{KNIFE} = 3