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