$ cat pm_1075362_1.txt file 1 line 1 file 1 line 2 $ cat pm_1075362_2.txt file 2 line 1 file 2 line 2 file 2 line 3 $ cat pm_1075362_3.txt file 3 line 1 file 3 line 2 #### #!/usr/bin/env perl -l use strict; use warnings; use autodie; use Tie::File; use List::MoreUtils qw{pairwise}; my ($file1, $file2, $file3) = map { "pm_1075362_$_.txt" } 1 .. 3; tie my @file1, 'Tie::File', $file1; tie my @file2, 'Tie::File', $file2; tie my @file3, 'Tie::File', $file3; print '*** File 1 (2 lines) and File 2 (3 lines):'; print_tabbed_pairs(\@file1, \@file2); print '*** File 2 (3 lines) and File 1 (2 lines):'; print_tabbed_pairs(\@file2, \@file1); print '*** File 1 (2 lines) and File 3 (2 lines):'; print_tabbed_pairs(\@file1, \@file3); sub print_tabbed_pairs { my ($file1, $file2) = @_; print for pairwise { join "\t" => (defined $a ? $a : ''), (defined $b ? $b : '') } @$file1, @$file2; } #### *** File 1 (2 lines) and File 2 (3 lines): file 1 line 1 file 2 line 1 file 1 line 2 file 2 line 2 file 2 line 3 *** File 2 (3 lines) and File 1 (2 lines): file 2 line 1 file 1 line 1 file 2 line 2 file 1 line 2 file 2 line 3 *** File 1 (2 lines) and File 3 (2 lines): file 1 line 1 file 3 line 1 file 1 line 2 file 3 line 2