[perl #18209] bug in regex s/\s$word\s/ /gi; and $&
authoryves orton <unknown>
Fri, 17 Nov 2006 10:17:48 +0000 (02:17 -0800)
committerH.Merijn Brand <h.m.brand@xs4all.nl>
Fri, 17 Nov 2006 20:46:20 +0000 (20:46 +0000)
From: "yves orton via RT" <perlbug-followup@perl.org>
Message-ID: <rt-3.5.HEAD-1713-1163787467-1300.18209-15-0@perl.org>

p4raw-id: //depot/perl@29312

mg.c
t/op/pat.t

diff --git a/mg.c b/mg.c
index f82aa0d..67f1453 100644 (file)
--- a/mg.c
+++ b/mg.c
@@ -497,9 +497,18 @@ Perl_magic_regdata_cnt(pTHX_ SV *sv, MAGIC *mg)
     if (PL_curpm) {
        register const REGEXP * const rx = PM_GETRE(PL_curpm);
        if (rx) {
-           return mg->mg_obj
-               ? rx->nparens       /* @+ */
-               : rx->lastparen;    /* @- */
+           if (mg->mg_obj) {                   /* @+ */
+               /* return the number possible */
+               return rx->nparens;
+           } else {                            /* @- */
+               I32 paren = rx->lastparen;
+
+               /* return the last filled */
+               while ( paren >= 0 &&
+                   rx->startp[paren] == -1 || rx->endp[paren] == -1)
+               paren--;
+               return (U32)paren;
+           }
        }
     }
 
index 8f2ce2a..e206af7 100755 (executable)
@@ -4064,6 +4064,13 @@ for my $c ("z", "\0", "!", chr(254), chr(256)) {
     }
 }
 {
+    local $Message = "RT#22614";
+    local $_='ab';
+    our @len=();
+    /(.){1,}(?{push @len,0+@-})(.){1,}(?{})^/;
+    iseq("@len","2 2 2");
+}
+{
     local $Message = "RT#18209";
     my $text = ' word1 word2 word3 word4 word5 word6 ';