In perl.git, the branch blead has been updated

<https://perl5.git.perl.org/perl.git/commitdiff/d9a91485293e1414746fd028b3782f699519105e?hp=39ce401c1db32fe69d69d11cfd7b62071e52f43a>

- Log -----------------------------------------------------------------
commit d9a91485293e1414746fd028b3782f699519105e
Author: Karl Williamson <[email protected]>
Date:   Sat Mar 23 10:16:16 2019 -0600

    PATCH: [perl #132851] Empty /(?)/
    
    This changes perlre to note that zero modifiers are allowed in the
    (?...) construct, but changes the code to warn about this no-op, but
    only under "use re 'strict'".

-----------------------------------------------------------------------

Summary of changes:
 pod/perldiag.pod | 5 +++++
 pod/perlre.pod   | 6 +++++-
 regcomp.c        | 6 ++++++
 t/re/reg_mesg.t  | 1 +
 4 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/pod/perldiag.pod b/pod/perldiag.pod
index 8163dde583..7a3faad3ca 100644
--- a/pod/perldiag.pod
+++ b/pod/perldiag.pod
@@ -2169,6 +2169,11 @@ C<\x> without specifying anything for it to operate on.
 Unfortunately, for backwards compatibility reasons, an empty C<\x> is
 legal outside S<C<use re 'strict'>> and expands to a NUL character.
 
+=item Empty (?) without any modifiers in regex; marked by <-- HERE in m/%s/
+
+(W regexp) (only under C<S<use re 'strict'>>)
+C<(?)> does nothing, so perhaps this is a typo.
+
 =item ${^ENCODING} is no longer supported
 
 (F) The special variable C<${^ENCODING}>, formerly used to implement
diff --git a/pod/perlre.pod b/pod/perlre.pod
index f9ea161700..cc717075ac 100644
--- a/pod/perlre.pod
+++ b/pod/perlre.pod
@@ -1376,7 +1376,7 @@ an escape sequence.   Examples:
 =item C<(?^alupimnsx)>
 X<(?)> X<(?^)>
 
-One or more embedded pattern-match modifiers, to be turned on (or
+Zero or more embedded pattern-match modifiers, to be turned on (or
 turned off if preceded by C<"-">) for the remainder of the pattern or
 the remainder of the enclosing pattern group (if any).
 
@@ -1450,6 +1450,10 @@ C<(?-d:...)> and C<(?dl:...)> are fatal errors.
 Note also that the C<"p"> modifier is special in that its presence
 anywhere in a pattern has a global effect.
 
+Having zero modifiers makes this a no-op (so why did you specify it,
+unless it's generated code), and starting in v5.30, warns under L<C<use
+re 'strict'>|re/'strict' mode>.
+
 =item C<(?:I<pattern>)>
 X<(?:)>
 
diff --git a/regcomp.c b/regcomp.c
index a56e75bb9a..547b9113e3 100644
--- a/regcomp.c
+++ b/regcomp.c
@@ -11977,6 +11977,12 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 
*flagp, U32 depth)
                RExC_parse--; /* for vFAIL to print correctly */
                 vFAIL("Sequence (? incomplete");
                 break;
+
+            case ')':
+                if (RExC_strict) {  /* [perl #132851] */
+                    ckWARNreg(RExC_parse, "Empty (?) without any modifiers");
+                }
+                /* FALLTHROUGH */
            default: /* e.g., (?i) */
                RExC_parse = (char *) seqstart + 1;
               parse_flags:
diff --git a/t/re/reg_mesg.t b/t/re/reg_mesg.t
index 3d60c4a5dc..f8265924a2 100644
--- a/t/re/reg_mesg.t
+++ b/t/re/reg_mesg.t
@@ -673,6 +673,7 @@ my @warning_only_under_strict = (
     "/[$low_mixed_digit-$high_mixed_digit]/" => "Ranges of ASCII printables 
should be some subset of \"0-9\", \"A-Z\", or \"a-z\" {#} 
m/[$low_mixed_digit-$high_mixed_digit\{#}]/",
     '/\b<GCB}/' => 'Unescaped literal \'}\' {#} m/\b<GCB}{#}/',
     '/[ ]def]/' => 'Unescaped literal \']\' {#} m/[ ]def]{#}/',
+    '/(?)/' => 'Empty (?) without any modifiers {#} m/(?){#}/', [perl #132851]
 );
 
 my @warning_utf8_only_under_strict = mark_as_utf8(

-- 
Perl5 Master Repository

Reply via email to