use strict; use warnings; my @filesThisRun = (qw{file1 file2 ... fileN); my %fileInfo = (); foreach my $file (@filesThisRun) { open my $lookupFH, q{<}, $file or die qq{open: $file: $!\n}; while (<$lookupFH>) { my ($refName, $refID) = (split m{\t})[3, 4]; $fileInfo{$file} = {$refID => $refName}; } close $lookupFH or die qq{close: $file: $!\n}; }