Updated.
[p5sagit/p5-mst-13.2.git] / pod / perlrun.pod
CommitLineData
a0d0e21e 1=head1 NAME
2
3perlrun - how to execute the Perl interpreter
4
5=head1 SYNOPSIS
6
7B<perl> [switches] filename args
8
9=head1 DESCRIPTION
10
11Upon startup, Perl looks for your script in one of the following
12places:
13
14=over 4
15
16=item 1.
17
18Specified line by line via B<-e> switches on the command line.
19
20=item 2.
21
22Contained in the file specified by the first filename on the command line.
23(Note that systems supporting the #! notation invoke interpreters this way.)
24
25=item 3.
26
27Passed in implicitly via standard input. This only works if there are
28no filename arguments--to pass arguments to a STDIN script you
29must explicitly specify a "-" for the script name.
30
31=back
32
33With methods 2 and 3, Perl starts parsing the input file from the
34beginning, unless you've specified a B<-x> switch, in which case it
35scans for the first line starting with #! and containing the word
36"perl", and starts there instead. This is useful for running a script
37embedded in a larger message. (In this case you would indicate the end
38of the script using the __END__ token.)
39
40As of Perl 5, the #! line is always examined for switches as the line is
41being parsed. Thus, if you're on a machine that only allows one argument
42with the #! line, or worse, doesn't even recognize the #! line, you still
43can get consistent switch behavior regardless of how Perl was invoked,
44even if B<-x> was used to find the beginning of the script.
45
46Because many operating systems silently chop off kernel interpretation of
47the #! line after 32 characters, some switches may be passed in on the
48command line, and some may not; you could even get a "-" without its
49letter, if you're not careful. You probably want to make sure that all
50your switches fall either before or after that 32 character boundary.
51Most switches don't actually care if they're processed redundantly, but
52getting a - instead of a complete switch could cause Perl to try to
53execute standard input instead of your script. And a partial B<-I> switch
54could also cause odd results.
55
56Parsing of the #! switches starts wherever "perl" is mentioned in the line.
57The sequences "-*" and "- " are specifically ignored so that you could,
58if you were so inclined, say
59
60 #!/bin/sh -- # -*- perl -*- -p
61 eval 'exec perl $0 -S ${1+"$@"}'
62 if 0;
63
64to let Perl see the B<-p> switch.
65
66If the #! line does not contain the word "perl", the program named after
67the #! is executed instead of the Perl interpreter. This is slightly
68bizarre, but it helps people on machines that don't do #!, because they
69can tell a program that their SHELL is /usr/bin/perl, and Perl will then
70dispatch the program to the correct interpreter for them.
71
72After locating your script, Perl compiles the entire script to an
73internal form. If there are any compilation errors, execution of the
74script is not attempted. (This is unlike the typical shell script,
75which might run partway through before finding a syntax error.)
76
77If the script is syntactically correct, it is executed. If the script
78runs off the end without hitting an exit() or die() operator, an implicit
79C<exit(0)> is provided to indicate successful completion.
80
81=head2 Switches
82
83A single-character switch may be combined with the following switch, if
84any.
85
86 #!/usr/bin/perl -spi.bak # same as -s -p -i.bak
87
88Switches include:
89
90=over 5
91
92=item B<-0>I<digits>
93
94specifies the record separator (C<$/>) as an octal number. If there are
95no digits, the null character is the separator. Other switches may
96precede or follow the digits. For example, if you have a version of
97B<find> which can print filenames terminated by the null character, you
98can say this:
99
100 find . -name '*.bak' -print0 | perl -n0e unlink
101
102The special value 00 will cause Perl to slurp files in paragraph mode.
103The value 0777 will cause Perl to slurp files whole since there is no
104legal character with that value.
105
106=item B<-a>
107
108turns on autosplit mode when used with a B<-n> or B<-p>. An implicit
109split command to the @F array is done as the first thing inside the
110implicit while loop produced by the B<-n> or B<-p>.
111
112 perl -ane 'print pop(@F), "\n";'
113
114is equivalent to
115
116 while (<>) {
117 @F = split(' ');
118 print pop(@F), "\n";
119 }
120
121An alternate delimiter may be specified using B<-F>.
122
123=item B<-c>
124
125causes Perl to check the syntax of the script and then exit without
cb1a09d0 126executing it. Actually, it I<will> execute C<BEGIN>, C<END>, and C<use> blocks,
127since these are considered as occurring outside the execution of
128your program.
a0d0e21e 129
130=item B<-d>
131
132runs the script under the Perl debugger. See L<perldebug>.
133
134=item B<-D>I<number>
135
136=item B<-D>I<list>
137
138sets debugging flags. To watch how it executes your script, use
139B<-D14>. (This only works if debugging is compiled into your
140Perl.) Another nice value is B<-D1024>, which lists your compiled
141syntax tree. And B<-D512> displays compiled regular expressions. As an
142alternative specify a list of letters instead of numbers (e.g. B<-D14> is
143equivalent to B<-Dtls>):
144
145 1 p Tokenizing and Parsing
146 2 s Stack Snapshots
147 4 l Label Stack Processing
148 8 t Trace Execution
149 16 o Operator Node Construction
150 32 c String/Numeric Conversions
151 64 P Print Preprocessor Command for -P
152 128 m Memory Allocation
153 256 f Format Processing
154 512 r Regular Expression Parsing
155 1024 x Syntax Tree Dump
156 2048 u Tainting Checks
157 4096 L Memory Leaks (not supported anymore)
158 8192 H Hash Dump -- usurps values()
159 16384 X Scratchpad Allocation
160 32768 D Cleaning Up
161
162=item B<-e> I<commandline>
163
164may be used to enter one line of script.
165If B<-e> is given, Perl
166will not look for a script filename in the argument list.
167Multiple B<-e> commands may
168be given to build up a multi-line script.
169Make sure to use semicolons where you would in a normal program.
170
171=item B<-F>I<regexp>
172
173specifies a regular expression to split on if B<-a> is also in effect.
174If regexp has C<//> around it, the slashes will be ignored.
175
176=item B<-i>I<extension>
177
178specifies that files processed by the C<E<lt>E<gt>> construct are to be edited
179in-place. It does this by renaming the input file, opening the output
180file by the original name, and selecting that output file as the default
181for print() statements. The extension, if supplied, is added to the name
182of the old file to make a backup copy. If no extension is supplied, no
183backup is made. From the shell, saying
184
185 $ perl -p -i.bak -e "s/foo/bar/; ... "
186
187is the same as using the script:
188
189 #!/usr/bin/perl -pi.bak
190 s/foo/bar/;
191
192which is equivalent to
193
194 #!/usr/bin/perl
195 while (<>) {
196 if ($ARGV ne $oldargv) {
197 rename($ARGV, $ARGV . '.bak');
198 open(ARGVOUT, ">$ARGV");
199 select(ARGVOUT);
200 $oldargv = $ARGV;
201 }
202 s/foo/bar/;
203 }
204 continue {
205 print; # this prints to original filename
206 }
207 select(STDOUT);
208
209except that the B<-i> form doesn't need to compare $ARGV to $oldargv to
210know when the filename has changed. It does, however, use ARGVOUT for
211the selected filehandle. Note that STDOUT is restored as the
212default output filehandle after the loop.
213
214You can use C<eof> without parenthesis to locate the end of each input file,
215in case you want to append to each file, or reset line numbering (see
216example in L<perlfunc/eof>).
217
218=item B<-I>I<directory>
219
220may be used in conjunction with B<-P> to tell the C preprocessor where
221to look for include files. By default /usr/include and /usr/lib/perl
222are searched.
223
224=item B<-l>I<octnum>
225
226enables automatic line-ending processing. It has two effects: first,
227it automatically chomps the line terminator when used with B<-n> or
228B<-p>, and second, it assigns "C<$\>" to have the value of I<octnum> so that
229any print statements will have that line terminator added back on. If
230I<octnum> is omitted, sets "C<$\>" to the current value of "C<$/>". For
231instance, to trim lines to 80 columns:
232
233 perl -lpe 'substr($_, 80) = ""'
234
235Note that the assignment C<$\ = $/> is done when the switch is processed,
236so the input record separator can be different than the output record
237separator if the B<-l> switch is followed by a B<-0> switch:
238
239 gnufind / -print0 | perl -ln0e 'print "found $_" if -p'
240
241This sets $\ to newline and then sets $/ to the null character.
242
243=item B<-n>
244
245causes Perl to assume the following loop around your script, which
246makes it iterate over filename arguments somewhat like B<sed -n> or
247B<awk>:
248
249 while (<>) {
250 ... # your script goes here
251 }
252
253Note that the lines are not printed by default. See B<-p> to have
254lines printed. Here is an efficient way to delete all files older than
255a week:
256
257 find . -mtime +7 -print | perl -nle 'unlink;'
258
259This is faster than using the C<-exec> switch of B<find> because you don't
260have to start a process on every filename found.
261
262C<BEGIN> and C<END> blocks may be used to capture control before or after
263the implicit loop, just as in B<awk>.
264
265=item B<-p>
266
267causes Perl to assume the following loop around your script, which
268makes it iterate over filename arguments somewhat like B<sed>:
269
270
271 while (<>) {
272 ... # your script goes here
273 } continue {
274 print;
275 }
276
277Note that the lines are printed automatically. To suppress printing
278use the B<-n> switch. A B<-p> overrides a B<-n> switch.
279
280C<BEGIN> and C<END> blocks may be used to capture control before or after
281the implicit loop, just as in awk.
282
283=item B<-P>
284
285causes your script to be run through the C preprocessor before
286compilation by Perl. (Since both comments and cpp directives begin
287with the # character, you should avoid starting comments with any words
288recognized by the C preprocessor such as "if", "else" or "define".)
289
290=item B<-s>
291
292enables some rudimentary switch parsing for switches on the command
293line after the script name but before any filename arguments (or before
294a B<-->). Any switch found there is removed from @ARGV and sets the
295corresponding variable in the Perl script. The following script
296prints "true" if and only if the script is invoked with a B<-xyz> switch.
297
298 #!/usr/bin/perl -s
299 if ($xyz) { print "true\n"; }
300
301=item B<-S>
302
303makes Perl use the PATH environment variable to search for the
304script (unless the name of the script starts with a slash). Typically
305this is used to emulate #! startup on machines that don't support #!,
306in the following manner:
307
308 #!/usr/bin/perl
309 eval "exec /usr/bin/perl -S $0 $*"
310 if $running_under_some_shell;
311
312The system ignores the first line and feeds the script to /bin/sh,
313which proceeds to try to execute the Perl script as a shell script.
314The shell executes the second line as a normal shell command, and thus
315starts up the Perl interpreter. On some systems $0 doesn't always
316contain the full pathname, so the B<-S> tells Perl to search for the
317script if necessary. After Perl locates the script, it parses the
318lines and ignores them because the variable $running_under_some_shell
319is never true. A better construct than C<$*> would be C<${1+"$@"}>, which
320handles embedded spaces and such in the filenames, but doesn't work if
321the script is being interpreted by csh. In order to start up sh rather
322than csh, some systems may have to replace the #! line with a line
323containing just a colon, which will be politely ignored by Perl. Other
324systems can't control that, and need a totally devious construct that
325will work under any of csh, sh or Perl, such as the following:
326
327 eval '(exit $?0)' && eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
328 & eval 'exec /usr/bin/perl -S $0 $argv:q'
329 if 0;
330
331=item B<-T>
332
cb1a09d0 333forces "taint" checks to be turned on so you can test them. Ordinarily these checks are
334done only when running setuid or setgid. It's a good idea to turn
335them on explicitly for programs run on another's behalf, such as CGI
336programs. See L<perlsec>.
a0d0e21e 337
338=item B<-u>
339
340causes Perl to dump core after compiling your script. You can then
341take this core dump and turn it into an executable file by using the
342B<undump> program (not supplied). This speeds startup at the expense of
343some disk space (which you can minimize by stripping the executable).
344(Still, a "hello world" executable comes out to about 200K on my
345machine.) If you want to execute a portion of your script before dumping,
346use the dump() operator instead. Note: availability of B<undump> is
347platform specific and may not be available for a specific port of
348Perl.
349
350=item B<-U>
351
352allows Perl to do unsafe operations. Currently the only "unsafe"
353operations are the unlinking of directories while running as superuser,
354and running setuid programs with fatal taint checks turned into
355warnings.
356
357=item B<-v>
358
359prints the version and patchlevel of your Perl executable.
360
361=item B<-w>
362
363prints warnings about identifiers that are mentioned only once, and
364scalar variables that are used before being set. Also warns about
365redefined subroutines, and references to undefined filehandles or
366filehandles opened readonly that you are attempting to write on. Also
367warns you if you use values as a number that doesn't look like numbers, using
748a9306 368an array as though it were a scalar, if
369your subroutines recurse more than 100 deep, and innumerable other things.
a0d0e21e 370See L<perldiag> and L<perltrap>.
371
372=item B<-x> I<directory>
373
374tells Perl that the script is embedded in a message. Leading
375garbage will be discarded until the first line that starts with #! and
376contains the string "perl". Any meaningful switches on that line will
377be applied (but only one group of switches, as with normal #!
378processing). If a directory name is specified, Perl will switch to
379that directory before running the script. The B<-x> switch only
380controls the the disposal of leading garbage. The script must be
381terminated with C<__END__> if there is trailing garbage to be ignored (the
382script can process any or all of the trailing garbage via the DATA
383filehandle if desired).
384
385
386=back