In perl.git, the branch blead has been updated <http://perl5.git.perl.org/perl.git/commitdiff/7dbd4c448e073ab79489ffeb25479e30e283d84d?hp=84875a28d7b7f4db402f82dd5f607497b00db5e6>
- Log ----------------------------------------------------------------- commit 7dbd4c448e073ab79489ffeb25479e30e283d84d Author: Karl Williamson <[email protected]> Date: Thu Feb 5 13:07:38 2015 -0700 regcomp.c: Warn on [:^posix:] not being in [] A POSIX character class is has to be in a bracketed character class. A warning is issued when something appearing to be one is found outside. Until this commit the warning wasn't raised for negated classes. M pod/perldelta.pod M regcomp.c M t/re/reg_mesg.t commit c9a74c77cc7250708801cd921a86741bdcbda6cd Author: Karl Williamson <[email protected]> Date: Thu Feb 5 08:38:52 2015 -0700 ext/re/re.pm: Fix comment M ext/re/re.pm commit b10bad5ab5534c23d5f3e698f053bfe49cfd2d15 Author: Karl Williamson <[email protected]> Date: Wed Feb 4 12:34:04 2015 -0700 re.pm: White-space only Fix some indents, vertically align ternary M ext/re/re.pm ----------------------------------------------------------------------- Summary of changes: ext/re/re.pm | 10 +++++----- pod/perldelta.pod | 8 ++++++++ regcomp.c | 3 +++ t/re/reg_mesg.t | 1 + 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/ext/re/re.pm b/ext/re/re.pm index fa1c6e6..92ddaf5 100644 --- a/ext/re/re.pm +++ b/ext/re/re.pm @@ -116,7 +116,7 @@ sub bits { if ($turning_all_off) { # Pretend were called with certain parameters, which are best dealt - # with XXX + # with that way. push @_, keys %bitmask; # taint and eval push @_, 'strict'; } @@ -221,8 +221,8 @@ sub bits { } else { delete $^H{reflags_charset} - if defined $^H{reflags_charset} - && $^H{reflags_charset} == $reflags{$_}; + if defined $^H{reflags_charset} + && $^H{reflags_charset} == $reflags{$_}; } } elsif (exists $reflags{$_}) { $seen{$_}++; @@ -238,8 +238,8 @@ sub bits { } } ($^H{reflags} = $reflags or defined $^H{reflags_charset}) - ? $^H |= $flags_hint - : ($^H &= ~$flags_hint); + ? $^H |= $flags_hint + : ($^H &= ~$flags_hint); } else { require Carp; Carp::carp("Unknown \"re\" subpragma '$s' (known ones are: ", diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 674109a..097d28c 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -399,6 +399,14 @@ array, for example, perl would produce a runtime error and not set C<PL_rs>, but perl code that checked C<$/> would see the array reference. [perl #123218] +=item * + +In a regular expression pattern, a POSIX class, like C<[:ascii:]>, must +be inside a bracketed character class, like C</qr[[:ascii:]]>. A +warning is issued when something looking like a POSIX class is not +inside a bracketed class. That warning wasn't getting generated when +the POSIX class was negated: C<[:^ascii:]>. This is now fixed. + =back =head1 Known Problems diff --git a/regcomp.c b/regcomp.c index edab543..0d6d344 100644 --- a/regcomp.c +++ b/regcomp.c @@ -13864,6 +13864,9 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth, const char *s = RExC_parse; const char c = *s++; + if (*s == '^') { + s++; + } while (isWORDCHAR(*s)) s++; if (*s && c == *s && s[1] == ']') { diff --git a/t/re/reg_mesg.t b/t/re/reg_mesg.t index 4abfdf7..c985c8e 100644 --- a/t/re/reg_mesg.t +++ b/t/re/reg_mesg.t @@ -451,6 +451,7 @@ my @death_utf8_only_under_strict = ( my @warning = ( 'm/\b*\x{100}/' => '\b* matches null string many times {#} m/\b*{#}\x{100}/', 'm/[:blank:]\x{100}/' => 'POSIX syntax [: :] belongs inside character classes {#} m/[:blank:]{#}\x{100}/', + 'm/[[:cntrl:]][:^ascii:]\x{100}/' => 'POSIX syntax [: :] belongs inside character classes {#} m/[[:cntrl:]][:^ascii:]{#}\x{100}/', "m'\\y\\x{100}'" => 'Unrecognized escape \y passed through {#} m/\y{#}\x{100}/', '/x{3,1}/' => 'Quantifier {n,m} with n > m can\'t match {#} m/x{3,1}{#}/', '/\08/' => '\'\08\' resolved to \'\o{0}8\' {#} m/\08{#}/', -- Perl5 Master Repository
