Date :: Parse определенно будет частью вашего ответа - бит, который обрабатывает произвольно отформатированную строку, похожую на дату, и делает из нее фактическую пригодную для использования дату.
Другая часть вашей проблемы - остальные символы в ваших именах файлов - настолько необычна, что вы вряд ли найдете кого-то, кто упаковал для вас модуль.
Не видя больше ваших образцов данных, на самом деле можно только догадываться, но я бы начал с определения возможных или вероятных кандидатов в «секцию дат».
Вот неприятный пример грубой силы, использующий Date :: Parse (более разумный подход - использовать список regex-en, чтобы попытаться идентифицировать биты дат - я счастлив записать циклы процессора, хотя и не думаю, что все так сложно !)
!/usr/bin/perl
use strict;
use warnings;
use Date::Parse;
my @files=("Report Aug06.xls", "ReportAug2006", "Report 11th September 2006.xls",
"Annual Report-08-06", "End-of-month Report01-08-06.xls", "Report2006");
# assumption - longest likely date string is something like '11th September 2006' - 19 chars
# shortest is "2006" - 4 chars.
# brute force all strings from 19-4 chars long at the end of the filename (less extension)
# return the longest thing that Date::Parse recognises as a date
foreach my $file (@files){
#chop extension if there is one
$file=~s/\..*//;
for my $len (-19..-4){
my $string = substr($file, $len);
my $time = str2time($string);
print "$string is a date: $time = ",scalar(localtime($time)),"\n" if $time;
last if $time;
}
}