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