that printed: A B C D E A 0 1 0 0 0 B 1 0 1 0 0 C 0 1 0 1 1 D 0 0 1 0 0 E 0 0 1 0 0 #### #!/usr/bin/perl -w use strict; use Data::Dumper; =this prints A B C D A 0 1 0 0 B 1 0 1 0 C 0 1 0 1 D 0 0 1 0 =cut my @vars = qw(A B C D); my @square_matrix = map{ my @x; push (@x,0) foreach @vars; [@x] }@vars; my $num =0; my %ltr2num = map{ $_ => $num++ }@vars; my @pairs = ("A B", "B C", "C D"); ### the user input #### foreach my $pair (@pairs) { my ($x, $y) = split ' ',$pair; enter_pair_in_matrix ( $ltr2num{$x}, $ltr2num{$y}, \@square_matrix ); } dump_square_matrix(\@vars,\@square_matrix); sub enter_pair_in_matrix { my ($x,$y,$ref_matrix) = @_; $ref_matrix->[$x][$y]= 1; $ref_matrix->[$y][$x]= 1; } sub dump_square_matrix { my ($ref_vars, $ref_matrix) = @_; my @vars = @$ref_vars; print " ","@vars\n"; foreach (@$ref_matrix) { print shift @vars, " @$_\n"; } }