perl 5.0 alpha 6
[p5sagit/p5-mst-13.2.git] / t / op / goto.t
1 #!./perl
2
3 # $RCSfile: goto.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:56 $
4
5 # "This IS structured code.  It's just randomly structured."
6
7 print "1..9\n";
8
9 while ($?) {
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 }
21 goto label1;
22
23 $foo = 3;
24
25 label2:
26 print "#1\t:$foo: == 2\n";
27 if ($foo == 2) {print "ok 1\n";} else {print "not ok 1\n";}
28 goto label3;
29
30 label4:
31 print "#2\t:$foo: == 4\n";
32 if ($foo == 4) {print "ok 2\n";} else {print "not ok 2\n";}
33
34 $x = `./perl -e 'goto foo;' 2>&1`;
35 if ($x =~ /label/) {print "ok 3\n";} else {print "not ok 3\n";}
36
37 sub foo {
38     goto bar;
39     print "not ok 4\n";
40     return;
41 bar:
42     print "ok 4\n";
43 }
44
45 &foo;
46
47 sub bar {
48     $x = 'bypass';
49     eval "goto $x";
50 }
51
52 &bar;
53 exit;
54
55 FINALE:
56 print "ok 9\n";
57 exit;
58
59 bypass:
60 print "ok 5\n";
61
62 # Test autoloading mechanism.
63
64 sub two {
65     ($pack, $file, $line) = caller;     # Should indicate original call stats.
66     print "@_ $pack $file $line" eq "1 2 3 main $FILE $LINE"
67         ? "ok 7\n"
68         : "not ok 7\n";
69 }
70
71 sub one {
72     eval <<'END';
73     sub one { print "ok 6\n"; goto &two; print "not ok 6\n"; }
74 END
75     goto &one;
76 }
77
78 $FILE = __FILE__;
79 $LINE = __LINE__ + 1;
80 &one(1,2,3);
81
82 $wherever = NOWHERE;
83 eval { goto $wherever };
84 print $@ =~ /Can't find label NOWHERE/ ? "ok 8\n" : "not ok 8\n";
85
86 $wherever = FINALE;
87 goto $wherever;