dirtdart has asked for the wisdom of the Perl Monks concerning the following question:

I have a small perl script that I am trying to use to monitor backups. As I have several customers with different backup systems, I am trying to use a regular expression to break out the month, day and year in the log file. Since I couldn't rely on what format the date would be in, I attempted to write the RE with named capture buffers. Here is the expression:

^Backup completed on (?<month>\d+)\/(?<day>\d+)\/(?<year>\d+).+?(?<hour>\d+):(?<minute>\d+)\s*(?<mark>AM|PM)

This is the line it should match:

Backup completed on 11/11/2008 at 6:24 AM.

This is the error I get instead:

Sequence (?<m...) not recognized in regex; marked by <-- HERE in m/^Backup completed on (?<m <-- HERE onth>\d+)\/(?<day>\d+)\/(?<year>\d+).+?(?<hour>\d+):(?<minute>\d+)\s*(?<mark>AM|PM)/ at check_backups.pl line 187. at check_backups.pl line 187 I'm sure I'm doing something stupid, but I just can't see it. Can anyone please help me out with this?

Replies are listed 'Best First'.
Re: Problem named capture buffers
by JadeNB (Chaplain) on Nov 11, 2008 at 19:29 UTC
    As others have pointed out, this works ‘natively’ on Perl 5.10.0 and later. (I'm not sure when it was introduced, but it wasn't in Perl 5.8.8.) If you can't upgrade, then you might give Regexp::Fields a try.
Re: Problem named capture buffers
by ig (Vicar) on Nov 11, 2008 at 19:45 UTC
    Since I couldn't rely on what format the date would be in...

    You might consider using one of the modules that provide date/time parsing. I tend to use Date::Manip myself, but there are others.

Re: Problem named capture buffers
by ccn (Vicar) on Nov 11, 2008 at 19:14 UTC

    This is a feature of Perl 5.10.0

    What is your perl version?

      Thank you. That's the problem. The version of perl on my test machine is 5.8 whereas the version on my development machine is 5.10.
Re: Problem named capture buffers
by gwadej (Chaplain) on Nov 11, 2008 at 19:12 UTC

    Which version of perl are you running?

    G. Wade