summaryrefslogtreecommitdiff
path: root/t/re/qr.t
diff options
context:
space:
mode:
Diffstat (limited to 't/re/qr.t')
-rw-r--r--t/re/qr.t62
1 files changed, 61 insertions, 1 deletions
diff --git a/t/re/qr.t b/t/re/qr.t
index ff9449e759..6d2baeb42c 100644
--- a/t/re/qr.t
+++ b/t/re/qr.t
@@ -6,8 +6,68 @@ BEGIN {
require './test.pl';
}
-plan tests => 1;
+plan tests => 4;
my $rx = qr//;
is(ref $rx, "Regexp", "qr// blessed into `Regexp' by default");
+
+
+# Make sure /$qr/ doesn’t clobber match vars before the match (bug 70764).
+{
+ my $output = '';
+ my $rx = qr/o/;
+ my $a = "ooaoaoao";
+
+ my $foo = 0;
+ $foo += () = ($a =~ /$rx/g);
+ $output .= "$foo\n"; # correct
+
+ $foo = 0;
+ for ($foo += ($a =~ /o/); $' && ($' =~ /o/) && ($foo++) ; ) { ; }
+ $output .= "1: $foo\n"; # No error
+
+ $foo = 0;
+ for ($foo += ($a =~ /$rx/); $' && ($' =~ /$rx/) && ($foo++) ; ) { ; }
+ $output .= "2: $foo\n"; # initialization warning, incorrect results
+
+ is $output, "5\n1: 5\n2: 5\n", '$a_match_var =~ /$qr/';
+}
+for my $_($'){
+ my $output = '';
+ my $rx = qr/o/;
+ my $a = "ooaoaoao";
+
+ my $foo = 0;
+ $foo += () = ($a =~ /$rx/g);
+ $output .= "$foo\n"; # correct
+
+ $foo = 0;
+ for ($foo += ($a =~ /o/); $' && /o/ && ($foo++) ; ) { ; }
+ $output .= "1: $foo\n"; # No error
+
+ $foo = 0;
+ for ($foo += ($a =~ /$rx/); $' && /$rx/ && ($foo++) ; ) { ; }
+ $output .= "2: $foo\n"; # initialization warning, incorrect results
+
+ is $output, "5\n1: 5\n2: 5\n", '/$qr/ with my $_ aliased to a match var';
+}
+for($'){
+ my $output = '';
+ my $rx = qr/o/;
+ my $a = "ooaoaoao";
+
+ my $foo = 0;
+ $foo += () = ($a =~ /$rx/g);
+ $output .= "$foo\n"; # correct
+
+ $foo = 0;
+ for ($foo += ($a =~ /o/); $' && /o/ && ($foo++) ; ) { ; }
+ $output .= "1: $foo\n"; # No error
+
+ $foo = 0;
+ for ($foo += ($a =~ /$rx/); $' && /$rx/ && ($foo++) ; ) { ; }
+ $output .= "2: $foo\n"; # initialization warning, incorrect results
+
+ is $output, "5\n1: 5\n2: 5\n", q|/$qr/ with $'_ aliased to a match var|;
+}