next if ( $c++ == 0 ); # skip the file header #### #!/usr/bin/perl -w use strict; my @master_list = (); readfile("f1.lst", \@master_list); readfile("f2.lst", \@master_list); readfile("f3.lst", \@master_list); printf "%s | %s | %s\n", @{$_}[0..2] for(@master_list); sub readfile { my $filename = shift or die "Need filename.\n"; my $listref = shift; # Listed pointed to is modified in place. open my $file, "< $filename" or die "Can't open $filename: $!\n"; my $header = <$file>; my $c = 0; local $_; while(<$file>) { $listref->[$c] ||= []; # use strict doesn't like auto-viv. chomp; # Compare the new value with the first value stored in the list. # First value to be read in for any row is assumed to be # correct. All subsequent values must match that first one. unless(@{$listref->[$c]} and $_ != $listref->[$c][0]) { push @{$listref->[$c]}, $_; } else { push @{$listref->[$c]}, ' '; } ++$c; } close $file or die "Can't close $filename: $!\n"; }