#!/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; }