[perl #115818] Don’t croak for /[.zog.]/
authorFather Chrysostomos <sprout@cpan.org>
Tue, 4 Dec 2012 19:04:24 +0000 (11:04 -0800)
committerFather Chrysostomos <sprout@cpan.org>
Tue, 4 Dec 2012 22:33:30 +0000 (14:33 -0800)
/[.zog.]/ produces a warning, because the POSIX syntax is not used
correctly.  It must be /[[.zog.]]/.

/[[.zog.]]/ croaks, because that POSIX syntax has not been imple-
mented yet.

There is currently a croak for the former, too, even though it is
the latter syntax that is forbidden.  There is no reason to forbid
the former.

The reason for warning is that /[.zog.]/ is a regular character
class (equivalent to [.zog]), so it might not do what the programmer
intended.  If that is why we warn, it doesn’t make sense to croak.
After all, perl is only guessing that the programmer *might* have made
a mistake.

This makes /[.foo.]/ similar to /[:foo:]/, which warns and then acts
like /[:fo]/.

regcomp.c
t/lib/warnings/regcomp

index a595a8c..f639116 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -11576,16 +11576,6 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
            ckWARN3reg(s+2,
                       "POSIX syntax [%c %c] belongs inside character classes",
                       c, c);
-
-           /* [[=foo=]] and [[.foo.]] are still future. */
-           if (POSIXCC_NOTYET(c)) {
-               /* adjust RExC_parse so the error shows after
-                  the class closes */
-               while (UCHARAT(RExC_parse) && UCHARAT(RExC_parse++) != ']')
-                   NOOP;
-               SvREFCNT_dec(listsv);
-               vFAIL3("POSIX syntax [%c %c] is reserved for future extensions", c, c);
-           }
        }
     }
 
index 84d46fc..cb0c703 100644 (file)
@@ -98,7 +98,6 @@ no warnings 'regexp' ;
 /[.zog.]/;
 EXPECT
 POSIX syntax [. .] belongs inside character classes in regex; marked by <-- HERE in m/[.zog.] <-- HERE / at - line 5.
-POSIX syntax [. .] is reserved for future extensions in regex; marked by <-- HERE in m/[.zog.] <-- HERE / at - line 5.
 ########
 # regcomp.c [S_regclass]
 $_ = "";