in reply to Data normalisation

Like splinky mentioned, you will have to add some backreferencing parenthesis to your regexes, like this:
$month = '(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)? |Apr(?:il)?|May|Jun(?:e)? |Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)? |Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\s+'; $day = '([0-3]?[0-9])(?:th|st|nd|rd)?,?\s+'; $year = '([0-9]{2,4})';
Note that I removed the ?: from the outermost parenthesis in $month, and added them to $day and $year. Then you could do something like this:
if (( ($month, $day, $year) = (/$month$day$year/io) ) || ( ($day, $month, $year) = (/$day$month$year/io) ) ) { $year += 1900 if $year < 100; $month = substr($month, 1, 3); print "$day-$month-$year\n"; }
The if statement was copied from splinky's response, but I removed the parenthesis from the regex because they are already in the variables. You may want to fix the $year adjustment to properly handle things.

--ZZamboni