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

Reply via email to