#!./perl # $RCSfile: goto.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:56 $ # "This IS structured code. It's just randomly structured." print "1..9\n"; while ($?) { $foo = 1; label1: $foo = 2; goto label2; } continue { $foo = 0; goto label4; label3: $foo = 4; goto label4; } goto label1; $foo = 3; label2: print "#1\t:$foo: == 2\n"; if ($foo == 2) {print "ok 1\n";} else {print "not ok 1\n";} goto label3; label4: print "#2\t:$foo: == 4\n"; if ($foo == 4) {print "ok 2\n";} else {print "not ok 2\n";} $x = `./perl -e 'goto foo;' 2>&1`; if ($x =~ /DCL-W-NOCOMD/) { $x = `\$ mcr sys\$disk:[]perl. -e "goto foo;"`; } if ($x =~ /label/) {print "ok 3\n";} else {print "not ok 3\n";} sub foo { goto bar; print "not ok 4\n"; return; bar: print "ok 4\n"; } &foo; sub bar { $x = 'bypass'; eval "goto $x"; } &bar; exit; FINALE: print "ok 9\n"; exit; bypass: print "ok 5\n"; # Test autoloading mechanism. sub two { ($pack, $file, $line) = caller; # Should indicate original call stats. print "@_ $pack $file $line" eq "1 2 3 main $FILE $LINE" ? "ok 7\n" : "not ok 7\n"; } sub one { eval <<'END'; sub one { print "ok 6\n"; goto &two; print "not ok 6\n"; } END goto &one; } $FILE = __FILE__; $LINE = __LINE__ + 1; &one(1,2,3); $wherever = NOWHERE; eval { goto $wherever }; print $@ =~ /Can't find label NOWHERE/ ? "ok 8\n" : "not ok 8\n"; $wherever = FINALE; goto $wherever;