diff options
Diffstat (limited to 't/re/qr.t')
-rw-r--r-- | t/re/qr.t | 62 |
1 files changed, 61 insertions, 1 deletions
@@ -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|; +} |