goto
LABEL
goto
EXPR
goto
&NAME
goto
LABEL
finds the statement labeled with
LABEL
and resumes execution there. It may not be used to go into any
construct that requires initialization, such as a subroutine or a
foreach
loop. It also can't be used to go into a construct that is
optimized away. It can be used to go almost anywhere else within the
dynamic scope,[
]
including out of subroutines, but for that purpose it's
usually better to use some other construct such as
last
or
die
.
The author of Perl
has never felt the need to use this form of
goto
(in Perl, that is - C
is another matter).
Going to even greater heights of orthogonality (and depths of idiocy),
Perl allows
goto
EXPR
, which expects
EXPR
to evaluate to a label name, whose scope is
guaranteed
to be unresolvable
until run-time since the label is unknown when the statement is compiled.
This allows for computed gotos per FORTRAN, but isn't necessarily
recommended[
]
if you're optimizing for maintainability:
goto +("FOO", "BAR", "GLARCH")[$i];
goto
&
NAME
is highly magical, substituting a
call to the named subroutine for the currently running subroutine.
This is used by
AUTOLOAD
subroutines that wish to load another
subroutine and then pretend that this subroutine - and not the original
one - had been called
in the first place (except that any modifications to
@_
in the
original subroutine are propagated to the replacement subroutine). After the
goto
, not even
caller
will be able to tell that the original
routine was called first.