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