This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Re: redo LOOP not restoring $` $' $&
[perl5.git] / t / cmd / while.t
CommitLineData
8d063cd8
LW
1#!./perl
2
79072805 3# $RCSfile: while.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:15 $
8d063cd8 4
2c3f7d30 5print "1..15\n";
8d063cd8 6
a0d0e21e 7open (tmp,'>Cmd_while.tmp') || die "Can't create Cmd_while.tmp.";
8d063cd8
LW
8print tmp "tvi925\n";
9print tmp "tvi920\n";
10print tmp "vt100\n";
11print tmp "Amiga\n";
12print tmp "paper\n";
13close tmp;
14
15# test "last" command
16
a0d0e21e 17open(fh,'Cmd_while.tmp') || die "Can't open Cmd_while.tmp.";
8d063cd8
LW
18while (<fh>) {
19 last if /vt100/;
20}
a687059c 21if (!eof && /vt100/) {print "ok 1\n";} else {print "not ok 1 $_\n";}
8d063cd8
LW
22
23# test "next" command
24
25$bad = '';
a0d0e21e 26open(fh,'Cmd_while.tmp') || die "Can't open Cmd_while.tmp.";
8d063cd8
LW
27while (<fh>) {
28 next if /vt100/;
29 $bad = 1 if /vt100/;
30}
31if (!eof || /vt100/ || $bad) {print "not ok 2\n";} else {print "ok 2\n";}
32
33# test "redo" command
34
35$bad = '';
a0d0e21e 36open(fh,'Cmd_while.tmp') || die "Can't open Cmd_while.tmp.";
8d063cd8
LW
37while (<fh>) {
38 if (s/vt100/VT100/g) {
39 s/VT100/Vt100/g;
40 redo;
41 }
42 $bad = 1 if /vt100/;
43 $bad = 1 if /VT100/;
44}
45if (!eof || $bad) {print "not ok 3\n";} else {print "ok 3\n";}
46
47# now do the same with a label and a continue block
48
49# test "last" command
50
51$badcont = '';
a0d0e21e 52open(fh,'Cmd_while.tmp') || die "Can't open Cmd_while.tmp.";
8d063cd8
LW
53line: while (<fh>) {
54 if (/vt100/) {last line;}
55} continue {
56 $badcont = 1 if /vt100/;
57}
58if (!eof && /vt100/) {print "ok 4\n";} else {print "not ok 4\n";}
59if (!$badcont) {print "ok 5\n";} else {print "not ok 5\n";}
60
61# test "next" command
62
63$bad = '';
64$badcont = 1;
a0d0e21e 65open(fh,'Cmd_while.tmp') || die "Can't open Cmd_while.tmp.";
8d063cd8
LW
66entry: while (<fh>) {
67 next entry if /vt100/;
68 $bad = 1 if /vt100/;
69} continue {
70 $badcont = '' if /vt100/;
71}
72if (!eof || /vt100/ || $bad) {print "not ok 6\n";} else {print "ok 6\n";}
73if (!$badcont) {print "ok 7\n";} else {print "not ok 7\n";}
74
75# test "redo" command
76
77$bad = '';
78$badcont = '';
a0d0e21e 79open(fh,'Cmd_while.tmp') || die "Can't open Cmd_while.tmp.";
8d063cd8
LW
80loop: while (<fh>) {
81 if (s/vt100/VT100/g) {
82 s/VT100/Vt100/g;
83 redo loop;
84 }
85 $bad = 1 if /vt100/;
86 $bad = 1 if /VT100/;
87} continue {
88 $badcont = 1 if /vt100/;
89}
90if (!eof || $bad) {print "not ok 8\n";} else {print "ok 8\n";}
91if (!$badcont) {print "ok 9\n";} else {print "not ok 9\n";}
92
bbad3607 93close(fh) || die "Can't close Cmd_while.tmp.";
a0d0e21e 94unlink 'Cmd_while.tmp' || `/bin/rm Cmd_While.tmp`;
8d063cd8
LW
95
96#$x = 0;
97#while (1) {
98# if ($x > 1) {last;}
99# next;
100#} continue {
101# if ($x++ > 10) {last;}
102# next;
103#}
104#
105#if ($x < 10) {print "ok 10\n";} else {print "not ok 10\n";}
106
107$i = 9;
108{
109 $i++;
110}
111print "ok $i\n";
2c3f7d30
GB
112
113# Check curpm is reset when jumping out of a scope
114'abc' =~ /b/;
115WHILE:
116while (1) {
117 $i++;
118 print "#$`,$&,$',\nnot " unless $` . $& . $' eq "abc";
119 print "ok $i\n";
120 { # Localize changes to $` and friends
121 'end' =~ /end/;
122 redo WHILE if $i == 11;
123 next WHILE if $i == 12;
124 # 13 do a normal loop
125 last WHILE if $i == 14;
126 }
127}
128$i++;
129print "not " unless $` . $& . $' eq "abc";
130print "ok $i\n";