#use strict; use warnings; my %A = (horse=> 'a',lion=>'b' ,mule=>'c',tiger =>'d'); my @order= sort keys %A; while () { warn("Line $.: cannot understand: $_") , next unless /(\w+);(\w+)/; my ($row, $col) = ($1,$2); $A {$row}{$col}++; $A{$col}{$row}++; } # print col. header print " "; printf(" %2s",$_) for (@order); print "\n"; #print matrix A for my $row (@order) { printf(" %2s", $row); for my $col (@order) { printf(" %3d", exists $A{$row}{$col} ? "1" : "0" ); } print "\n"; } __DATA__ horse;tiger lion;mule lion;tiger horse;mule #### I have got ouput horse lion mule tiger horse 0 0 1 1 lion 0 0 1 1 mule 1 1 0 0 tiger 1 1 0 0