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