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