my %hash; for ( readdir DIR ) # or wherever your filenames come from. { if ( /^([a-z0-9]*?-[a-z]{2}-[a-z]{2,3})-(\d{8})(-eol)?\.(pdf|html)$/ ) { push @{ $hash{$1} }, $_; } } #### for my $key ( sort keys %hash ) { print "Files for $key:\n"; for my $file ( sort @{ $hash{$key} } ) { print "\t$file\n"; } }