This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
applied patch, tweak for threads awareness
[perl5.git] / t / op / goto.t
CommitLineData
8d063cd8
LW
1#!./perl
2
79072805 3# $RCSfile: goto.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:56 $
8d063cd8 4
8990e307
LW
5# "This IS structured code. It's just randomly structured."
6
7print "1..9\n";
8d063cd8 8
79072805 9while ($?) {
8d063cd8
LW
10 $foo = 1;
11 label1:
12 $foo = 2;
13 goto label2;
14} continue {
15 $foo = 0;
16 goto label4;
17 label3:
18 $foo = 4;
19 goto label4;
20}
21goto label1;
22
23$foo = 3;
24
25label2:
26print "#1\t:$foo: == 2\n";
27if ($foo == 2) {print "ok 1\n";} else {print "not ok 1\n";}
28goto label3;
29
30label4:
31print "#2\t:$foo: == 4\n";
32if ($foo == 4) {print "ok 2\n";} else {print "not ok 2\n";}
33
68dc0745 34$PERL = ($^O eq 'MSWin32') ? '.\perl' : './perl';
35$x = `$PERL -e "goto foo;" 2>&1`;
a0d0e21e
LW
36if ($x =~ /DCL-W-NOCOMD/) { $x = `\$ mcr sys\$disk:[]perl. -e "goto foo;"`; }
37
8d063cd8 38if ($x =~ /label/) {print "ok 3\n";} else {print "not ok 3\n";}
79072805
LW
39
40sub foo {
41 goto bar;
42 print "not ok 4\n";
43 return;
44bar:
45 print "ok 4\n";
46}
47
48&foo;
49
50sub bar {
8990e307
LW
51 $x = 'bypass';
52 eval "goto $x";
79072805
LW
53}
54
55&bar;
56exit;
8990e307
LW
57
58FINALE:
59print "ok 9\n";
60exit;
61
62bypass:
79072805 63print "ok 5\n";
8990e307
LW
64
65# Test autoloading mechanism.
66
67sub two {
68 ($pack, $file, $line) = caller; # Should indicate original call stats.
69 print "@_ $pack $file $line" eq "1 2 3 main $FILE $LINE"
70 ? "ok 7\n"
71 : "not ok 7\n";
72}
73
74sub one {
75 eval <<'END';
76 sub one { print "ok 6\n"; goto &two; print "not ok 6\n"; }
77END
78 goto &one;
79}
80
81$FILE = __FILE__;
82$LINE = __LINE__ + 1;
83&one(1,2,3);
84
85$wherever = NOWHERE;
86eval { goto $wherever };
87print $@ =~ /Can't find label NOWHERE/ ? "ok 8\n" : "not ok 8\n";
88
89$wherever = FINALE;
90goto $wherever;