#!/usr/bin/perl -- use strict; use warnings; use diagnostics; sub GOOD { LINE: while(){ next LINE; last LINE; } } sub GOOOD { goto &GOOD; } sub GOOOOD { my $GOOD = 'GOOD'; goto &$GOOD; } sub REALLY { goto &GOOD; } sub GOODREALLY { goto sub { goto &REALLY; }; } sub GOODREHEALLY { my $GOO = sub { goto &REALLY; }; goto $GOO; } sub GOODREHEHEALLY { goto do { sub { goto &REALLY; }; }; } sub BAD { goto LINE; } sub BAAD { my $LINE = 'LINE'; goto $LINE; } sub BAAAD { goto ("LINE", "LINE", "LINE")[@_]; } BAAAAD: { goto &REALLy; # Can't goto subroutine outside a subroutine } goto END; ## bad :END exit( 0 );