%hash = { filename1 => { id1 => 1, id2 => 1 }, filename2 => { id1 => 3, id2 => 4 } }; #### use strict; use warnings; #NOT TESTED my %filehash; for ($i=1; $i<=$number; $i++) { my $filename = "file$i"; open (lookup, "<$filename") or die "Can't open $filename : $!\n"; while () { ($ref_name, $ref_id) = (split /\t/, $_)[3,4]; $filehash{$filename}{$ref_id} = $ref_name; } }