[patch] blead@25226 on OpenVMS/vms.c - fopen bug.
[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
672fde27 7B<perl> S<[ B<-sTtuUWX> ]>
e0ebc809 8 S<[ B<-hv> ] [ B<-V>[:I<configvar>] ]>
2cbb2ee1 9 S<[ B<-cw> ] [ B<-d>[B<t>][:I<debugger>] ] [ B<-D>[I<number/list>] ]>
f2095865 10 S<[ B<-pna> ] [ B<-F>I<pattern> ] [ B<-l>[I<octal>] ] [ B<-0>[I<octal/hexadecimal>] ]>
df451b2a 11 S<[ B<-I>I<dir> ] [ B<-m>[B<->]I<module> ] [ B<-M>[B<->]I<'module...'> ] [ B<-f> ]>
aefc56c5 12 S<[ B<-A>[I<module>][=I<assertions>] ]>
c630fe62 13 S<[ B<-C [I<number/list>] >]>
e0ebc809 14 S<[ B<-P> ]>
15 S<[ B<-S> ]>
16 S<[ B<-x>[I<dir>] ]>
17 S<[ B<-i>[I<extension>] ]>
18 S<[ B<-e> I<'command'> ] [ B<--> ] [ I<programfile> ] [ I<argument> ]...>
a0d0e21e 19
20=head1 DESCRIPTION
21
19799a22 22The normal way to run a Perl program is by making it directly
23executable, or else by passing the name of the source file as an
24argument on the command line. (An interactive Perl environment
25is also possible--see L<perldebug> for details on how to do that.)
26Upon startup, Perl looks for your program in one of the following
a0d0e21e 27places:
28
29=over 4
30
31=item 1.
32
33Specified line by line via B<-e> switches on the command line.
34
35=item 2.
36
37Contained in the file specified by the first filename on the command line.
a3cb178b 38(Note that systems supporting the #! notation invoke interpreters this
39way. See L<Location of Perl>.)
a0d0e21e 40
41=item 3.
42
5f05dabc 43Passed in implicitly via standard input. This works only if there are
19799a22 44no filename arguments--to pass arguments to a STDIN-read program you
45must explicitly specify a "-" for the program name.
a0d0e21e 46
47=back
48
49With methods 2 and 3, Perl starts parsing the input file from the
50beginning, unless you've specified a B<-x> switch, in which case it
51scans for the first line starting with #! and containing the word
19799a22 52"perl", and starts there instead. This is useful for running a program
a0d0e21e 53embedded in a larger message. (In this case you would indicate the end
19799a22 54of the program using the C<__END__> token.)
a0d0e21e 55
5f05dabc 56The #! line is always examined for switches as the line is being
57parsed. Thus, if you're on a machine that allows only one argument
58with the #! line, or worse, doesn't even recognize the #! line, you
59still can get consistent switch behavior regardless of how Perl was
19799a22 60invoked, even if B<-x> was used to find the beginning of the program.
61
62Because historically some operating systems silently chopped off
63kernel interpretation of the #! line after 32 characters, some
64switches may be passed in on the command line, and some may not;
65you could even get a "-" without its letter, if you're not careful.
66You probably want to make sure that all your switches fall either
67before or after that 32-character boundary. Most switches don't
68actually care if they're processed redundantly, but getting a "-"
69instead of a complete switch could cause Perl to try to execute
70standard input instead of your program. And a partial B<-I> switch
a0d0e21e 71could also cause odd results.
72
19799a22 73Some switches do care if they are processed twice, for instance
74combinations of B<-l> and B<-0>. Either put all the switches after
75the 32-character boundary (if applicable), or replace the use of
76B<-0>I<digits> by C<BEGIN{ $/ = "\0digits"; }>.
fb73857a 77
a0d0e21e 78Parsing of the #! switches starts wherever "perl" is mentioned in the line.
79The sequences "-*" and "- " are specifically ignored so that you could,
80if you were so inclined, say
81
82 #!/bin/sh -- # -*- perl -*- -p
19799a22 83 eval 'exec perl -wS $0 ${1+"$@"}'
5f05dabc 84 if $running_under_some_shell;
a0d0e21e 85
44a4342c 86to let Perl see the B<-p> switch.
19799a22 87
88A similar trick involves the B<env> program, if you have it.
89
90 #!/usr/bin/env perl
91
92The examples above use a relative path to the perl interpreter,
93getting whatever version is first in the user's path. If you want
94a specific version of Perl, say, perl5.005_57, you should place
95that directly in the #! line's path.
a0d0e21e 96
97If the #! line does not contain the word "perl", the program named after
98the #! is executed instead of the Perl interpreter. This is slightly
99bizarre, but it helps people on machines that don't do #!, because they
19799a22 100can tell a program that their SHELL is F</usr/bin/perl>, and Perl will then
a0d0e21e 101dispatch the program to the correct interpreter for them.
102
19799a22 103After locating your program, Perl compiles the entire program to an
a0d0e21e 104internal form. If there are any compilation errors, execution of the
19799a22 105program is not attempted. (This is unlike the typical shell script,
54310121 106which might run part-way through before finding a syntax error.)
a0d0e21e 107
19799a22 108If the program is syntactically correct, it is executed. If the program
a0d0e21e 109runs off the end without hitting an exit() or die() operator, an implicit
110C<exit(0)> is provided to indicate successful completion.
111
68dc0745 112=head2 #! and quoting on non-Unix systems
113
114Unix's #! technique can be simulated on other systems:
115
116=over 4
117
118=item OS/2
119
120Put
121
122 extproc perl -S -your_switches
123
19799a22 124as the first line in C<*.cmd> file (B<-S> due to a bug in cmd.exe's
68dc0745 125`extproc' handling).
126
54310121 127=item MS-DOS
68dc0745 128
19799a22 129Create a batch file to run your program, and codify it in
fd1adc71 130C<ALTERNATE_SHEBANG> (see the F<dosish.h> file in the source
68dc0745 131distribution for more information).
132
133=item Win95/NT
134
6c6a61e2 135The Win95/NT installation, when using the ActiveState installer for Perl,
c8db1d39 136will modify the Registry to associate the F<.pl> extension with the perl
6c6a61e2 137interpreter. If you install Perl by other means (including building from
138the sources), you may have to modify the Registry yourself. Note that
139this means you can no longer tell the difference between an executable
140Perl program and a Perl library file.
68dc0745 141
142=item Macintosh
143
8e30f651 144Under "Classic" MacOS, a perl program will have the appropriate Creator and
145Type, so that double-clicking them will invoke the MacPerl application.
146Under Mac OS X, clickable apps can be made from any C<#!> script using Wil
147Sanchez' DropScript utility: http://www.wsanchez.net/software/ .
68dc0745 148
bd3fa61c 149=item VMS
150
151Put
152
153 $ perl -mysw 'f$env("procedure")' 'p1' 'p2' 'p3' 'p4' 'p5' 'p6' 'p7' 'p8' !
154 $ exit++ + ++$status != 0 and $exit = $status = undef;
155
19799a22 156at the top of your program, where B<-mysw> are any command line switches you
157want to pass to Perl. You can now invoke the program directly, by saying
158C<perl program>, or as a DCL procedure, by saying C<@program> (or implicitly
159via F<DCL$PATH> by just using the name of the program).
bd3fa61c 160
161This incantation is a bit much to remember, but Perl will display it for
162you if you say C<perl "-V:startperl">.
163
68dc0745 164=back
165
166Command-interpreters on non-Unix systems have rather different ideas
167on quoting than Unix shells. You'll need to learn the special
168characters in your command-interpreter (C<*>, C<\> and C<"> are
169common) and how to protect whitespace and these characters to run
19799a22 170one-liners (see B<-e> below).
68dc0745 171
172On some systems, you may have to change single-quotes to double ones,
e6f03d26 173which you must I<not> do on Unix or Plan 9 systems. You might also
68dc0745 174have to change a single % to a %%.
175
176For example:
177
178 # Unix
179 perl -e 'print "Hello world\n"'
180
54310121 181 # MS-DOS, etc.
68dc0745 182 perl -e "print \"Hello world\n\""
183
54310121 184 # Macintosh
68dc0745 185 print "Hello world\n"
186 (then Run "Myscript" or Shift-Command-R)
187
188 # VMS
189 perl -e "print ""Hello world\n"""
190
19799a22 191The problem is that none of this is reliable: it depends on the
192command and it is entirely possible neither works. If B<4DOS> were
193the command shell, this would probably work better:
68dc0745 194
195 perl -e "print <Ctrl-x>"Hello world\n<Ctrl-x>""
196
19799a22 197B<CMD.EXE> in Windows NT slipped a lot of standard Unix functionality in
68dc0745 198when nobody was looking, but just try to find documentation for its
199quoting rules.
200
54310121 201Under the Macintosh, it depends which environment you are using. The MacPerl
68dc0745 202shell, or MPW, is much like Unix shells in its support for several
54310121 203quoting variants, except that it makes free use of the Macintosh's non-ASCII
68dc0745 204characters as control characters.
205
206There is no general solution to all of this. It's just a mess.
207
a3cb178b 208=head2 Location of Perl
209
210It may seem obvious to say, but Perl is useful only when users can
19799a22 211easily find it. When possible, it's good for both F</usr/bin/perl>
212and F</usr/local/bin/perl> to be symlinks to the actual binary. If
213that can't be done, system administrators are strongly encouraged
214to put (symlinks to) perl and its accompanying utilities into a
215directory typically found along a user's PATH, or in some other
216obvious and convenient place.
217
218In this documentation, C<#!/usr/bin/perl> on the first line of the program
219will stand in for whatever method works on your system. You are
220advised to use a specific path if you care about a specific version.
a3cb178b 221
19799a22 222 #!/usr/local/bin/perl5.00554
a3cb178b 223
19799a22 224or if you just want to be running at least version, place a statement
225like this at the top of your program:
a0d0e21e 226
19799a22 227 use 5.005_54;
a0d0e21e 228
19799a22 229=head2 Command Switches
230
231As with all standard commands, a single-character switch may be
232clustered with the following switch, if any.
233
234 #!/usr/bin/perl -spi.orig # same as -s -p -i.orig
a0d0e21e 235
236Switches include:
237
238=over 5
239
f2095865 240=item B<-0>[I<octal/hexadecimal>]
a0d0e21e 241
f2095865 242specifies the input record separator (C<$/>) as an octal or
243hexadecimal number. If there are no digits, the null character is the
244separator. Other switches may precede or follow the digits. For
245example, if you have a version of B<find> which can print filenames
246terminated by the null character, you can say this:
a0d0e21e 247
19799a22 248 find . -name '*.orig' -print0 | perl -n0e unlink
a0d0e21e 249
250The special value 00 will cause Perl to slurp files in paragraph mode.
5f05dabc 251The value 0777 will cause Perl to slurp files whole because there is no
f2095865 252legal byte with that value.
253
254If you want to specify any Unicode character, use the hexadecimal
255format: C<-0xHHH...>, where the C<H> are valid hexadecimal digits.
256(This means that you cannot use the C<-x> with a directory name that
257consists of hexadecimal digits.)
a0d0e21e 258
aefc56c5 259=item B<-A[I<module>][=I<assertions>]>
702815ca 260
aefc56c5 261Activates the assertions given after the equal sign as a comma-separated
262list of assertion names or regular expressions. If no assertion name
263is given, activates all assertions.
264
265The module L<assertions::activate> is used by default to activate the
266selected assertions. An alternate module may be specified including
267its name between the switch and the equal sign.
268
269See L<assertions> and L<assertions::activate>.
702815ca 270
a0d0e21e 271=item B<-a>
272
273turns on autosplit mode when used with a B<-n> or B<-p>. An implicit
274split command to the @F array is done as the first thing inside the
275implicit while loop produced by the B<-n> or B<-p>.
276
277 perl -ane 'print pop(@F), "\n";'
278
279is equivalent to
280
281 while (<>) {
282 @F = split(' ');
283 print pop(@F), "\n";
284 }
285
286An alternate delimiter may be specified using B<-F>.
287
a05d7ebb 288=item B<-C [I<number/list>]>
46487f74 289
a05d7ebb 290The C<-C> flag controls some Unicode of the Perl Unicode features.
291
292As of 5.8.1, the C<-C> can be followed either by a number or a list
f3f8427d 293of option letters. The letters, their numeric values, and effects
8aa8f774 294are as follows; listing the letters is equal to summing the numbers.
9f21530f 295
73e12209 296 I 1 STDIN is assumed to be in UTF-8
297 O 2 STDOUT will be in UTF-8
298 E 4 STDERR will be in UTF-8
299 S 7 I + O + E
300 i 8 UTF-8 is the default PerlIO layer for input streams
301 o 16 UTF-8 is the default PerlIO layer for output streams
302 D 24 i + o
303 A 32 the @ARGV elements are expected to be strings encoded
304 in UTF-8
305 L 64 normally the "IOEioA" are unconditional,
306 the L makes them conditional on the locale environment
307 variables (the LC_ALL, LC_TYPE, and LANG, in the order
308 of decreasing precedence) -- if the variables indicate
309 UTF-8, then the selected "IOEioA" are in effect
9f21530f 310
311For example, C<-COE> and C<-C6> will both turn on UTF-8-ness on both
312STDOUT and STDERR. Repeating letters is just redundant, not cumulative
313nor toggling.
a05d7ebb 314
44505768 315The C<io> options mean that any subsequent open() (or similar I/O
316operations) will have the C<:utf8> PerlIO layer implicitly applied
317to them, in other words, UTF-8 is expected from any input stream,
318and UTF-8 is produced to any output stream. This is just the default,
319with explicit layers in open() and with binmode() one can manipulate
320streams as usual.
321
8aa8f774 322C<-C> on its own (not followed by any number or option list), or the
47427c4e 323empty string C<""> for the C<PERL_UNICODE> environment variable, has the
324same effect as C<-CSDL>. In other words, the standard I/O handles and
325the default C<open()> layer are UTF-8-fied B<but> only if the locale
326environment variables indicate a UTF-8 locale. This behaviour follows
327the I<implicit> (and problematic) UTF-8 behaviour of Perl 5.8.0.
a05d7ebb 328
47427c4e 329You can use C<-C0> (or C<"0"> for C<PERL_UNICODE>) to explicitly
5b4f334e 330disable all the above Unicode features.
fde18df1 331
8aa8f774 332The read-only magic variable C<${^UNICODE}> reflects the numeric value
ab9e1bb7 333of this setting. This is variable is set during Perl startup and is
334thereafter read-only. If you want runtime effects, use the three-arg
2307c6d0 335open() (see L<perlfunc/open>), the two-arg binmode() (see L<perlfunc/binmode>),
ab9e1bb7 336and the C<open> pragma (see L<open>).
fde18df1 337
338(In Perls earlier than 5.8.1 the C<-C> switch was a Win32-only switch
339that enabled the use of Unicode-aware "wide system call" Win32 APIs.
340This feature was practically unused, however, and the command line
341switch was therefore "recycled".)
46487f74 342
a0d0e21e 343=item B<-c>
344
19799a22 345causes Perl to check the syntax of the program and then exit without
7d30b5c4 346executing it. Actually, it I<will> execute C<BEGIN>, C<CHECK>, and
4f25aa18 347C<use> blocks, because these are considered as occurring outside the
348execution of your program. C<INIT> and C<END> blocks, however, will
349be skipped.
a0d0e21e 350
351=item B<-d>
352
2cbb2ee1 353=item B<-dt>
354
19799a22 355runs the program under the Perl debugger. See L<perldebug>.
2cbb2ee1 356If B<t> is specified, it indicates to the debugger that threads
357will be used in the code being debugged.
a0d0e21e 358
70c94a19 359=item B<-d:>I<foo[=bar,baz]>
3c81428c 360
2cbb2ee1 361=item B<-dt:>I<foo[=bar,baz]>
362
19799a22 363runs the program under the control of a debugging, profiling, or
364tracing module installed as Devel::foo. E.g., B<-d:DProf> executes
70c94a19 365the program using the Devel::DProf profiler. As with the B<-M>
366flag, options may be passed to the Devel::foo package where they
367will be received and interpreted by the Devel::foo::import routine.
368The comma-separated list of options must follow a C<=> character.
2cbb2ee1 369If B<t> is specified, it indicates to the debugger that threads
370will be used in the code being debugged.
70c94a19 371See L<perldebug>.
3c81428c 372
db2ba183 373=item B<-D>I<letters>
a0d0e21e 374
db2ba183 375=item B<-D>I<number>
a0d0e21e 376
19799a22 377sets debugging flags. To watch how it executes your program, use
db2ba183 378B<-Dtls>. (This works only if debugging is compiled into your
379Perl.) Another nice value is B<-Dx>, which lists your compiled
4197b13f 380syntax tree. And B<-Dr> displays compiled regular expressions;
44a4342c 381the format of the output is explained in L<perldebguts>.
4197b13f 382
383As an alternative, specify a number instead of list of letters (e.g.,
384B<-D14> is equivalent to B<-Dtls>):
a0d0e21e 385
9388183f 386 1 p Tokenizing and parsing (with v, displays parse stack)
3679267a 387 2 s Stack snapshots (with v, displays all stacks)
db2ba183 388 4 l Context (loop) stack processing
389 8 t Trace execution
390 16 o Method and overloading resolution
391 32 c String/numeric conversions
1045810a 392 64 P Print profiling info, preprocessor command for -P, source file input state
db2ba183 393 128 m Memory allocation
394 256 f Format processing
395 512 r Regular expression parsing and execution
396 1024 x Syntax tree dump
397 2048 u Tainting checks
7bab3ede 398 4096 (Obsolete, previously used for LEAKTEST)
db2ba183 399 8192 H Hash dump -- usurps values()
400 16384 X Scratchpad allocation
401 32768 D Cleaning up
8b73bbec 402 65536 S Thread synchronization
607df283 403 131072 T Tokenising
04932ac8 404 262144 R Include reference counts of dumped variables (eg when using -Ds)
1045810a 405 524288 J Do not s,t,P-debug (Jump over) opcodes within package DB
d6721266 406 1048576 v Verbose: use in conjunction with other flags
46187eeb 407 2097152 C Copy On Write
ecae49c0 408 4194304 A Consistency checks on internal structures
3679267a 409 8388608 q quiet - currently only suppresses the "EXECUTING" message
a0d0e21e 410
19799a22 411All these flags require B<-DDEBUGGING> when you compile the Perl
1045810a 412executable (but see L<Devel::Peek>, L<re> which may change this).
44a4342c 413See the F<INSTALL> file in the Perl source distribution
19799a22 414for how to do this. This flag is automatically set if you include B<-g>
8c52afec 415option when C<Configure> asks you about optimizer/debugger flags.
416
19799a22 417If you're just trying to get a print out of each line of Perl code
418as it executes, the way that C<sh -x> provides for shell scripts,
44a4342c 419you can't use Perl's B<-D> switch. Instead do this
19799a22 420
c406981e 421 # If you have "env" utility
fdac53cd 422 env PERLDB_OPTS="NonStop=1 AutoTrace=1 frame=2" perl -dS program
c406981e 423
19799a22 424 # Bourne shell syntax
425 $ PERLDB_OPTS="NonStop=1 AutoTrace=1 frame=2" perl -dS program
426
427 # csh syntax
428 % (setenv PERLDB_OPTS "NonStop=1 AutoTrace=1 frame=2"; perl -dS program)
429
430See L<perldebug> for details and variations.
431
a0d0e21e 432=item B<-e> I<commandline>
433
19799a22 434may be used to enter one line of program. If B<-e> is given, Perl
435will not look for a filename in the argument list. Multiple B<-e>
436commands may be given to build up a multi-line script. Make sure
437to use semicolons where you would in a normal program.
a0d0e21e 438
20ef40cf 439=item B<-f>
440
441Disable executing F<$Config{siteperl}/sitecustomize.pl> at
442startup.
443
444Perl can be built so that it by default will try to execute
445F<$Config{siteperl}/sitecustomize.pl> at startup. This is a hook that
446allows the sysadmin to customize how perl behaves. It can for
447instance be used to add entries to the @INC array to make perl find
448modules in non-standard locations.
449
e0ebc809 450=item B<-F>I<pattern>
a0d0e21e 451
e0ebc809 452specifies the pattern to split on if B<-a> is also in effect. The
5f05dabc 453pattern may be surrounded by C<//>, C<"">, or C<''>, otherwise it will be
e0ebc809 454put in single quotes.
a0d0e21e 455
e0ebc809 456=item B<-h>
457
458prints a summary of the options.
459
460=item B<-i>[I<extension>]
a0d0e21e 461
2d259d92 462specifies that files processed by the C<E<lt>E<gt>> construct are to be
463edited in-place. It does this by renaming the input file, opening the
464output file by the original name, and selecting that output file as the
465default for print() statements. The extension, if supplied, is used to
466modify the name of the old file to make a backup copy, following these
467rules:
468
469If no extension is supplied, no backup is made and the current file is
470overwritten.
471
19799a22 472If the extension doesn't contain a C<*>, then it is appended to the
473end of the current filename as a suffix. If the extension does
474contain one or more C<*> characters, then each C<*> is replaced
475with the current filename. In Perl terms, you could think of this
476as:
2d259d92 477
66606d78 478 ($backup = $extension) =~ s/\*/$file_name/g;
2d259d92 479
480This allows you to add a prefix to the backup file, instead of (or in
481addition to) a suffix:
482
ddffceb7 483 $ perl -pi'orig_*' -e 's/bar/baz/' fileA # backup to 'orig_fileA'
2d259d92 484
485Or even to place backup copies of the original files into another
486directory (provided the directory already exists):
487
ddffceb7 488 $ perl -pi'old/*.orig' -e 's/bar/baz/' fileA # backup to 'old/fileA.orig'
2d259d92 489
66606d78 490These sets of one-liners are equivalent:
491
492 $ perl -pi -e 's/bar/baz/' fileA # overwrite current file
ddffceb7 493 $ perl -pi'*' -e 's/bar/baz/' fileA # overwrite current file
66606d78 494
ddffceb7 495 $ perl -pi'.orig' -e 's/bar/baz/' fileA # backup to 'fileA.orig'
496 $ perl -pi'*.orig' -e 's/bar/baz/' fileA # backup to 'fileA.orig'
66606d78 497
2d259d92 498From the shell, saying
a0d0e21e 499
19799a22 500 $ perl -p -i.orig -e "s/foo/bar/; ... "
a0d0e21e 501
19799a22 502is the same as using the program:
a0d0e21e 503
19799a22 504 #!/usr/bin/perl -pi.orig
a0d0e21e 505 s/foo/bar/;
506
507which is equivalent to
508
509 #!/usr/bin/perl
19799a22 510 $extension = '.orig';
511 LINE: while (<>) {
a0d0e21e 512 if ($ARGV ne $oldargv) {
66606d78 513 if ($extension !~ /\*/) {
514 $backup = $ARGV . $extension;
515 }
516 else {
517 ($backup = $extension) =~ s/\*/$ARGV/g;
518 }
519 rename($ARGV, $backup);
a0d0e21e 520 open(ARGVOUT, ">$ARGV");
521 select(ARGVOUT);
522 $oldargv = $ARGV;
523 }
524 s/foo/bar/;
525 }
526 continue {
527 print; # this prints to original filename
528 }
529 select(STDOUT);
530
531except that the B<-i> form doesn't need to compare $ARGV to $oldargv to
532know when the filename has changed. It does, however, use ARGVOUT for
66606d78 533the selected filehandle. Note that STDOUT is restored as the default
534output filehandle after the loop.
535
536As shown above, Perl creates the backup file whether or not any output
537is actually changed. So this is just a fancy way to copy files:
538
cd2d1bac 539 $ perl -p -i'/some/file/path/*' -e 1 file1 file2 file3...
19799a22 540or
cd2d1bac 541 $ perl -p -i'.orig' -e 1 file1 file2 file3...
66606d78 542
543You can use C<eof> without parentheses to locate the end of each input
544file, in case you want to append to each file, or reset line numbering
545(see example in L<perlfunc/eof>).
546
547If, for a given file, Perl is unable to create the backup file as
548specified in the extension then it will skip that file and continue on
549with the next one (if it exists).
550
19799a22 551For a discussion of issues surrounding file permissions and B<-i>,
cea6626f 552see L<perlfaq5/Why does Perl let me delete read-only files? Why does -i clobber protected files? Isn't this a bug in Perl?>.
66606d78 553
554You cannot use B<-i> to create directories or to strip extensions from
555files.
a0d0e21e 556
19799a22 557Perl does not expand C<~> in filenames, which is good, since some
558folks use it for their backup files:
a0d0e21e 559
19799a22 560 $ perl -pi~ -e 's/foo/bar/' file1 file2 file3...
561
a66b22ca 562Note that because B<-i> renames or deletes the original file before
0cb0633f 563creating a new file of the same name, UNIX-style soft and hard links will
564not be preserved.
a66b22ca 565
19799a22 566Finally, the B<-i> switch does not impede execution when no
a2008d6d 567files are given on the command line. In this case, no backup is made
568(the original file cannot, of course, be determined) and processing
569proceeds from STDIN to STDOUT as might be expected.
570
a0d0e21e 571=item B<-I>I<directory>
572
e0ebc809 573Directories specified by B<-I> are prepended to the search path for
1fef88e7 574modules (C<@INC>), and also tells the C preprocessor where to search for
e0ebc809 575include files. The C preprocessor is invoked with B<-P>; by default it
576searches /usr/include and /usr/lib/perl.
a0d0e21e 577
e0ebc809 578=item B<-l>[I<octnum>]
a0d0e21e 579
19799a22 580enables automatic line-ending processing. It has two separate
581effects. First, it automatically chomps C<$/> (the input record
582separator) when used with B<-n> or B<-p>. Second, it assigns C<$\>
583(the output record separator) to have the value of I<octnum> so
584that any print statements will have that separator added back on.
585If I<octnum> is omitted, sets C<$\> to the current value of
586C<$/>. For instance, to trim lines to 80 columns:
a0d0e21e 587
588 perl -lpe 'substr($_, 80) = ""'
589
590Note that the assignment C<$\ = $/> is done when the switch is processed,
591so the input record separator can be different than the output record
592separator if the B<-l> switch is followed by a B<-0> switch:
593
594 gnufind / -print0 | perl -ln0e 'print "found $_" if -p'
595
1fef88e7 596This sets C<$\> to newline and then sets C<$/> to the null character.
a0d0e21e 597
e0ebc809 598=item B<-m>[B<->]I<module>
599
600=item B<-M>[B<->]I<module>
c07a80fd 601
e0ebc809 602=item B<-M>[B<->]I<'module ...'>
603
604=item B<-[mM]>[B<->]I<module=arg[,arg]...>
3c81428c 605
19799a22 606B<-m>I<module> executes C<use> I<module> C<();> before executing your
607program.
3c81428c 608
19799a22 609B<-M>I<module> executes C<use> I<module> C<;> before executing your
610program. You can use quotes to add extra code after the module name,
611e.g., C<'-Mmodule qw(foo bar)'>.
3c81428c 612
19799a22 613If the first character after the B<-M> or B<-m> is a dash (C<->)
a5f75d66 614then the 'use' is replaced with 'no'.
615
54310121 616A little builtin syntactic sugar means you can also say
19799a22 617B<-mmodule=foo,bar> or B<-Mmodule=foo,bar> as a shortcut for
618C<'-Mmodule qw(foo bar)'>. This avoids the need to use quotes when
619importing symbols. The actual code generated by B<-Mmodule=foo,bar> is
e0ebc809 620C<use module split(/,/,q{foo,bar})>. Note that the C<=> form
19799a22 621removes the distinction between B<-m> and B<-M>.
3c81428c 622
a0d0e21e 623=item B<-n>
624
19799a22 625causes Perl to assume the following loop around your program, which
a0d0e21e 626makes it iterate over filename arguments somewhat like B<sed -n> or
627B<awk>:
628
19799a22 629 LINE:
a0d0e21e 630 while (<>) {
19799a22 631 ... # your program goes here
a0d0e21e 632 }
633
634Note that the lines are not printed by default. See B<-p> to have
08e9d68e 635lines printed. If a file named by an argument cannot be opened for
19799a22 636some reason, Perl warns you about it and moves on to the next file.
08e9d68e 637
fa11829f 638Here is an efficient way to delete all files that haven't been modified for
9976c5c7 639at least a week:
a0d0e21e 640
19799a22 641 find . -mtime +7 -print | perl -nle unlink
a0d0e21e 642
19799a22 643This is faster than using the B<-exec> switch of B<find> because you don't
644have to start a process on every filename found. It does suffer from
645the bug of mishandling newlines in pathnames, which you can fix if
44a4342c 646you follow the example under B<-0>.
a0d0e21e 647
648C<BEGIN> and C<END> blocks may be used to capture control before or after
19799a22 649the implicit program loop, just as in B<awk>.
a0d0e21e 650
651=item B<-p>
652
19799a22 653causes Perl to assume the following loop around your program, which
a0d0e21e 654makes it iterate over filename arguments somewhat like B<sed>:
655
656
19799a22 657 LINE:
a0d0e21e 658 while (<>) {
19799a22 659 ... # your program goes here
a0d0e21e 660 } continue {
08e9d68e 661 print or die "-p destination: $!\n";
a0d0e21e 662 }
663
08e9d68e 664If a file named by an argument cannot be opened for some reason, Perl
665warns you about it, and moves on to the next file. Note that the
c2611fb3 666lines are printed automatically. An error occurring during printing is
08e9d68e 667treated as fatal. To suppress printing use the B<-n> switch. A B<-p>
668overrides a B<-n> switch.
a0d0e21e 669
670C<BEGIN> and C<END> blocks may be used to capture control before or after
19799a22 671the implicit loop, just as in B<awk>.
a0d0e21e 672
673=item B<-P>
674
079a94c4 675B<NOTE: Use of -P is strongly discouraged because of its inherent
676problems, including poor portability.>
677
678This option causes your program to be run through the C preprocessor before
efdf3af0 679compilation by Perl. Because both comments and B<cpp> directives begin
a0d0e21e 680with the # character, you should avoid starting comments with any words
efdf3af0 681recognized by the C preprocessor such as C<"if">, C<"else">, or C<"define">.
079a94c4 682
683If you're considering using C<-P>, you might also want to look at the
684Filter::cpp module from CPAN.
685
686The problems of -P include, but are not limited to:
687
688=over 10
689
690=item *
691
692The C<#!> line is stripped, so any switches there don't apply.
693
694=item *
695
696A C<-P> on a C<#!> line doesn't work.
697
698=item *
699
700B<All> lines that begin with (whitespace and) a C<#> but
701do not look like cpp commands, are stripped, including anything
44a4342c 702inside Perl strings, regular expressions, and here-docs .
079a94c4 703
704=item *
705
706In some platforms the C preprocessor knows too much: it knows about
707the C++ -style until-end-of-line comments starting with C<"//">.
efdf3af0 708This will cause problems with common Perl constructs like
709
710 s/foo//;
711
712because after -P this will became illegal code
713
714 s/foo
715
716The workaround is to use some other quoting separator than C<"/">,
717like for example C<"!">:
718
719 s!foo!!;
a0d0e21e 720
079a94c4 721
722
723=item *
724
725It requires not only a working C preprocessor but also a working
726F<sed>. If not on UNIX, you are probably out of luck on this.
727
728=item *
729
730Script line numbers are not preserved.
731
732=item *
733
734The C<-x> does not work with C<-P>.
735
736=back
9a1f07e7 737
a0d0e21e 738=item B<-s>
739
19799a22 740enables rudimentary switch parsing for switches on the command
741line after the program name but before any filename arguments (or before
3bbcc830 742an argument of B<-->). This means you can have switches with two leading
743dashes (B<--help>). Any switch found there is removed from @ARGV and sets the
19799a22 744corresponding variable in the Perl program. The following program
3c0facb2 745prints "1" if the program is invoked with a B<-xyz> switch, and "abc"
746if it is invoked with B<-xyz=abc>.
a0d0e21e 747
748 #!/usr/bin/perl -s
3c0facb2 749 if ($xyz) { print "$xyz\n" }
a0d0e21e 750
3bbcc830 751Do note that B<--help> creates the variable ${-help}, which is not compliant
50b5b186 752with C<strict refs>. Also, when using this option on a script with
753warnings enabled you may get a lot of spurious "used only once" warnings.
3bbcc830 754
a0d0e21e 755=item B<-S>
756
757makes Perl use the PATH environment variable to search for the
19799a22 758program (unless the name of the program contains directory separators).
759
2a92aaa0 760On some platforms, this also makes Perl append suffixes to the
761filename while searching for it. For example, on Win32 platforms,
762the ".bat" and ".cmd" suffixes are appended if a lookup for the
763original name fails, and if the name does not already end in one
764of those suffixes. If your Perl was compiled with DEBUGGING turned
765on, using the -Dp switch to Perl shows how the search progresses.
766
fa3aa65a 767Typically this is used to emulate #! startup on platforms that don't
768support #!. Its also convenient when debugging a script that uses #!,
769and is thus normally found by the shell's $PATH search mechanism.
770
771This example works on many platforms that have a shell compatible with
772Bourne shell:
a0d0e21e 773
774 #!/usr/bin/perl
a3cb178b 775 eval 'exec /usr/bin/perl -wS $0 ${1+"$@"}'
a0d0e21e 776 if $running_under_some_shell;
777
19799a22 778The system ignores the first line and feeds the program to F</bin/sh>,
779which proceeds to try to execute the Perl program as a shell script.
a0d0e21e 780The shell executes the second line as a normal shell command, and thus
781starts up the Perl interpreter. On some systems $0 doesn't always
782contain the full pathname, so the B<-S> tells Perl to search for the
19799a22 783program if necessary. After Perl locates the program, it parses the
a0d0e21e 784lines and ignores them because the variable $running_under_some_shell
19799a22 785is never true. If the program will be interpreted by csh, you will need
a3cb178b 786to replace C<${1+"$@"}> with C<$*>, even though that doesn't understand
787embedded spaces (and such) in the argument list. To start up sh rather
a0d0e21e 788than csh, some systems may have to replace the #! line with a line
789containing just a colon, which will be politely ignored by Perl. Other
790systems can't control that, and need a totally devious construct that
19799a22 791will work under any of B<csh>, B<sh>, or Perl, such as the following:
a0d0e21e 792
19799a22 793 eval '(exit $?0)' && eval 'exec perl -wS $0 ${1+"$@"}'
a3cb178b 794 & eval 'exec /usr/bin/perl -wS $0 $argv:q'
5f05dabc 795 if $running_under_some_shell;
a0d0e21e 796
19799a22 797If the filename supplied contains directory separators (i.e., is an
798absolute or relative pathname), and if that file is not found,
799platforms that append file extensions will do so and try to look
800for the file with those extensions added, one by one.
801
802On DOS-like platforms, if the program does not contain directory
803separators, it will first be searched for in the current directory
804before being searched for on the PATH. On Unix platforms, the
805program will be searched for strictly on the PATH.
806
6537fe72 807=item B<-t>
808
809Like B<-T>, but taint checks will issue warnings rather than fatal
317ea90d 810errors. These warnings can be controlled normally with C<no warnings
811qw(taint)>.
1dbad523 812
813B<NOTE: this is not a substitute for -T.> This is meant only to be
814used as a temporary development aid while securing legacy code:
815for real production code and for new secure code written from scratch
816always use the real B<-T>.
6537fe72 817
a0d0e21e 818=item B<-T>
819
a3cb178b 820forces "taint" checks to be turned on so you can test them. Ordinarily
19799a22 821these checks are done only when running setuid or setgid. It's a
822good idea to turn them on explicitly for programs that run on behalf
823of someone else whom you might not necessarily trust, such as CGI
824programs or any internet servers you might write in Perl. See
825L<perlsec> for details. For security reasons, this option must be
826seen by Perl quite early; usually this means it must appear early
827on the command line or in the #! line for systems which support
828that construct.
a0d0e21e 829
830=item B<-u>
831
19799a22 832This obsolete switch causes Perl to dump core after compiling your
833program. You can then in theory take this core dump and turn it
834into an executable file by using the B<undump> program (not supplied).
835This speeds startup at the expense of some disk space (which you
836can minimize by stripping the executable). (Still, a "hello world"
837executable comes out to about 200K on my machine.) If you want to
838execute a portion of your program before dumping, use the dump()
839operator instead. Note: availability of B<undump> is platform
840specific and may not be available for a specific port of Perl.
841
842This switch has been superseded in favor of the new Perl code
843generator backends to the compiler. See L<B> and L<B::Bytecode>
844for details.
a0d0e21e 845
846=item B<-U>
847
848allows Perl to do unsafe operations. Currently the only "unsafe"
849operations are the unlinking of directories while running as superuser,
850and running setuid programs with fatal taint checks turned into
19799a22 851warnings. Note that the B<-w> switch (or the C<$^W> variable) must
852be used along with this option to actually I<generate> the
fb73857a 853taint-check warnings.
a0d0e21e 854
855=item B<-v>
856
19799a22 857prints the version and patchlevel of your perl executable.
a0d0e21e 858
3c81428c 859=item B<-V>
860
861prints summary of the major perl configuration values and the current
19799a22 862values of @INC.
3c81428c 863
307dc113 864=item B<-V:>I<configvar>
3c81428c 865
4a305f6a 866Prints to STDOUT the value of the named configuration variable(s),
307dc113 867with multiples when your configvar argument looks like a regex (has
868non-letters). For example:
3c81428c 869
307dc113 870 $ perl -V:libc
871 libc='/lib/libc-2.2.4.so';
4a305f6a 872 $ perl -V:lib.
873 libs='-lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lc';
874 libc='/lib/libc-2.2.4.so';
875 $ perl -V:lib.*
876 libpth='/usr/local/lib /lib /usr/lib';
877 libs='-lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lc';
878 lib_ext='.a';
879 libc='/lib/libc-2.2.4.so';
880 libperl='libperl.a';
881 ....
882
883Additionally, extra colons can be used to control formatting. A
884trailing colon suppresses the linefeed and terminator ';', allowing
885you to embed queries into shell commands. (mnemonic: PATH separator
886':'.)
887
888 $ echo "compression-vars: " `perl -V:z.*: ` " are here !"
889 compression-vars: zcat='' zip='zip' are here !
890
891A leading colon removes the 'name=' part of the response, this allows
307dc113 892you to map to the name you need. (mnemonic: empty label)
4a305f6a 893
894 $ echo "goodvfork="`./perl -Ilib -V::usevfork`
895 goodvfork=false;
896
897Leading and trailing colons can be used together if you need
898positional parameter values without the names. Note that in the case
899below, the PERL_API params are returned in alphabetical order.
900
901 $ echo building_on `perl -V::osname: -V::PERL_API_.*:` now
902 building_on 'linux' '5' '1' '9' now
a0d0e21e 903
19799a22 904=item B<-w>
774d564b 905
19799a22 906prints warnings about dubious constructs, such as variable names
907that are mentioned only once and scalar variables that are used
908before being set, redefined subroutines, references to undefined
909filehandles or filehandles opened read-only that you are attempting
a4d9c8a6 910to write on, values used as a number that don't look like numbers,
19799a22 911using an array as though it were a scalar, if your subroutines
912recurse more than 100 deep, and innumerable other things.
913
b40da996 914This switch really just enables the internal C<$^W> variable. You
19799a22 915can disable or promote into fatal errors specific warnings using
916C<__WARN__> hooks, as described in L<perlvar> and L<perlfunc/warn>.
917See also L<perldiag> and L<perltrap>. A new, fine-grained warning
918facility is also available if you want to manipulate entire classes
9f1b1f2d 919of warnings; see L<warnings> or L<perllexwarn>.
a0d0e21e 920
0453d815 921=item B<-W>
922
3c0facb2 923Enables all warnings regardless of C<no warnings> or C<$^W>.
0453d815 924See L<perllexwarn>.
925
926=item B<-X>
927
3c0facb2 928Disables all warnings regardless of C<use warnings> or C<$^W>.
0453d815 929See L<perllexwarn>.
930
136e4fd6 931=item B<-x>
932
a0d0e21e 933=item B<-x> I<directory>
934
19799a22 935tells Perl that the program is embedded in a larger chunk of unrelated
936ASCII text, such as in a mail message. Leading garbage will be
937discarded until the first line that starts with #! and contains the
938string "perl". Any meaningful switches on that line will be applied.
939If a directory name is specified, Perl will switch to that directory
940before running the program. The B<-x> switch controls only the
941disposal of leading garbage. The program must be terminated with
942C<__END__> if there is trailing garbage to be ignored (the program
943can process any or all of the trailing garbage via the DATA filehandle
944if desired).
a0d0e21e 945
1e422769 946=back
947
948=head1 ENVIRONMENT
949
950=over 12
951
952=item HOME
953
954Used if chdir has no argument.
955
956=item LOGDIR
957
958Used if chdir has no argument and HOME is not set.
959
960=item PATH
961
19799a22 962Used in executing subprocesses, and in finding the program if B<-S> is
1e422769 963used.
964
965=item PERL5LIB
966
48b971ca 967A list of directories in which to look for Perl library
1e422769 968files before looking in the standard library and the current
951ba7fe 969directory. Any architecture-specific directories under the specified
970locations are automatically included if they exist. If PERL5LIB is not
48b971ca 971defined, PERLLIB is used. Directories are separated (like in PATH) by
972a colon on unixish platforms and by a semicolon on Windows (the proper
973path separator being given by the command C<perl -V:path_sep>).
951ba7fe 974
975When running taint checks (either because the program was running setuid
976or setgid, or the B<-T> switch was used), neither variable is used.
977The program should instead say:
1e422769 978
979 use lib "/my/directory";
980
54310121 981=item PERL5OPT
982
983Command-line options (switches). Switches in this variable are taken
1c4db469 984as if they were on every Perl command line. Only the B<-[DIMUdmtw]>
19799a22 985switches are allowed. When running taint checks (because the program
54310121 986was running setuid or setgid, or the B<-T> switch was used), this
74288ac8 987variable is ignored. If PERL5OPT begins with B<-T>, tainting will be
988enabled, and any subsequent options ignored.
54310121 989
16537909 990=item PERLIO
991
44a4342c 992A space (or colon) separated list of PerlIO layers. If perl is built
03d9e98a 993to use PerlIO system for IO (the default) these layers effect perl's IO.
44a4342c 994
995It is conventional to start layer names with a colon e.g. C<:perlio> to
996emphasise their similarity to variable "attributes". But the code that parses
997layer specification strings (which is also used to decode the PERLIO
998environment variable) treats the colon as a separator.
999
3b0db4f9 1000An unset or empty PERLIO is equivalent to C<:stdio>.
1001
44a4342c 1002The list becomes the default for I<all> perl's IO. Consequently only built-in
1003layers can appear in this list, as external layers (such as :encoding()) need
1004IO in order to load them!. See L<"open pragma"|open> for how to add external
1005encodings as defaults.
1006
1007The layers that it makes sense to include in the PERLIO environment
3d897973 1008variable are briefly summarised below. For more details see L<PerlIO>.
16537909 1009
1010=over 8
1011
1012=item :bytes
1013
18aba96f 1014A pseudolayer that turns I<off> the C<:utf8> flag for the layer below.
1015Unlikely to be useful on its own in the global PERLIO environment variable.
1016You perhaps were thinking of C<:crlf:bytes> or C<:perlio:bytes>.
16537909 1017
1018=item :crlf
1019
3d897973 1020A layer which does CRLF to "\n" translation distinguishing "text" and
1021"binary" files in the manner of MS-DOS and similar operating systems.
1022(It currently does I<not> mimic MS-DOS as far as treating of Control-Z
1023as being an end-of-file marker.)
44a4342c 1024
1025=item :mmap
1026
1027A layer which implements "reading" of files by using C<mmap()> to
1028make (whole) file appear in the process's address space, and then
3d897973 1029using that as PerlIO's "buffer".
16537909 1030
44a4342c 1031=item :perlio
16537909 1032
3d897973 1033This is a re-implementation of "stdio-like" buffering written as a
1034PerlIO "layer". As such it will call whatever layer is below it for
1035its operations (typically C<:unix>).
16537909 1036
18aba96f 1037=item :pop
1038
1039An experimental pseudolayer that removes the topmost layer.
3d897973 1040Use with the same care as is reserved for nitroglycerin.
18aba96f 1041
44a4342c 1042=item :raw
16537909 1043
136e4fd6 1044A pseudolayer that manipulates other layers. Applying the C<:raw>
18aba96f 1045layer is equivalent to calling C<binmode($fh)>. It makes the stream
1046pass each byte as-is without any translation. In particular CRLF
1047translation, and/or :utf8 intuited from locale are disabled.
1cbfc93d 1048
3d897973 1049Unlike in the earlier versions of Perl C<:raw> is I<not>
1050just the inverse of C<:crlf> - other layers which would affect the
1051binary nature of the stream are also removed or disabled.
16537909 1052
44a4342c 1053=item :stdio
1054
1055This layer provides PerlIO interface by wrapping system's ANSI C "stdio"
1056library calls. The layer provides both buffering and IO.
1057Note that C<:stdio> layer does I<not> do CRLF translation even if that
1058is platforms normal behaviour. You will need a C<:crlf> layer above it
1059to do that.
1060
1061=item :unix
1062
3d897973 1063Low level layer which calls C<read>, C<write> and C<lseek> etc.
16537909 1064
1065=item :utf8
1066
18aba96f 1067A pseudolayer that turns on a flag on the layer below to tell perl
3d897973 1068that output should be in utf8 and that input should be regarded as
1069already in utf8 form. May be useful in PERLIO environment
1070variable to make UTF-8 the default. (To turn off that behaviour
1071use C<:bytes> layer.)
44a4342c 1072
1073=item :win32
1074
ab4f7683 1075On Win32 platforms this I<experimental> layer uses native "handle" IO
44a4342c 1076rather than unix-like numeric file descriptor layer. Known to be
1077buggy in this release.
16537909 1078
1079=back
1080
44a4342c 1081On all platforms the default set of layers should give acceptable results.
1082
ab4f7683 1083For UNIX platforms that will equivalent of "unix perlio" or "stdio".
44a4342c 1084Configure is setup to prefer "stdio" implementation if system's library
1085provides for fast access to the buffer, otherwise it uses the "unix perlio"
1086implementation.
1087
1088On Win32 the default in this release is "unix crlf". Win32's "stdio"
1089has a number of bugs/mis-features for perl IO which are somewhat
99366417 1090C compiler vendor/version dependent. Using our own C<crlf> layer as
44a4342c 1091the buffer avoids those issues and makes things more uniform.
1092The C<crlf> layer provides CRLF to/from "\n" conversion as well as
1093buffering.
1094
1095This release uses C<unix> as the bottom layer on Win32 and so still uses C
1096compiler's numeric file descriptor routines. There is an experimental native
3d897973 1097C<win32> layer which is expected to be enhanced and should eventually be
1098the default under Win32.
44a4342c 1099
1100=item PERLIO_DEBUG
1101
1102If set to the name of a file or device then certain operations of PerlIO
1103sub-system will be logged to that file (opened as append). Typical uses
1104are UNIX:
1105
1106 PERLIO_DEBUG=/dev/tty perl script ...
1107
1108and Win32 approximate equivalent:
1109
1110 set PERLIO_DEBUG=CON
1111 perl script ...
1112
923e8b21 1113This functionality is disabled for setuid scripts and for scripts run
1114with B<-T>.
16537909 1115
1e422769 1116=item PERLLIB
1117
48b971ca 1118A list of directories in which to look for Perl library
1e422769 1119files before looking in the standard library and the current directory.
1120If PERL5LIB is defined, PERLLIB is not used.
1121
1122=item PERL5DB
1123
1124The command used to load the debugger code. The default is:
1125
1126 BEGIN { require 'perl5db.pl' }
1127
2cbb2ee1 1128=item PERL5DB_THREADED
1129
1130If set to a true value, indicates to the debugger that the code being
1131debugged uses threads.
1132
19799a22 1133=item PERL5SHELL (specific to the Win32 port)
174c211a 1134
1135May be set to an alternative shell that perl must use internally for
11998fdb 1136executing "backtick" commands or system(). Default is C<cmd.exe /x/d/c>
ce1da67e 1137on WindowsNT and C<command.com /c> on Windows95. The value is considered
19799a22 1138to be space-separated. Precede any character that needs to be protected
ce1da67e 1139(like a space or backslash) with a backslash.
1140
1141Note that Perl doesn't use COMSPEC for this purpose because
1142COMSPEC has a high degree of variability among users, leading to
1143portability concerns. Besides, perl can use a shell that may not be
1144fit for interactive use, and setting COMSPEC to such a shell may
1145interfere with the proper functioning of other programs (which usually
1146look in COMSPEC to find a shell fit for interactive use).
174c211a 1147
1c972609 1148=item PERL_ALLOW_NON_IFS_LSP (specific to the Win32 port)
1149
1150Set to 1 to allow the use of non-IFS compatible LSP's.
1151Perl normally searches for an IFS-compatible LSP because this is required
1152for its emulation of Windows sockets as real filehandles. However, this may
1153cause problems if you have a firewall such as McAfee Guardian which requires
1154all applications to use its LSP which is not IFS-compatible, because clearly
1155Perl will normally avoid using such an LSP.
1156Setting this environment variable to 1 means that Perl will simply use the
1157first suitable LSP enumerated in the catalog, which keeps McAfee Guardian
1158happy (and in that particular case Perl still works too because McAfee
1159Guardian's LSP actually plays some other games which allow applications
1160requiring IFS compatibility to work).
1161
1e422769 1162=item PERL_DEBUG_MSTATS
1163
67ce8856 1164Relevant only if perl is compiled with the malloc included with the perl
a3cb178b 1165distribution (that is, if C<perl -V:d_mymalloc> is 'define').
1166If set, this causes memory statistics to be dumped after execution. If set
1e422769 1167to an integer greater than one, also causes memory statistics to be dumped
1168after compilation.
1169
1170=item PERL_DESTRUCT_LEVEL
1171
1172Relevant only if your perl executable was built with B<-DDEBUGGING>,
1173this controls the behavior of global destruction of objects and other
64cea5fd 1174references. See L<perlhack/PERL_DESTRUCT_LEVEL> for more information.
a0d0e21e 1175
02c7413a 1176=item PERL_DL_NONLAZY
1177
1178Set to one to have perl resolve B<all> undefined symbols when it loads
1179a dynamic library. The default behaviour is to resolve symbols when
1180they are used. Setting this variable is useful during testing of
1181extensions as it ensures that you get an error on misspelled function
1182names even if the test suite doesn't call it.
1183
5d170f3a 1184=item PERL_ENCODING
1185
1186If using the C<encoding> pragma without an explicit encoding name, the
1187PERL_ENCODING environment variable is consulted for an encoding name.
1188
504f80c1 1189=item PERL_HASH_SEED
1190
183c3da1 1191(Since Perl 5.8.1.) Used to randomise Perl's internal hash function.
4546b9e6 1192To emulate the pre-5.8.1 behaviour, set to an integer (zero means
1193exactly the same order as 5.8.0). "Pre-5.8.1" means, among other
1194things, that hash keys will be ordered the same between different runs
1195of Perl.
504f80c1 1196
4546b9e6 1197The default behaviour is to randomise unless the PERL_HASH_SEED is set.
1198If Perl has been compiled with C<-DUSE_HASH_SEED_EXPLICIT>, the default
1199behaviour is B<not> to randomise unless the PERL_HASH_SEED is set.
504f80c1 1200
1201If PERL_HASH_SEED is unset or set to a non-numeric string, Perl uses
1202the pseudorandom seed supplied by the operating system and libraries.
4546b9e6 1203This means that each different run of Perl will have a different
1204ordering of the results of keys(), values(), and each().
504f80c1 1205
26a2d347 1206B<Please note that the hash seed is sensitive information>. Hashes are
1207randomized to protect against local and remote attacks against Perl
1208code. By manually setting a seed this protection may be partially or
1209completely lost.
1210
1211See L<perlsec/"Algorithmic Complexity Attacks"> and
1212L</PERL_HASH_SEED_DEBUG> for more information.
504f80c1 1213
2191697e 1214=item PERL_HASH_SEED_DEBUG
1215
e67b9e52 1216(Since Perl 5.8.1.) Set to one to display (to STDERR) the value of
26a2d347 1217the hash seed at the beginning of execution. This, combined with
1218L</PERL_HASH_SEED> is intended to aid in debugging nondeterministic
1219behavior caused by hash randomization.
1220
1221B<Note that the hash seed is sensitive information>: by knowing it one
1222can craft a denial-of-service attack against Perl code, even remotely,
1223see L<perlsec/"Algorithmic Complexity Attacks"> for more information.
e67b9e52 1224B<Do not disclose the hash seed> to people who don't need to know it.
9a7034eb 1225See also hash_seed() of L<Hash::Util>.
2191697e 1226
3d0ae7ba 1227=item PERL_ROOT (specific to the VMS port)
1228
1229A translation concealed rooted logical name that contains perl and the
1230logical device for the @INC path on VMS only. Other logical names that
44a4342c 1231affect perl on VMS include PERLSHR, PERL_ENV_TABLES, and
1232SYS$TIMEZONE_DIFFERENTIAL but are optional and discussed further in
3d0ae7ba 1233L<perlvms> and in F<README.vms> in the Perl source distribution.
1234
4ffa73a3 1235=item PERL_SIGNALS
1236
1237In Perls 5.8.1 and later. If set to C<unsafe> the pre-Perl-5.8.0
1238signals behaviour (immediate but unsafe) is restored. If set to
ec488bcf 1239C<safe> the safe (or deferred) signals are used.
65c3f8ef 1240See L<perlipc/"Deferred Signals (Safe Signals)">.
4ffa73a3 1241
a05d7ebb 1242=item PERL_UNICODE
acae81db 1243
bf61ac64 1244Equivalent to the B<-C> command-line switch. Note that this is not
1245a boolean variable-- setting this to C<"1"> is not the right way to
5b4f334e 1246"enable Unicode" (whatever that would mean). You can use C<"0"> to
e654d908 1247"disable Unicode", though (or alternatively unset PERL_UNICODE in
1248your shell before starting Perl). See the description of the C<-C>
1249switch for more information.
acae81db 1250
3d0ae7ba 1251=item SYS$LOGIN (specific to the VMS port)
1252
1253Used if chdir has no argument and HOME and LOGDIR are not set.
1254
a0d0e21e 1255=back
1e422769 1256
1257Perl also has environment variables that control how Perl handles data
1258specific to particular natural languages. See L<perllocale>.
1259
1260Apart from these, Perl uses no other environment variables, except
19799a22 1261to make them available to the program being executed, and to child
1262processes. However, programs running setuid would do well to execute
1e422769 1263the following lines before doing anything else, just to keep people
1264honest:
1265
19799a22 1266 $ENV{PATH} = '/bin:/usr/bin'; # or whatever you need
7bac28a0 1267 $ENV{SHELL} = '/bin/sh' if exists $ENV{SHELL};
c90c0ff4 1268 delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};