This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
add tests for $1 modified compiling code block
authorDavid Mitchell <davem@iabyn.com>
Mon, 4 Jun 2012 13:57:56 +0000 (14:57 +0100)
committerDavid Mitchell <davem@iabyn.com>
Wed, 13 Jun 2012 12:32:55 +0000 (13:32 +0100)
When compiling a run-time code-block, $1 etc should be protected against
any modifications that happen during compilation, e.g. via BEGIN

t/re/pat_re_eval.t

index 22a1ec9..d892a5e 100644 (file)
@@ -23,7 +23,7 @@ BEGIN {
 }
 
 
 }
 
 
-plan tests => 452;  # Update this when adding/deleting tests.
+plan tests => 454;  # Update this when adding/deleting tests.
 
 run_tests() unless caller;
 
 
 run_tests() unless caller;
 
@@ -976,6 +976,15 @@ sub run_tests {
        ok("foo" =~ /^(?(?{@a})foo|bar)$/, '(?(?{})|) in scalar context');
     }
 
        ok("foo" =~ /^(?(?{@a})foo|bar)$/, '(?(?{})|) in scalar context');
     }
 
+    # BEGIN in compiled blocks shouldn't mess with $1 et al
+
+    {
+       use re 'eval';
+       my $code1 = '(B)(??{ BEGIN { "X" =~ /X/ } $1})(C)';
+       ok("ABBCA" =~ /^(.)(??{$code1})\1$/, '(?{}) BEGIN and $1');
+       my $code2 = '(B)(??{ BEGIN { "X" =~ /X/ } $1 =~ /(.)/ ? $1 : ""})(C)';
+       ok("ABBCA" =~ /^(.)(??{$code2})\1$/, '(?{}) BEGIN and $1 mark 2');
+    }
 
 
 } # End of sub run_tests
 
 
 } # End of sub run_tests