Commit | Line | Data |
---|---|---|
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 | ||
7 | print "1..9\n"; | |
8d063cd8 | 8 | |
79072805 | 9 | while ($?) { |
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 | } | |
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 | ||
68dc0745 | 34 | $PERL = ($^O eq 'MSWin32') ? '.\perl' : './perl'; |
35 | $x = `$PERL -e "goto foo;" 2>&1`; | |
a0d0e21e LW |
36 | if ($x =~ /DCL-W-NOCOMD/) { $x = `\$ mcr sys\$disk:[]perl. -e "goto foo;"`; } |
37 | ||
8d063cd8 | 38 | if ($x =~ /label/) {print "ok 3\n";} else {print "not ok 3\n";} |
79072805 LW |
39 | |
40 | sub foo { | |
41 | goto bar; | |
42 | print "not ok 4\n"; | |
43 | return; | |
44 | bar: | |
45 | print "ok 4\n"; | |
46 | } | |
47 | ||
48 | &foo; | |
49 | ||
50 | sub bar { | |
8990e307 LW |
51 | $x = 'bypass'; |
52 | eval "goto $x"; | |
79072805 LW |
53 | } |
54 | ||
55 | &bar; | |
56 | exit; | |
8990e307 LW |
57 | |
58 | FINALE: | |
59 | print "ok 9\n"; | |
60 | exit; | |
61 | ||
62 | bypass: | |
79072805 | 63 | print "ok 5\n"; |
8990e307 LW |
64 | |
65 | # Test autoloading mechanism. | |
66 | ||
67 | sub 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 | ||
74 | sub one { | |
75 | eval <<'END'; | |
76 | sub one { print "ok 6\n"; goto &two; print "not ok 6\n"; } | |
77 | END | |
78 | goto &one; | |
79 | } | |
80 | ||
81 | $FILE = __FILE__; | |
82 | $LINE = __LINE__ + 1; | |
83 | &one(1,2,3); | |
84 | ||
85 | $wherever = NOWHERE; | |
86 | eval { goto $wherever }; | |
87 | print $@ =~ /Can't find label NOWHERE/ ? "ok 8\n" : "not ok 8\n"; | |
88 | ||
89 | $wherever = FINALE; | |
90 | goto $wherever; |