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} }, $_; } }