regex: Deprecate \b{ and \B{
authorKarl Williamson <public@khwilliamson.com>
Sun, 13 Feb 2011 04:19:02 +0000 (21:19 -0700)
committerKarl Williamson <public@khwilliamson.com>
Sun, 13 Feb 2011 05:02:24 +0000 (22:02 -0700)
This allows future use by Perl of these

pod/perldelta.pod
pod/perldiag.pod
regcomp.c
t/lib/warnings/regcomp

index a205da1..7d65c44 100644 (file)
@@ -254,9 +254,13 @@ XXX Newly added diagnostic messages go here
 
 =over 4
 
-=item *
+=item "\b{" is deprecated; use "\b\{" instead
+
+=item "\B{" is deprecated; use "\B\{" instead
+
+Use of an unescaped "{" immediately following a C<\b> or C<\B> is now
+deprecated so as to reserve its use for Perl itself in a future release.
 
-XXX
 
 =back
 
index 871e0a2..f37c51c 100644 (file)
@@ -510,6 +510,14 @@ substitution, but stylistically it's better to use the variable form
 because other Perl programmers will expect it, and it works better if
 there are more than 9 backreferences.
 
+=item "\b{" is deprecated; use "\b\{" instead
+
+=item "\B{" is deprecated; use "\B\{" instead
+
+(W deprecated, regexp) Use of an unescaped "{" immediately following a
+C<\b> or C<\B> is now deprecated so as to reserve its use for Perl
+itself in a future release.
+
 =item Binary number > 0b11111111111111111111111111111111 non-portable
 
 (W portable) The binary number you specified is larger than 2**32-1
index 62e9448..3990016 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -8053,6 +8053,9 @@ tryagain:
            ret = reg_node(pRExC_state, op);
            FLAGS(ret) = get_regex_charset(RExC_flags);
            *flagp |= SIMPLE;
+           if (! SIZE_ONLY && (U8) *(RExC_parse + 1) == '{') {
+               ckWARNregdep(RExC_parse, "\"\\b{\" is deprecated; use \"\\b\\{\" instead");
+           }
            goto finish_meta_pat;
        case 'B':
            RExC_seen_zerolen++;
@@ -8076,6 +8079,9 @@ tryagain:
            ret = reg_node(pRExC_state, op);
            FLAGS(ret) = get_regex_charset(RExC_flags);
            *flagp |= SIMPLE;
+           if (! SIZE_ONLY && (U8) *(RExC_parse + 1) == '{') {
+               ckWARNregdep(RExC_parse, "\"\\B{\" is deprecated; use \"\\B\\{\" instead");
+           }
            goto finish_meta_pat;
        case 's':
            switch (get_regex_charset(RExC_flags)) {
index b318784..3481dff 100644 (file)
@@ -57,14 +57,20 @@ Unrecognized escape \m passed through in regex; marked by <-- HERE in m/a\m <--
 use warnings 'regexp';
 "foo" =~ /\q/;
 "foo" =~ /\q{/;
+"foo" =~ /a\b{cde/;
+"foo" =~ /a\B{cde/;
 "bar" =~ /\_/;
 no warnings 'regexp';
 "foo" =~ /\q/;
 "foo" =~ /\q{/;
+"foo" =~ /a\b{cde/;
+"foo" =~ /a\B{cde/;
 "bar" =~ /\_/;
 EXPECT
 Unrecognized escape \q passed through in regex; marked by <-- HERE in m/\q <-- HERE / at - line 4.
 Unrecognized escape \q{ passed through in regex; marked by <-- HERE in m/\q{ <-- HERE / at - line 5.
+"\b{" is deprecated; use "\b\{" instead in regex; marked by <-- HERE in m/a\ <-- HERE b{cde/ at - line 6.
+"\B{" is deprecated; use "\B\{" instead in regex; marked by <-- HERE in m/a\ <-- HERE B{cde/ at - line 7.
 ########
 # regcomp.c [S_regpposixcc S_checkposixcc]
 #