my %files for my $file (@files) { my ($name,$sfx) = split'.', $file; open FILE, '<', $file or doe $!; push @{ $file{$name}{$sfx} }, ; close FILE; } for my $uniq ( keys %files ) { for my $sfx ( 'a' .. 'c' ) { for my $line ( @{ $files{$uniq}{$sfx} } ) { #do something with line } } }