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