This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Re: redo LOOP not restoring $` $' $&
authorGraham Barr <gbarr@pobox.com>
Sat, 17 Oct 1998 23:05:18 +0000 (18:05 -0500)
committerGraham Barr <gbarr@pobox.com>
Sun, 25 Oct 1998 04:56:47 +0000 (04:56 +0000)
Message-ID: <19981017230518.K510@pobox.com>

p4raw-id: //depot/maint-5.005/perl@2053

cop.h
t/cmd/while.t

diff --git a/cop.h b/cop.h
index 9c8eae6..6c5021c 100644 (file)
--- a/cop.h
+++ b/cop.h
@@ -205,7 +205,8 @@ struct block {
        PL_stack_sp      = PL_stack_base + cx->blk_oldsp,                       \
        PL_markstack_ptr = PL_markstack + cx->blk_oldmarksp,            \
        PL_scopestack_ix = cx->blk_oldscopesp,                          \
-       PL_retstack_ix   = cx->blk_oldretsp
+       PL_retstack_ix   = cx->blk_oldretsp,                            \
+       PL_curpm         = cx->blk_oldpm
 
 /* substitution context */
 struct subst {
index c6e464d..392c137 100755 (executable)
@@ -2,7 +2,7 @@
 
 # $RCSfile: while.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:15 $
 
-print "1..10\n";
+print "1..15\n";
 
 open (tmp,'>Cmd_while.tmp') || die "Can't create Cmd_while.tmp.";
 print tmp "tvi925\n";
@@ -109,3 +109,22 @@ $i = 9;
     $i++;
 }
 print "ok $i\n";
+
+# Check curpm is reset when jumping out of a scope
+'abc' =~ /b/;
+WHILE:
+while (1) {
+  $i++;
+  print "#$`,$&,$',\nnot " unless $` . $& . $' eq "abc";
+  print "ok $i\n";
+  {                             # Localize changes to $` and friends
+    'end' =~ /end/;
+    redo WHILE if $i == 11;
+    next WHILE if $i == 12;
+    # 13 do a normal loop
+    last WHILE if $i == 14;
+  }
+}
+$i++;
+print "not " unless $` . $& . $' eq "abc";
+print "ok $i\n";