This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[perl #36328] Until Statement Undocumented
[perl5.git] / pod / perlsyn.pod
CommitLineData
a0d0e21e
LW
1=head1 NAME
2
3perlsyn - Perl syntax
4
5=head1 DESCRIPTION
6
6014d0cb
MS
7A Perl program consists of a sequence of declarations and statements
8which run from the top to the bottom. Loops, subroutines and other
9control structures allow you to jump around within the code.
10
11Perl is a B<free-form> language, you can format and indent it however
12you like. Whitespace mostly serves to separate tokens, unlike
13languages like Python where it is an important part of the syntax.
14
15Many of Perl's syntactic elements are B<optional>. Rather than
110b9c83 16requiring you to put parentheses around every function call and
6014d0cb
MS
17declare every variable, you can often leave such explicit elements off
18and Perl will figure out what you meant. This is known as B<Do What I
19Mean>, abbreviated B<DWIM>. It allows programmers to be B<lazy> and to
110b9c83 20code in a style with which they are comfortable.
6014d0cb
MS
21
22Perl B<borrows syntax> and concepts from many languages: awk, sed, C,
23Bourne Shell, Smalltalk, Lisp and even English. Other
24languages have borrowed syntax from Perl, particularly its regular
25expression extensions. So if you have programmed in another language
26you will see familiar pieces in Perl. They often work the same, but
27see L<perltrap> for information about how they differ.
a0d0e21e 28
0b8d69e9
GS
29=head2 Declarations
30
cf48932e
SF
31The only things you need to declare in Perl are report formats and
32subroutines (and sometimes not even subroutines). A variable holds
33the undefined value (C<undef>) until it has been assigned a defined
34value, which is anything other than C<undef>. When used as a number,
35C<undef> is treated as C<0>; when used as a string, it is treated as
36the empty string, C<"">; and when used as a reference that isn't being
37assigned to, it is treated as an error. If you enable warnings,
38you'll be notified of an uninitialized value whenever you treat
39C<undef> as a string or a number. Well, usually. Boolean contexts,
40such as:
7bd1983c
EM
41
42 my $a;
43 if ($a) {}
44
a6b1f6d8
RGS
45are exempt from warnings (because they care about truth rather than
46definedness). Operators such as C<++>, C<-->, C<+=>,
7bd1983c
EM
47C<-=>, and C<.=>, that operate on undefined left values such as:
48
49 my $a;
50 $a++;
51
52are also always exempt from such warnings.
0b8d69e9 53
a0d0e21e
LW
54A declaration can be put anywhere a statement can, but has no effect on
55the execution of the primary sequence of statements--declarations all
56take effect at compile time. Typically all the declarations are put at
54310121 57the beginning or the end of the script. However, if you're using
0b8d69e9
GS
58lexically-scoped private variables created with C<my()>, you'll
59have to make sure
4633a7c4 60your format or subroutine definition is within the same block scope
5f05dabc 61as the my if you expect to be able to access those private variables.
a0d0e21e 62
4633a7c4
LW
63Declaring a subroutine allows a subroutine name to be used as if it were a
64list operator from that point forward in the program. You can declare a
54310121 65subroutine without defining it by saying C<sub name>, thus:
a0d0e21e 66
54310121 67 sub myname;
a0d0e21e
LW
68 $me = myname $0 or die "can't get myname";
69
1f950eb4
JB
70Note that myname() functions as a list operator, not as a unary operator;
71so be careful to use C<or> instead of C<||> in this case. However, if
54310121 72you were to declare the subroutine as C<sub myname ($)>, then
02c45c47 73C<myname> would function as a unary operator, so either C<or> or
54310121 74C<||> would work.
a0d0e21e 75
4633a7c4
LW
76Subroutines declarations can also be loaded up with the C<require> statement
77or both loaded and imported into your namespace with a C<use> statement.
78See L<perlmod> for details on this.
a0d0e21e 79
4633a7c4
LW
80A statement sequence may contain declarations of lexically-scoped
81variables, but apart from declaring a variable name, the declaration acts
82like an ordinary statement, and is elaborated within the sequence of
83statements as if it were an ordinary statement. That means it actually
84has both compile-time and run-time effects.
a0d0e21e 85
6014d0cb
MS
86=head2 Comments
87
88Text from a C<"#"> character until the end of the line is a comment,
89and is ignored. Exceptions include C<"#"> inside a string or regular
90expression.
91
6ec4bd10 92=head2 Simple Statements
a0d0e21e
LW
93
94The only kind of simple statement is an expression evaluated for its
95side effects. Every simple statement must be terminated with a
96semicolon, unless it is the final statement in a block, in which case
f386e492
AMS
97the semicolon is optional. (A semicolon is still encouraged if the
98block takes up more than one line, because you may eventually add
cf48932e
SF
99another line.) Note that there are some operators like C<eval {}> and
100C<do {}> that look like compound statements, but aren't (they're just
101TERMs in an expression), and thus need an explicit termination if used
102as the last item in a statement.
103
104=head2 Truth and Falsehood
105
f92061c1
AMS
106The number 0, the strings C<'0'> and C<''>, the empty list C<()>, and
107C<undef> are all false in a boolean context. All other values are true.
52ea55c9
SP
108Negation of a true value by C<!> or C<not> returns a special false value.
109When evaluated as a string it is treated as C<''>, but as a number, it
110is treated as 0.
cf48932e 111
cf48932e 112=head2 Statement Modifiers
a0d0e21e
LW
113
114Any simple statement may optionally be followed by a I<SINGLE> modifier,
115just before the terminating semicolon (or block ending). The possible
116modifiers are:
117
118 if EXPR
119 unless EXPR
120 while EXPR
121 until EXPR
cf48932e
SF
122 foreach LIST
123
124The C<EXPR> following the modifier is referred to as the "condition".
125Its truth or falsehood determines how the modifier will behave.
126
127C<if> executes the statement once I<if> and only if the condition is
128true. C<unless> is the opposite, it executes the statement I<unless>
129the condition is true (i.e., if the condition is false).
130
131 print "Basset hounds got long ears" if length $ear >= 10;
132 go_outside() and play() unless $is_raining;
133
134The C<foreach> modifier is an iterator: it executes the statement once
135for each item in the LIST (with C<$_> aliased to each item in turn).
136
137 print "Hello $_!\n" foreach qw(world Dolly nurse);
138
139C<while> repeats the statement I<while> the condition is true.
140C<until> does the opposite, it repeats the statement I<until> the
141condition is true (or while the condition is false):
142
143 # Both of these count from 0 to 10.
144 print $i++ while $i <= 10;
145 print $j++ until $j > 10;
146
147The C<while> and C<until> modifiers have the usual "C<while> loop"
148semantics (conditional evaluated first), except when applied to a
149C<do>-BLOCK (or to the deprecated C<do>-SUBROUTINE statement), in
150which case the block executes once before the conditional is
151evaluated. This is so that you can write loops like:
a0d0e21e
LW
152
153 do {
4633a7c4 154 $line = <STDIN>;
a0d0e21e 155 ...
4633a7c4 156 } until $line eq ".\n";
a0d0e21e 157
5a964f20
TC
158See L<perlfunc/do>. Note also that the loop control statements described
159later will I<NOT> work in this construct, because modifiers don't take
160loop labels. Sorry. You can always put another block inside of it
161(for C<next>) or around it (for C<last>) to do that sort of thing.
f86cebdf 162For C<next>, just double the braces:
5a964f20
TC
163
164 do {{
165 next if $x == $y;
166 # do something here
167 }} until $x++ > $z;
168
f86cebdf 169For C<last>, you have to be more elaborate:
5a964f20
TC
170
171 LOOP: {
172 do {
173 last if $x = $y**2;
174 # do something here
175 } while $x++ <= $z;
176 }
a0d0e21e 177
457b36cb
MV
178B<NOTE:> The behaviour of a C<my> statement modified with a statement
179modifier conditional or loop construct (e.g. C<my $x if ...>) is
180B<undefined>. The value of the C<my> variable may be C<undef>, any
181previously assigned value, or possibly anything else. Don't rely on
182it. Future versions of perl might do something different from the
183version of perl you try it out on. Here be dragons.
184
6ec4bd10 185=head2 Compound Statements
a0d0e21e
LW
186
187In Perl, a sequence of statements that defines a scope is called a block.
188Sometimes a block is delimited by the file containing it (in the case
189of a required file, or the program as a whole), and sometimes a block
190is delimited by the extent of a string (in the case of an eval).
191
192But generally, a block is delimited by curly brackets, also known as braces.
193We will call this syntactic construct a BLOCK.
194
195The following compound statements may be used to control flow:
196
197 if (EXPR) BLOCK
198 if (EXPR) BLOCK else BLOCK
199 if (EXPR) BLOCK elsif (EXPR) BLOCK ... else BLOCK
200 LABEL while (EXPR) BLOCK
201 LABEL while (EXPR) BLOCK continue BLOCK
5ec6d87f
EA
202 LABEL until (EXPR) BLOCK
203 LABEL until (EXPR) BLOCK continue BLOCK
a0d0e21e 204 LABEL for (EXPR; EXPR; EXPR) BLOCK
748a9306 205 LABEL foreach VAR (LIST) BLOCK
b303ae78 206 LABEL foreach VAR (LIST) BLOCK continue BLOCK
a0d0e21e
LW
207 LABEL BLOCK continue BLOCK
208
209Note that, unlike C and Pascal, these are defined in terms of BLOCKs,
210not statements. This means that the curly brackets are I<required>--no
211dangling statements allowed. If you want to write conditionals without
212curly brackets there are several other ways to do it. The following
213all do the same thing:
214
215 if (!open(FOO)) { die "Can't open $FOO: $!"; }
216 die "Can't open $FOO: $!" unless open(FOO);
217 open(FOO) or die "Can't open $FOO: $!"; # FOO or bust!
218 open(FOO) ? 'hi mom' : die "Can't open $FOO: $!";
219 # a bit exotic, that last one
220
5f05dabc 221The C<if> statement is straightforward. Because BLOCKs are always
a0d0e21e
LW
222bounded by curly brackets, there is never any ambiguity about which
223C<if> an C<else> goes with. If you use C<unless> in place of C<if>,
224the sense of the test is reversed.
225
226The C<while> statement executes the block as long as the expression is
0eb389d5 227true (does not evaluate to the null string C<""> or C<0> or C<"0">).
b78218b7
GS
228The LABEL is optional, and if present, consists of an identifier followed
229by a colon. The LABEL identifies the loop for the loop control
230statements C<next>, C<last>, and C<redo>.
231If the LABEL is omitted, the loop control statement
4633a7c4
LW
232refers to the innermost enclosing loop. This may include dynamically
233looking back your call-stack at run time to find the LABEL. Such
9f1b1f2d 234desperate behavior triggers a warning if you use the C<use warnings>
a2293a43 235pragma or the B<-w> flag.
4633a7c4
LW
236
237If there is a C<continue> BLOCK, it is always executed just before the
6ec4bd10
MS
238conditional is about to be evaluated again. Thus it can be used to
239increment a loop variable, even when the loop has been continued via
240the C<next> statement.
4633a7c4
LW
241
242=head2 Loop Control
243
6ec4bd10 244The C<next> command starts the next iteration of the loop:
4633a7c4
LW
245
246 LINE: while (<STDIN>) {
247 next LINE if /^#/; # discard comments
248 ...
249 }
250
6ec4bd10 251The C<last> command immediately exits the loop in question. The
4633a7c4
LW
252C<continue> block, if any, is not executed:
253
254 LINE: while (<STDIN>) {
255 last LINE if /^$/; # exit when done with header
256 ...
257 }
258
259The C<redo> command restarts the loop block without evaluating the
260conditional again. The C<continue> block, if any, is I<not> executed.
261This command is normally used by programs that want to lie to themselves
262about what was just input.
263
264For example, when processing a file like F</etc/termcap>.
265If your input lines might end in backslashes to indicate continuation, you
266want to skip ahead and get the next record.
267
268 while (<>) {
269 chomp;
54310121 270 if (s/\\$//) {
271 $_ .= <>;
4633a7c4
LW
272 redo unless eof();
273 }
274 # now process $_
54310121 275 }
4633a7c4
LW
276
277which is Perl short-hand for the more explicitly written version:
278
54310121 279 LINE: while (defined($line = <ARGV>)) {
4633a7c4 280 chomp($line);
54310121 281 if ($line =~ s/\\$//) {
282 $line .= <ARGV>;
4633a7c4
LW
283 redo LINE unless eof(); # not eof(ARGV)!
284 }
285 # now process $line
54310121 286 }
4633a7c4 287
36e7a065
AMS
288Note that if there were a C<continue> block on the above code, it would
289get executed only on lines discarded by the regex (since redo skips the
290continue block). A continue block is often used to reset line counters
291or C<?pat?> one-time matches:
4633a7c4 292
5a964f20
TC
293 # inspired by :1,$g/fred/s//WILMA/
294 while (<>) {
295 ?(fred)? && s//WILMA $1 WILMA/;
296 ?(barney)? && s//BETTY $1 BETTY/;
297 ?(homer)? && s//MARGE $1 MARGE/;
298 } continue {
299 print "$ARGV $.: $_";
300 close ARGV if eof(); # reset $.
301 reset if eof(); # reset ?pat?
4633a7c4
LW
302 }
303
a0d0e21e
LW
304If the word C<while> is replaced by the word C<until>, the sense of the
305test is reversed, but the conditional is still tested before the first
306iteration.
307
5a964f20
TC
308The loop control statements don't work in an C<if> or C<unless>, since
309they aren't loops. You can double the braces to make them such, though.
310
311 if (/pattern/) {{
7bd1983c
EM
312 last if /fred/;
313 next if /barney/; # same effect as "last", but doesn't document as well
314 # do something here
5a964f20
TC
315 }}
316
7bd1983c
EM
317This is caused by the fact that a block by itself acts as a loop that
318executes once, see L<"Basic BLOCKs and Switch Statements">.
319
5b23ba8b
MG
320The form C<while/if BLOCK BLOCK>, available in Perl 4, is no longer
321available. Replace any occurrence of C<if BLOCK> by C<if (do BLOCK)>.
4633a7c4 322
cb1a09d0 323=head2 For Loops
a0d0e21e 324
b78df5de 325Perl's C-style C<for> loop works like the corresponding C<while> loop;
cb1a09d0 326that means that this:
a0d0e21e
LW
327
328 for ($i = 1; $i < 10; $i++) {
329 ...
330 }
331
cb1a09d0 332is the same as this:
a0d0e21e
LW
333
334 $i = 1;
335 while ($i < 10) {
336 ...
337 } continue {
338 $i++;
339 }
340
b78df5de
JA
341There is one minor difference: if variables are declared with C<my>
342in the initialization section of the C<for>, the lexical scope of
343those variables is exactly the C<for> loop (the body of the loop
344and the control sections).
55497cff 345
cb1a09d0
AD
346Besides the normal array index looping, C<for> can lend itself
347to many other interesting applications. Here's one that avoids the
54310121 348problem you get into if you explicitly test for end-of-file on
349an interactive file descriptor causing your program to appear to
cb1a09d0
AD
350hang.
351
352 $on_a_tty = -t STDIN && -t STDOUT;
353 sub prompt { print "yes? " if $on_a_tty }
354 for ( prompt(); <STDIN>; prompt() ) {
355 # do something
54310121 356 }
cb1a09d0 357
00cb5da1
CW
358Using C<readline> (or the operator form, C<< <EXPR> >>) as the
359conditional of a C<for> loop is shorthand for the following. This
360behaviour is the same as a C<while> loop conditional.
361
362 for ( prompt(); defined( $_ = <STDIN> ); prompt() ) {
363 # do something
364 }
365
cb1a09d0
AD
366=head2 Foreach Loops
367
4633a7c4 368The C<foreach> loop iterates over a normal list value and sets the
55497cff 369variable VAR to be each element of the list in turn. If the variable
370is preceded with the keyword C<my>, then it is lexically scoped, and
371is therefore visible only within the loop. Otherwise, the variable is
372implicitly local to the loop and regains its former value upon exiting
373the loop. If the variable was previously declared with C<my>, it uses
374that variable instead of the global one, but it's still localized to
5c502d37
MV
375the loop. This implicit localisation occurs I<only> in a C<foreach>
376loop.
4633a7c4
LW
377
378The C<foreach> keyword is actually a synonym for the C<for> keyword, so
5a964f20
TC
379you can use C<foreach> for readability or C<for> for brevity. (Or because
380the Bourne shell is more familiar to you than I<csh>, so writing C<for>
f86cebdf 381comes more naturally.) If VAR is omitted, C<$_> is set to each value.
c5674021
PDF
382
383If any element of LIST is an lvalue, you can modify it by modifying
384VAR inside the loop. Conversely, if any element of LIST is NOT an
385lvalue, any attempt to modify that element will fail. In other words,
386the C<foreach> loop index variable is an implicit alias for each item
387in the list that you're looping over.
302617ea
MG
388
389If any part of LIST is an array, C<foreach> will get very confused if
390you add or remove elements within the loop body, for example with
391C<splice>. So don't do that.
392
393C<foreach> probably won't do what you expect if VAR is a tied or other
394special variable. Don't do that either.
4633a7c4 395
748a9306 396Examples:
a0d0e21e 397
4633a7c4 398 for (@ary) { s/foo/bar/ }
a0d0e21e 399
96f2dc66 400 for my $elem (@elements) {
a0d0e21e
LW
401 $elem *= 2;
402 }
403
4633a7c4
LW
404 for $count (10,9,8,7,6,5,4,3,2,1,'BOOM') {
405 print $count, "\n"; sleep(1);
a0d0e21e
LW
406 }
407
408 for (1..15) { print "Merry Christmas\n"; }
409
4633a7c4 410 foreach $item (split(/:[\\\n:]*/, $ENV{TERMCAP})) {
a0d0e21e
LW
411 print "Item: $item\n";
412 }
413
4633a7c4
LW
414Here's how a C programmer might code up a particular algorithm in Perl:
415
55497cff 416 for (my $i = 0; $i < @ary1; $i++) {
417 for (my $j = 0; $j < @ary2; $j++) {
4633a7c4
LW
418 if ($ary1[$i] > $ary2[$j]) {
419 last; # can't go to outer :-(
420 }
421 $ary1[$i] += $ary2[$j];
422 }
cb1a09d0 423 # this is where that last takes me
4633a7c4
LW
424 }
425
184e9718 426Whereas here's how a Perl programmer more comfortable with the idiom might
cb1a09d0 427do it:
4633a7c4 428
96f2dc66
GS
429 OUTER: for my $wid (@ary1) {
430 INNER: for my $jet (@ary2) {
cb1a09d0
AD
431 next OUTER if $wid > $jet;
432 $wid += $jet;
54310121 433 }
434 }
4633a7c4 435
cb1a09d0
AD
436See how much easier this is? It's cleaner, safer, and faster. It's
437cleaner because it's less noisy. It's safer because if code gets added
c07a80fd 438between the inner and outer loops later on, the new code won't be
5f05dabc 439accidentally executed. The C<next> explicitly iterates the other loop
c07a80fd 440rather than merely terminating the inner one. And it's faster because
441Perl executes a C<foreach> statement more rapidly than it would the
442equivalent C<for> loop.
4633a7c4
LW
443
444=head2 Basic BLOCKs and Switch Statements
445
55497cff 446A BLOCK by itself (labeled or not) is semantically equivalent to a
447loop that executes once. Thus you can use any of the loop control
448statements in it to leave or restart the block. (Note that this is
449I<NOT> true in C<eval{}>, C<sub{}>, or contrary to popular belief
450C<do{}> blocks, which do I<NOT> count as loops.) The C<continue>
451block is optional.
4633a7c4
LW
452
453The BLOCK construct is particularly nice for doing case
a0d0e21e
LW
454structures.
455
456 SWITCH: {
457 if (/^abc/) { $abc = 1; last SWITCH; }
458 if (/^def/) { $def = 1; last SWITCH; }
459 if (/^xyz/) { $xyz = 1; last SWITCH; }
460 $nothing = 1;
461 }
462
f86cebdf 463There is no official C<switch> statement in Perl, because there are
83df6a1d
JH
464already several ways to write the equivalent.
465
466However, starting from Perl 5.8 to get switch and case one can use
467the Switch extension and say:
468
469 use Switch;
470
471after which one has switch and case. It is not as fast as it could be
472because it's not really part of the language (it's done using source
473filters) but it is available, and it's very flexible.
474
475In addition to the above BLOCK construct, you could write
a0d0e21e
LW
476
477 SWITCH: {
478 $abc = 1, last SWITCH if /^abc/;
479 $def = 1, last SWITCH if /^def/;
480 $xyz = 1, last SWITCH if /^xyz/;
481 $nothing = 1;
482 }
483
cb1a09d0 484(That's actually not as strange as it looks once you realize that you can
6ec4bd10
MS
485use loop control "operators" within an expression. That's just the binary
486comma operator in scalar context. See L<perlop/"Comma Operator">.)
a0d0e21e
LW
487
488or
489
490 SWITCH: {
491 /^abc/ && do { $abc = 1; last SWITCH; };
492 /^def/ && do { $def = 1; last SWITCH; };
493 /^xyz/ && do { $xyz = 1; last SWITCH; };
494 $nothing = 1;
495 }
496
f86cebdf 497or formatted so it stands out more as a "proper" C<switch> statement:
a0d0e21e
LW
498
499 SWITCH: {
54310121 500 /^abc/ && do {
501 $abc = 1;
502 last SWITCH;
a0d0e21e
LW
503 };
504
54310121 505 /^def/ && do {
506 $def = 1;
507 last SWITCH;
a0d0e21e
LW
508 };
509
54310121 510 /^xyz/ && do {
511 $xyz = 1;
512 last SWITCH;
a0d0e21e
LW
513 };
514 $nothing = 1;
515 }
516
517or
518
519 SWITCH: {
520 /^abc/ and $abc = 1, last SWITCH;
521 /^def/ and $def = 1, last SWITCH;
522 /^xyz/ and $xyz = 1, last SWITCH;
523 $nothing = 1;
524 }
525
526or even, horrors,
527
528 if (/^abc/)
529 { $abc = 1 }
530 elsif (/^def/)
531 { $def = 1 }
532 elsif (/^xyz/)
533 { $xyz = 1 }
534 else
535 { $nothing = 1 }
536
f86cebdf
GS
537A common idiom for a C<switch> statement is to use C<foreach>'s aliasing to make
538a temporary assignment to C<$_> for convenient matching:
4633a7c4
LW
539
540 SWITCH: for ($where) {
541 /In Card Names/ && do { push @flags, '-e'; last; };
542 /Anywhere/ && do { push @flags, '-h'; last; };
543 /In Rulings/ && do { last; };
544 die "unknown value for form variable where: `$where'";
54310121 545 }
4633a7c4 546
cb1a09d0
AD
547Another interesting approach to a switch statement is arrange
548for a C<do> block to return the proper value:
549
550 $amode = do {
5a964f20 551 if ($flag & O_RDONLY) { "r" } # XXX: isn't this 0?
54310121 552 elsif ($flag & O_WRONLY) { ($flag & O_APPEND) ? "a" : "w" }
cb1a09d0
AD
553 elsif ($flag & O_RDWR) {
554 if ($flag & O_CREAT) { "w+" }
c07a80fd 555 else { ($flag & O_APPEND) ? "a+" : "r+" }
cb1a09d0
AD
556 }
557 };
558
5a964f20
TC
559Or
560
561 print do {
562 ($flags & O_WRONLY) ? "write-only" :
563 ($flags & O_RDWR) ? "read-write" :
564 "read-only";
565 };
566
a031eab2 567Or if you are certain that all the C<&&> clauses are true, you can use
5a964f20 568something like this, which "switches" on the value of the
a2293a43 569C<HTTP_USER_AGENT> environment variable.
5a964f20
TC
570
571 #!/usr/bin/perl
572 # pick out jargon file page based on browser
573 $dir = 'http://www.wins.uva.nl/~mes/jargon';
574 for ($ENV{HTTP_USER_AGENT}) {
575 $page = /Mac/ && 'm/Macintrash.html'
576 || /Win(dows )?NT/ && 'e/evilandrude.html'
577 || /Win|MSIE|WebTV/ && 'm/MicroslothWindows.html'
578 || /Linux/ && 'l/Linux.html'
579 || /HP-UX/ && 'h/HP-SUX.html'
580 || /SunOS/ && 's/ScumOS.html'
581 || 'a/AppendixB.html';
582 }
583 print "Location: $dir/$page\015\012\015\012";
584
585That kind of switch statement only works when you know the C<&&> clauses
586will be true. If you don't, the previous C<?:> example should be used.
587
19799a22
GS
588You might also consider writing a hash of subroutine references
589instead of synthesizing a C<switch> statement.
5a964f20 590
4633a7c4
LW
591=head2 Goto
592
19799a22
GS
593Although not for the faint of heart, Perl does support a C<goto>
594statement. There are three forms: C<goto>-LABEL, C<goto>-EXPR, and
595C<goto>-&NAME. A loop's LABEL is not actually a valid target for
596a C<goto>; it's just the name of the loop.
4633a7c4 597
f86cebdf 598The C<goto>-LABEL form finds the statement labeled with LABEL and resumes
4633a7c4 599execution there. It may not be used to go into any construct that
f86cebdf 600requires initialization, such as a subroutine or a C<foreach> loop. It
4633a7c4
LW
601also can't be used to go into a construct that is optimized away. It
602can be used to go almost anywhere else within the dynamic scope,
603including out of subroutines, but it's usually better to use some other
f86cebdf
GS
604construct such as C<last> or C<die>. The author of Perl has never felt the
605need to use this form of C<goto> (in Perl, that is--C is another matter).
4633a7c4 606
f86cebdf
GS
607The C<goto>-EXPR form expects a label name, whose scope will be resolved
608dynamically. This allows for computed C<goto>s per FORTRAN, but isn't
4633a7c4
LW
609necessarily recommended if you're optimizing for maintainability:
610
96f2dc66 611 goto(("FOO", "BAR", "GLARCH")[$i]);
4633a7c4 612
f86cebdf 613The C<goto>-&NAME form is highly magical, and substitutes a call to the
4633a7c4 614named subroutine for the currently running subroutine. This is used by
f86cebdf 615C<AUTOLOAD()> subroutines that wish to load another subroutine and then
4633a7c4 616pretend that the other subroutine had been called in the first place
f86cebdf
GS
617(except that any modifications to C<@_> in the current subroutine are
618propagated to the other subroutine.) After the C<goto>, not even C<caller()>
4633a7c4
LW
619will be able to tell that this routine was called first.
620
c07a80fd 621In almost all cases like this, it's usually a far, far better idea to use the
622structured control flow mechanisms of C<next>, C<last>, or C<redo> instead of
4633a7c4
LW
623resorting to a C<goto>. For certain applications, the catch and throw pair of
624C<eval{}> and die() for exception processing can also be a prudent approach.
cb1a09d0
AD
625
626=head2 PODs: Embedded Documentation
627
628Perl has a mechanism for intermixing documentation with source code.
c07a80fd 629While it's expecting the beginning of a new statement, if the compiler
cb1a09d0
AD
630encounters a line that begins with an equal sign and a word, like this
631
632 =head1 Here There Be Pods!
633
634Then that text and all remaining text up through and including a line
635beginning with C<=cut> will be ignored. The format of the intervening
54310121 636text is described in L<perlpod>.
cb1a09d0
AD
637
638This allows you to intermix your source code
639and your documentation text freely, as in
640
641 =item snazzle($)
642
54310121 643 The snazzle() function will behave in the most spectacular
cb1a09d0
AD
644 form that you can possibly imagine, not even excepting
645 cybernetic pyrotechnics.
646
647 =cut back to the compiler, nuff of this pod stuff!
648
649 sub snazzle($) {
650 my $thingie = shift;
651 .........
54310121 652 }
cb1a09d0 653
54310121 654Note that pod translators should look at only paragraphs beginning
184e9718 655with a pod directive (it makes parsing easier), whereas the compiler
54310121 656actually knows to look for pod escapes even in the middle of a
cb1a09d0
AD
657paragraph. This means that the following secret stuff will be
658ignored by both the compiler and the translators.
659
660 $a=3;
661 =secret stuff
662 warn "Neither POD nor CODE!?"
663 =cut back
664 print "got $a\n";
665
f86cebdf 666You probably shouldn't rely upon the C<warn()> being podded out forever.
cb1a09d0
AD
667Not all pod translators are well-behaved in this regard, and perhaps
668the compiler will become pickier.
774d564b 669
670One may also use pod directives to quickly comment out a section
671of code.
672
673=head2 Plain Old Comments (Not!)
674
6ec4bd10 675Perl can process line directives, much like the C preprocessor. Using
5a964f20 676this, one can control Perl's idea of filenames and line numbers in
774d564b 677error or warning messages (especially for strings that are processed
f86cebdf 678with C<eval()>). The syntax for this mechanism is the same as for most
774d564b 679C preprocessors: it matches the regular expression
6ec4bd10
MS
680
681 # example: '# line 42 "new_filename.plx"'
82d4537c 682 /^\# \s*
6ec4bd10 683 line \s+ (\d+) \s*
7b6e93a8 684 (?:\s("?)([^"]+)\2)? \s*
6ec4bd10
MS
685 $/x
686
7b6e93a8
CW
687with C<$1> being the line number for the next line, and C<$3> being
688the optional filename (specified with or without quotes).
774d564b 689
003183f2
GS
690There is a fairly obvious gotcha included with the line directive:
691Debuggers and profilers will only show the last source line to appear
692at a particular line number in a given file. Care should be taken not
693to cause line number collisions in code you'd like to debug later.
694
774d564b 695Here are some examples that you should be able to type into your command
696shell:
697
698 % perl
699 # line 200 "bzzzt"
700 # the `#' on the previous line must be the first char on line
701 die 'foo';
702 __END__
703 foo at bzzzt line 201.
54310121 704
774d564b 705 % perl
706 # line 200 "bzzzt"
707 eval qq[\n#line 2001 ""\ndie 'foo']; print $@;
708 __END__
709 foo at - line 2001.
54310121 710
774d564b 711 % perl
712 eval qq[\n#line 200 "foo bar"\ndie 'foo']; print $@;
713 __END__
714 foo at foo bar line 200.
54310121 715
774d564b 716 % perl
717 # line 345 "goop"
718 eval "\n#line " . __LINE__ . ' "' . __FILE__ ."\"\ndie 'foo'";
719 print $@;
720 __END__
721 foo at goop line 345.
722
723=cut