This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Fix for #71506: work around possible gcc bug
[perl5.git] / t / re / qr.t
CommitLineData
9bc340e7
AB
1#!./perl -w
2
3BEGIN {
4 chdir 't' if -d 't';
5 @INC = '../lib';
6 require './test.pl';
7}
8
69dc4b30 9plan tests => 4;
9bc340e7
AB
10
11my $rx = qr//;
12
13is(ref $rx, "Regexp", "qr// blessed into `Regexp' by default");
69dc4b30
FC
14
15
16# Make sure /$qr/ doesn’t clobber match vars before the match (bug 70764).
17{
18 my $output = '';
19 my $rx = qr/o/;
20 my $a = "ooaoaoao";
21
22 my $foo = 0;
23 $foo += () = ($a =~ /$rx/g);
24 $output .= "$foo\n"; # correct
25
26 $foo = 0;
27 for ($foo += ($a =~ /o/); $' && ($' =~ /o/) && ($foo++) ; ) { ; }
28 $output .= "1: $foo\n"; # No error
29
30 $foo = 0;
31 for ($foo += ($a =~ /$rx/); $' && ($' =~ /$rx/) && ($foo++) ; ) { ; }
32 $output .= "2: $foo\n"; # initialization warning, incorrect results
33
34 is $output, "5\n1: 5\n2: 5\n", '$a_match_var =~ /$qr/';
35}
36for my $_($'){
37 my $output = '';
38 my $rx = qr/o/;
39 my $a = "ooaoaoao";
40
41 my $foo = 0;
42 $foo += () = ($a =~ /$rx/g);
43 $output .= "$foo\n"; # correct
44
45 $foo = 0;
46 for ($foo += ($a =~ /o/); $' && /o/ && ($foo++) ; ) { ; }
47 $output .= "1: $foo\n"; # No error
48
49 $foo = 0;
50 for ($foo += ($a =~ /$rx/); $' && /$rx/ && ($foo++) ; ) { ; }
51 $output .= "2: $foo\n"; # initialization warning, incorrect results
52
53 is $output, "5\n1: 5\n2: 5\n", '/$qr/ with my $_ aliased to a match var';
54}
55for($'){
56 my $output = '';
57 my $rx = qr/o/;
58 my $a = "ooaoaoao";
59
60 my $foo = 0;
61 $foo += () = ($a =~ /$rx/g);
62 $output .= "$foo\n"; # correct
63
64 $foo = 0;
65 for ($foo += ($a =~ /o/); $' && /o/ && ($foo++) ; ) { ; }
66 $output .= "1: $foo\n"; # No error
67
68 $foo = 0;
69 for ($foo += ($a =~ /$rx/); $' && /$rx/ && ($foo++) ; ) { ; }
70 $output .= "2: $foo\n"; # initialization warning, incorrect results
71
72 is $output, "5\n1: 5\n2: 5\n", q|/$qr/ with $'_ aliased to a match var|;
73}