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