Upgrade to Encode 1.92.
[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
318=head2 Foreach Loops
319
4633a7c4 320The C<foreach> loop iterates over a normal list value and sets the
55497cff 321variable VAR to be each element of the list in turn. If the variable
322is preceded with the keyword C<my>, then it is lexically scoped, and
323is therefore visible only within the loop. Otherwise, the variable is
324implicitly local to the loop and regains its former value upon exiting
325the loop. If the variable was previously declared with C<my>, it uses
326that variable instead of the global one, but it's still localized to
5c502d37 327the loop. This implicit localisation occurs I<only> in a C<foreach>
328loop.
4633a7c4 329
330The C<foreach> keyword is actually a synonym for the C<for> keyword, so
5a964f20 331you can use C<foreach> for readability or C<for> for brevity. (Or because
332the Bourne shell is more familiar to you than I<csh>, so writing C<for>
f86cebdf 333comes more naturally.) If VAR is omitted, C<$_> is set to each value.
c5674021 334
335If any element of LIST is an lvalue, you can modify it by modifying
336VAR inside the loop. Conversely, if any element of LIST is NOT an
337lvalue, any attempt to modify that element will fail. In other words,
338the C<foreach> loop index variable is an implicit alias for each item
339in the list that you're looping over.
302617ea 340
341If any part of LIST is an array, C<foreach> will get very confused if
342you add or remove elements within the loop body, for example with
343C<splice>. So don't do that.
344
345C<foreach> probably won't do what you expect if VAR is a tied or other
346special variable. Don't do that either.
4633a7c4 347
748a9306 348Examples:
a0d0e21e 349
4633a7c4 350 for (@ary) { s/foo/bar/ }
a0d0e21e 351
96f2dc66 352 for my $elem (@elements) {
a0d0e21e 353 $elem *= 2;
354 }
355
4633a7c4 356 for $count (10,9,8,7,6,5,4,3,2,1,'BOOM') {
357 print $count, "\n"; sleep(1);
a0d0e21e 358 }
359
360 for (1..15) { print "Merry Christmas\n"; }
361
4633a7c4 362 foreach $item (split(/:[\\\n:]*/, $ENV{TERMCAP})) {
a0d0e21e 363 print "Item: $item\n";
364 }
365
4633a7c4 366Here's how a C programmer might code up a particular algorithm in Perl:
367
55497cff 368 for (my $i = 0; $i < @ary1; $i++) {
369 for (my $j = 0; $j < @ary2; $j++) {
4633a7c4 370 if ($ary1[$i] > $ary2[$j]) {
371 last; # can't go to outer :-(
372 }
373 $ary1[$i] += $ary2[$j];
374 }
cb1a09d0 375 # this is where that last takes me
4633a7c4 376 }
377
184e9718 378Whereas here's how a Perl programmer more comfortable with the idiom might
cb1a09d0 379do it:
4633a7c4 380
96f2dc66 381 OUTER: for my $wid (@ary1) {
382 INNER: for my $jet (@ary2) {
cb1a09d0 383 next OUTER if $wid > $jet;
384 $wid += $jet;
54310121 385 }
386 }
4633a7c4 387
cb1a09d0 388See how much easier this is? It's cleaner, safer, and faster. It's
389cleaner because it's less noisy. It's safer because if code gets added
c07a80fd 390between the inner and outer loops later on, the new code won't be
5f05dabc 391accidentally executed. The C<next> explicitly iterates the other loop
c07a80fd 392rather than merely terminating the inner one. And it's faster because
393Perl executes a C<foreach> statement more rapidly than it would the
394equivalent C<for> loop.
4633a7c4 395
396=head2 Basic BLOCKs and Switch Statements
397
55497cff 398A BLOCK by itself (labeled or not) is semantically equivalent to a
399loop that executes once. Thus you can use any of the loop control
400statements in it to leave or restart the block. (Note that this is
401I<NOT> true in C<eval{}>, C<sub{}>, or contrary to popular belief
402C<do{}> blocks, which do I<NOT> count as loops.) The C<continue>
403block is optional.
4633a7c4 404
405The BLOCK construct is particularly nice for doing case
a0d0e21e 406structures.
407
408 SWITCH: {
409 if (/^abc/) { $abc = 1; last SWITCH; }
410 if (/^def/) { $def = 1; last SWITCH; }
411 if (/^xyz/) { $xyz = 1; last SWITCH; }
412 $nothing = 1;
413 }
414
f86cebdf 415There is no official C<switch> statement in Perl, because there are
83df6a1d 416already several ways to write the equivalent.
417
418However, starting from Perl 5.8 to get switch and case one can use
419the Switch extension and say:
420
421 use Switch;
422
423after which one has switch and case. It is not as fast as it could be
424because it's not really part of the language (it's done using source
425filters) but it is available, and it's very flexible.
426
427In addition to the above BLOCK construct, you could write
a0d0e21e 428
429 SWITCH: {
430 $abc = 1, last SWITCH if /^abc/;
431 $def = 1, last SWITCH if /^def/;
432 $xyz = 1, last SWITCH if /^xyz/;
433 $nothing = 1;
434 }
435
cb1a09d0 436(That's actually not as strange as it looks once you realize that you can
a0d0e21e 437use loop control "operators" within an expression, That's just the normal
438C comma operator.)
439
440or
441
442 SWITCH: {
443 /^abc/ && do { $abc = 1; last SWITCH; };
444 /^def/ && do { $def = 1; last SWITCH; };
445 /^xyz/ && do { $xyz = 1; last SWITCH; };
446 $nothing = 1;
447 }
448
f86cebdf 449or formatted so it stands out more as a "proper" C<switch> statement:
a0d0e21e 450
451 SWITCH: {
54310121 452 /^abc/ && do {
453 $abc = 1;
454 last SWITCH;
a0d0e21e 455 };
456
54310121 457 /^def/ && do {
458 $def = 1;
459 last SWITCH;
a0d0e21e 460 };
461
54310121 462 /^xyz/ && do {
463 $xyz = 1;
464 last SWITCH;
a0d0e21e 465 };
466 $nothing = 1;
467 }
468
469or
470
471 SWITCH: {
472 /^abc/ and $abc = 1, last SWITCH;
473 /^def/ and $def = 1, last SWITCH;
474 /^xyz/ and $xyz = 1, last SWITCH;
475 $nothing = 1;
476 }
477
478or even, horrors,
479
480 if (/^abc/)
481 { $abc = 1 }
482 elsif (/^def/)
483 { $def = 1 }
484 elsif (/^xyz/)
485 { $xyz = 1 }
486 else
487 { $nothing = 1 }
488
f86cebdf 489A common idiom for a C<switch> statement is to use C<foreach>'s aliasing to make
490a temporary assignment to C<$_> for convenient matching:
4633a7c4 491
492 SWITCH: for ($where) {
493 /In Card Names/ && do { push @flags, '-e'; last; };
494 /Anywhere/ && do { push @flags, '-h'; last; };
495 /In Rulings/ && do { last; };
496 die "unknown value for form variable where: `$where'";
54310121 497 }
4633a7c4 498
cb1a09d0 499Another interesting approach to a switch statement is arrange
500for a C<do> block to return the proper value:
501
502 $amode = do {
5a964f20 503 if ($flag & O_RDONLY) { "r" } # XXX: isn't this 0?
54310121 504 elsif ($flag & O_WRONLY) { ($flag & O_APPEND) ? "a" : "w" }
cb1a09d0 505 elsif ($flag & O_RDWR) {
506 if ($flag & O_CREAT) { "w+" }
c07a80fd 507 else { ($flag & O_APPEND) ? "a+" : "r+" }
cb1a09d0 508 }
509 };
510
5a964f20 511Or
512
513 print do {
514 ($flags & O_WRONLY) ? "write-only" :
515 ($flags & O_RDWR) ? "read-write" :
516 "read-only";
517 };
518
a031eab2 519Or if you are certain that all the C<&&> clauses are true, you can use
5a964f20 520something like this, which "switches" on the value of the
a2293a43 521C<HTTP_USER_AGENT> environment variable.
5a964f20 522
523 #!/usr/bin/perl
524 # pick out jargon file page based on browser
525 $dir = 'http://www.wins.uva.nl/~mes/jargon';
526 for ($ENV{HTTP_USER_AGENT}) {
527 $page = /Mac/ && 'm/Macintrash.html'
528 || /Win(dows )?NT/ && 'e/evilandrude.html'
529 || /Win|MSIE|WebTV/ && 'm/MicroslothWindows.html'
530 || /Linux/ && 'l/Linux.html'
531 || /HP-UX/ && 'h/HP-SUX.html'
532 || /SunOS/ && 's/ScumOS.html'
533 || 'a/AppendixB.html';
534 }
535 print "Location: $dir/$page\015\012\015\012";
536
537That kind of switch statement only works when you know the C<&&> clauses
538will be true. If you don't, the previous C<?:> example should be used.
539
19799a22 540You might also consider writing a hash of subroutine references
541instead of synthesizing a C<switch> statement.
5a964f20 542
4633a7c4 543=head2 Goto
544
19799a22 545Although not for the faint of heart, Perl does support a C<goto>
546statement. There are three forms: C<goto>-LABEL, C<goto>-EXPR, and
547C<goto>-&NAME. A loop's LABEL is not actually a valid target for
548a C<goto>; it's just the name of the loop.
4633a7c4 549
f86cebdf 550The C<goto>-LABEL form finds the statement labeled with LABEL and resumes
4633a7c4 551execution there. It may not be used to go into any construct that
f86cebdf 552requires initialization, such as a subroutine or a C<foreach> loop. It
4633a7c4 553also can't be used to go into a construct that is optimized away. It
554can be used to go almost anywhere else within the dynamic scope,
555including out of subroutines, but it's usually better to use some other
f86cebdf 556construct such as C<last> or C<die>. The author of Perl has never felt the
557need to use this form of C<goto> (in Perl, that is--C is another matter).
4633a7c4 558
f86cebdf 559The C<goto>-EXPR form expects a label name, whose scope will be resolved
560dynamically. This allows for computed C<goto>s per FORTRAN, but isn't
4633a7c4 561necessarily recommended if you're optimizing for maintainability:
562
96f2dc66 563 goto(("FOO", "BAR", "GLARCH")[$i]);
4633a7c4 564
f86cebdf 565The C<goto>-&NAME form is highly magical, and substitutes a call to the
4633a7c4 566named subroutine for the currently running subroutine. This is used by
f86cebdf 567C<AUTOLOAD()> subroutines that wish to load another subroutine and then
4633a7c4 568pretend that the other subroutine had been called in the first place
f86cebdf 569(except that any modifications to C<@_> in the current subroutine are
570propagated to the other subroutine.) After the C<goto>, not even C<caller()>
4633a7c4 571will be able to tell that this routine was called first.
572
c07a80fd 573In almost all cases like this, it's usually a far, far better idea to use the
574structured control flow mechanisms of C<next>, C<last>, or C<redo> instead of
4633a7c4 575resorting to a C<goto>. For certain applications, the catch and throw pair of
576C<eval{}> and die() for exception processing can also be a prudent approach.
cb1a09d0 577
578=head2 PODs: Embedded Documentation
579
580Perl has a mechanism for intermixing documentation with source code.
c07a80fd 581While it's expecting the beginning of a new statement, if the compiler
cb1a09d0 582encounters a line that begins with an equal sign and a word, like this
583
584 =head1 Here There Be Pods!
585
586Then that text and all remaining text up through and including a line
587beginning with C<=cut> will be ignored. The format of the intervening
54310121 588text is described in L<perlpod>.
cb1a09d0 589
590This allows you to intermix your source code
591and your documentation text freely, as in
592
593 =item snazzle($)
594
54310121 595 The snazzle() function will behave in the most spectacular
cb1a09d0 596 form that you can possibly imagine, not even excepting
597 cybernetic pyrotechnics.
598
599 =cut back to the compiler, nuff of this pod stuff!
600
601 sub snazzle($) {
602 my $thingie = shift;
603 .........
54310121 604 }
cb1a09d0 605
54310121 606Note that pod translators should look at only paragraphs beginning
184e9718 607with a pod directive (it makes parsing easier), whereas the compiler
54310121 608actually knows to look for pod escapes even in the middle of a
cb1a09d0 609paragraph. This means that the following secret stuff will be
610ignored by both the compiler and the translators.
611
612 $a=3;
613 =secret stuff
614 warn "Neither POD nor CODE!?"
615 =cut back
616 print "got $a\n";
617
f86cebdf 618You probably shouldn't rely upon the C<warn()> being podded out forever.
cb1a09d0 619Not all pod translators are well-behaved in this regard, and perhaps
620the compiler will become pickier.
774d564b 621
622One may also use pod directives to quickly comment out a section
623of code.
624
625=head2 Plain Old Comments (Not!)
626
5a964f20 627Much like the C preprocessor, Perl can process line directives. Using
628this, one can control Perl's idea of filenames and line numbers in
774d564b 629error or warning messages (especially for strings that are processed
f86cebdf 630with C<eval()>). The syntax for this mechanism is the same as for most
774d564b 631C preprocessors: it matches the regular expression
73659bf1 632C</^#\s*line\s+(\d+)\s*(?:\s"([^"]+)")?\s*$/> with C<$1> being the line
774d564b 633number for the next line, and C<$2> being the optional filename
634(specified within quotes).
635
003183f2 636There is a fairly obvious gotcha included with the line directive:
637Debuggers and profilers will only show the last source line to appear
638at a particular line number in a given file. Care should be taken not
639to cause line number collisions in code you'd like to debug later.
640
774d564b 641Here are some examples that you should be able to type into your command
642shell:
643
644 % perl
645 # line 200 "bzzzt"
646 # the `#' on the previous line must be the first char on line
647 die 'foo';
648 __END__
649 foo at bzzzt line 201.
54310121 650
774d564b 651 % perl
652 # line 200 "bzzzt"
653 eval qq[\n#line 2001 ""\ndie 'foo']; print $@;
654 __END__
655 foo at - line 2001.
54310121 656
774d564b 657 % perl
658 eval qq[\n#line 200 "foo bar"\ndie 'foo']; print $@;
659 __END__
660 foo at foo bar line 200.
54310121 661
774d564b 662 % perl
663 # line 345 "goop"
664 eval "\n#line " . __LINE__ . ' "' . __FILE__ ."\"\ndie 'foo'";
665 print $@;
666 __END__
667 foo at goop line 345.
668
669=cut