/[.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]/.
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);
- }
}
}
/[.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]
$_ = "";