Subject: | Bug in generating regex for weekday names |
Date: | Fri, 14 Mar 2014 11:23:51 -0600 |
To: | bug-datetime-format-strptime [...] rt.cpan.org |
From: | Maxwell Carey <mcarey [...] ucar.edu> |
In _build_parser, the regex for matching weekday names is generated with
the following code:
my $day_re = join(
'|',
map { quotemeta $_ }
sort { length $b <=> length $a }
grep( /\W/, @{ $self->{_locale}->day_format_wide },
@{ $self->{_locale}->day_format_abbreviated } )
);
$day_re .= '|' if $day_re;
$regex =~ s/%a/($day_re\\w+)/gi;
$field_list =~ s/%a/#dow_name#/gi;
The grep only matches names containing non-word characters (\W), which
for the 'en_EN' locale is nothing. The generated regex becomes simply
\w+
This causes bizarre problems like the following:
#!/usr/bin/perl
use strict;
use warnings;
use DateTime::Format::Strptime;
my $strp = DateTime::Format::Strptime->new(
pattern => '%a%m%d_%Y',
on_error => 'croak',
locale => 'en_EN'
);
my $dt = $strp->parse_datetime('Fri0215_2013');
__END__
Fri02 is not a recognised day in this locale. at foo line 13.