#!/usr/bin/perl use strict; use warnings; use Data::Dumper; use feature 'say'; my %hash; # reset line numbering on each input file while (<>) { chomp; next if /^\s*$/; # skip blank lines say "$.\t$_"; $hash{$ARGV}{$.} = $_; } continue { close ARGV if eof; # Not eof()! } print Dumper \%hash; __END__ $ perl test.pl file1.txt file2.txt 1 ABS0056 3 ABS0057 5 ABS0058 7 ABS0059 1 ABS0060 3 ABS0061 5 ABS0062 7 ABS0036 $VAR1 = { 'file2.txt' => { '7' => 'ABS0036', '5' => 'ABS0062', '1' => 'ABS0060', '3' => 'ABS0061' }, 'file1.txt' => { '5' => 'ABS0058', '7' => 'ABS0059', '1' => 'ABS0056', '3' => 'ABS0057' } };