Re: [ID 20010814.004] pos() doesn't work when using =~m// in list context
authorHugo van der Sanden <hv@crypt.org>
Thu, 16 Aug 2001 18:50:01 +0000 (19:50 +0100)
committerJarkko Hietaniemi <jhi@iki.fi>
Fri, 17 Aug 2001 01:50:01 +0000 (01:50 +0000)
Message-Id: <200108161750.f7GHo1l22207@crypt.compulink.co.uk>

p4raw-id: //depot/perl@11696

pp_hot.c
t/op/pat.t

index db4c3fb..0f4a693 100644 (file)
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -1336,6 +1336,22 @@ play_it_again:
            }
        }
        if (global) {
+           if (pm->op_pmflags & PMf_CONTINUE) {
+               MAGIC* mg = 0;
+               if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
+                   mg = mg_find(TARG, PERL_MAGIC_regex_global);
+               if (!mg) {
+                   sv_magic(TARG, (SV*)0, PERL_MAGIC_regex_global, Nullch, 0);
+                   mg = mg_find(TARG, PERL_MAGIC_regex_global);
+               }
+               if (rx->startp[0] != -1) {
+                   mg->mg_len = rx->endp[0];
+                   if (rx->startp[0] == rx->endp[0])
+                       mg->mg_flags |= MGf_MINMATCH;
+                   else
+                       mg->mg_flags &= ~MGf_MINMATCH;
+               }
+           }
            had_zerolen = (rx->startp[0] != -1
                           && rx->startp[0] == rx->endp[0]);
            PUTBACK;                    /* EVAL blocks may use stack */
index bed2f37..d2d3205 100755 (executable)
@@ -6,7 +6,7 @@
 
 $| = 1;
 
-print "1..683\n";
+print "1..684\n";
 
 BEGIN {
     chdir 't' if -d 't';
@@ -1979,3 +1979,11 @@ print "ok 682\n" if @a == 9 && "@a" eq "f o o \n $a $b b a r";
 @a = ("foo\n\x{100}bar" =~ /\C/gs);
 print "ok 683\n" if @a == 9 && "@a" eq "f o o \n $a $b b a r";
 
+{
+    # [ID 20010814.004] pos() doesn't work when using =~m// in list context
+    $_ = "ababacadaea";
+    $a = join ":", /b./gc;
+    $b = join ":", /a./gc;
+    $c = pos;
+    print "$a $b $c" eq 'ba:ba ad:ae 10' ? "ok 684\n" : "not ok 684\t# $a $b $c\n";
+}