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