Fix bug #27940 : \cX escapes weren't working correctly in regular
Rafael Garcia-Suarez [Fri, 2 Apr 2004 15:40:15 +0000 (15:40 +0000)]
expression ranges.

p4raw-id: //depot/perl@22641

t/op/pat.t
toke.c

index 13dc180..9907149 100755 (executable)
@@ -6,7 +6,7 @@
 
 $| = 1;
 
-print "1..1056\n";
+print "1..1063\n";
 
 BEGIN {
     chdir 't' if -d 't';
@@ -3269,5 +3269,13 @@ ok("a-bc" eq eval {
        "$x-$y";
 }, 'captures can move backwards in string');
 
-# last test 1056
+# perl #27940: \cA not recognized in character classes
+ok("a\cAb" =~ /\cA/, '\cA in pattern');
+ok("a\cAb" =~ /[\cA]/, '\cA in character class');
+ok("a\cAb" =~ /[\cA-\cB]/, '\cA in character class range');
+ok("abc" =~ /[^\cA-\cB]/, '\cA in negated character class range');
+ok("a\cBb" =~ /[\cA-\cC]/, '\cB in character class range');
+ok("a\cCbc" =~ /[^\cA-\cB]/, '\cC in negated character class range');
+ok("a\cAb" =~ /(??{"\cA"})/, '\cA in ??{} pattern');
 
+# last test 1063
diff --git a/toke.c b/toke.c
index e27e32c..e8c1073 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -1220,7 +1220,7 @@ S_scan_const(pTHX_ char *start)
 
     const char *leaveit =      /* set of acceptably-backslashed characters */
        PL_lex_inpat
-           ? "\\.^$@AGZdDwWsSbBpPXC+*?|()-nrtfeaxcz0123456789[{]} \t\n\r\f\v#"
+           ? "\\.^$@AGZdDwWsSbBpPXC+*?|()-nrtfeaxz0123456789[{]} \t\n\r\f\v#"
            : "";
 
     if (PL_lex_inwhat == OP_TRANS && PL_sublex_info.sub_op) {