gotoLABELgotoEXPRgoto &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,[
4
]
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).
[4] This means that if it doesn't find the label in the current routine, it looks back through the routines that called the current routine for the label, thus making it nearly impossible to maintain your program.
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[
5
]
if you're optimizing for maintainability:
[5] Understatement is reputed to be funny, so we thought we'd try one here.
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.
[ Library Home | Perl in a Nutshell | Learning Perl | Learning Perl on Win32 | Programming Perl | Advanced Perl Programming | Perl Cookbook ]