summaryrefslogtreecommitdiffstats
path: root/upstream/mageia-cauldron/man1/perlrun.1
diff options
context:
space:
mode:
Diffstat (limited to 'upstream/mageia-cauldron/man1/perlrun.1')
-rw-r--r--upstream/mageia-cauldron/man1/perlrun.11630
1 files changed, 1630 insertions, 0 deletions
diff --git a/upstream/mageia-cauldron/man1/perlrun.1 b/upstream/mageia-cauldron/man1/perlrun.1
new file mode 100644
index 00000000..0301f67a
--- /dev/null
+++ b/upstream/mageia-cauldron/man1/perlrun.1
@@ -0,0 +1,1630 @@
+.\" -*- mode: troff; coding: utf-8 -*-
+.\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
+.ie n \{\
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{\
+. if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{\
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\" ========================================================================
+.\"
+.IX Title "PERLRUN 1"
+.TH PERLRUN 1 2023-11-28 "perl v5.38.2" "Perl Programmers Reference Guide"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH NAME
+perlrun \- how to execute the Perl interpreter
+.SH SYNOPSIS
+.IX Header "SYNOPSIS"
+\&\fBperl\fR [\ \fB\-gsTtuUWX\fR\ ]
+ [\ \fB\-h?v\fR\ ]\ [\ \fB\-V\fR[:\fIconfigvar\fR]\ ]
+ [\ \fB\-cw\fR\ ]\ [\ \fB\-d\fR[\fBt\fR][:\fIdebugger\fR]\ ]\ [\ \fB\-D\fR[\fInumber/list\fR]\ ]
+ [\ \fB\-pna\fR\ ]\ [\ \fB\-F\fR\fIpattern\fR\ ]\ [\ \fB\-l\fR[\fIoctal\fR]\ ]\ [\ \fB\-0\fR[\fIoctal/hexadecimal\fR]\ ]
+ [\ \fB\-I\fR\fIdir\fR\ ]\ [\ \fB\-m\fR[\fB\-\fR]\fImodule\fR\ ]\ [\ \fB\-M\fR[\fB\-\fR]\fI'module...'\fR\ ]\ [\ \fB\-f\fR\ ]
+ [\ \fB\-C\ [\fR\f(BInumber/list\fR\fB]\ \fR]
+ [\ \fB\-S\fR\ ]
+ [\ \fB\-x\fR[\fIdir\fR]\ ]
+ [\ \fB\-i\fR[\fIextension\fR]\ ]
+ [\ [\fB\-e\fR|\fB\-E\fR]\ \fI'command'\fR\ ]\ [\ \fB\-\-\fR\ ]\ [\ \fIprogramfile\fR\ ]\ [\ \fIargument\fR\ ]...
+.SH DESCRIPTION
+.IX Header "DESCRIPTION"
+The normal way to run a Perl program is by making it directly
+executable, or else by passing the name of the source file as an
+argument on the command line. (An interactive Perl environment
+is also possible\-\-see perldebug for details on how to do that.)
+Upon startup, Perl looks for your program in one of the following
+places:
+.IP 1. 4
+Specified line by line via \-e or \-E
+switches on the command line.
+.IP 2. 4
+Contained in the file specified by the first filename on the command line.
+(Note that systems supporting the \f(CW\*(C`#!\*(C'\fR notation invoke interpreters this
+way. See "Location of Perl".)
+.IP 3. 4
+Passed in implicitly via standard input. This works only if there are
+no filename arguments\-\-to pass arguments to a STDIN-read program you
+must explicitly specify a "\-" for the program name.
+.PP
+With methods 2 and 3, Perl starts parsing the input file from the
+beginning, unless you've specified a "\-x" switch, in which case it
+scans for the first line starting with \f(CW\*(C`#!\*(C'\fR and containing the word
+"perl", and starts there instead. This is useful for running a program
+embedded in a larger message. (In this case you would indicate the end
+of the program using the \f(CW\*(C`_\|_END_\|_\*(C'\fR token.)
+.PP
+The \f(CW\*(C`#!\*(C'\fR line is always examined for switches as the line is being
+parsed. Thus, if you're on a machine that allows only one argument
+with the \f(CW\*(C`#!\*(C'\fR line, or worse, doesn't even recognize the \f(CW\*(C`#!\*(C'\fR line, you
+still can get consistent switch behaviour regardless of how Perl was
+invoked, even if "\-x" was used to find the beginning of the program.
+.PP
+Because historically some operating systems silently chopped off
+kernel interpretation of the \f(CW\*(C`#!\*(C'\fR line after 32 characters, some
+switches may be passed in on the command line, and some may not;
+you could even get a "\-" without its letter, if you're not careful.
+You probably want to make sure that all your switches fall either
+before or after that 32\-character boundary. Most switches don't
+actually care if they're processed redundantly, but getting a "\-"
+instead of a complete switch could cause Perl to try to execute
+standard input instead of your program. And a partial \-I
+switch could also cause odd results.
+.PP
+Some switches do care if they are processed twice, for instance
+combinations of \-l and \-0.
+Either put all the switches after the 32\-character boundary (if
+applicable), or replace the use of \fB\-0\fR\fIdigits\fR by
+\&\f(CW\*(C`BEGIN{ $/ = "\e0digits"; }\*(C'\fR.
+.PP
+Parsing of the \f(CW\*(C`#!\*(C'\fR switches starts wherever "perl" is mentioned in the line.
+The sequences "\-*" and "\- " are specifically ignored so that you could,
+if you were so inclined, say
+.PP
+.Vb 4
+\& #!/bin/sh
+\& #! \-*\- perl \-*\- \-p
+\& eval \*(Aqexec perl \-x \-wS $0 ${1+"$@"}\*(Aq
+\& if 0;
+.Ve
+.PP
+to let Perl see the "\-p" switch.
+.PP
+A similar trick involves the \fIenv\fR program, if you have it.
+.PP
+.Vb 1
+\& #!/usr/bin/env perl
+.Ve
+.PP
+The examples above use a relative path to the perl interpreter,
+getting whatever version is first in the user's path. If you want
+a specific version of Perl, say, perl5.14.1, you should place
+that directly in the \f(CW\*(C`#!\*(C'\fR line's path.
+.PP
+If the \f(CW\*(C`#!\*(C'\fR line does not contain the word "perl" nor the word "indir",
+the program named after the \f(CW\*(C`#!\*(C'\fR is executed instead of the Perl
+interpreter. This is slightly bizarre, but it helps people on machines
+that don't do \f(CW\*(C`#!\*(C'\fR, because they can tell a program that their SHELL is
+\&\fI/usr/bin/perl\fR, and Perl will then dispatch the program to the correct
+interpreter for them.
+.PP
+After locating your program, Perl compiles the entire program to an
+internal form. If there are any compilation errors, execution of the
+program is not attempted. (This is unlike the typical shell script,
+which might run part-way through before finding a syntax error.)
+.PP
+If the program is syntactically correct, it is executed. If the program
+runs off the end without hitting an \fBexit()\fR or \fBdie()\fR operator, an implicit
+\&\f(CWexit(0)\fR is provided to indicate successful completion.
+.SS "#! and quoting on non-Unix systems"
+.IX Xref "hashbang #!"
+.IX Subsection "#! and quoting on non-Unix systems"
+Unix's \f(CW\*(C`#!\*(C'\fR technique can be simulated on other systems:
+.IP OS/2 4
+.IX Item "OS/2"
+Put
+.Sp
+.Vb 1
+\& extproc perl \-S \-your_switches
+.Ve
+.Sp
+as the first line in \f(CW\*(C`*.cmd\*(C'\fR file ("\-S" due to a bug in cmd.exe's
+`extproc' handling).
+.IP MS-DOS 4
+.IX Item "MS-DOS"
+Create a batch file to run your program, and codify it in
+\&\f(CW\*(C`ALTERNATE_SHEBANG\*(C'\fR (see the \fIdosish.h\fR file in the source
+distribution for more information).
+.IP Win95/NT 4
+.IX Item "Win95/NT"
+The Win95/NT installation, when using the ActiveState installer for Perl,
+will modify the Registry to associate the \fI.pl\fR extension with the perl
+interpreter. If you install Perl by other means (including building from
+the sources), you may have to modify the Registry yourself. Note that
+this means you can no longer tell the difference between an executable
+Perl program and a Perl library file.
+.IP VMS 4
+.IX Item "VMS"
+Put
+.Sp
+.Vb 2
+\& $ perl \-mysw \*(Aqf$env("procedure")\*(Aq \*(Aqp1\*(Aq \*(Aqp2\*(Aq \*(Aqp3\*(Aq \*(Aqp4\*(Aq \*(Aqp5\*(Aq \*(Aqp6\*(Aq \*(Aqp7\*(Aq \*(Aqp8\*(Aq !
+\& $ exit++ + ++$status != 0 and $exit = $status = undef;
+.Ve
+.Sp
+at the top of your program, where \fB\-mysw\fR are any command line switches you
+want to pass to Perl. You can now invoke the program directly, by saying
+\&\f(CW\*(C`perl program\*(C'\fR, or as a DCL procedure, by saying \f(CW@program\fR (or implicitly
+via \fIDCL$PATH\fR by just using the name of the program).
+.Sp
+This incantation is a bit much to remember, but Perl will display it for
+you if you say \f(CW\*(C`perl "\-V:startperl"\*(C'\fR.
+.PP
+Command-interpreters on non-Unix systems have rather different ideas
+on quoting than Unix shells. You'll need to learn the special
+characters in your command-interpreter (\f(CW\*(C`*\*(C'\fR, \f(CW\*(C`\e\*(C'\fR and \f(CW\*(C`"\*(C'\fR are
+common) and how to protect whitespace and these characters to run
+one-liners (see \-e below).
+.PP
+On some systems, you may have to change single-quotes to double ones,
+which you must \fInot\fR do on Unix or Plan 9 systems. You might also
+have to change a single % to a %%.
+.PP
+For example:
+.PP
+.Vb 2
+\& # Unix
+\& perl \-e \*(Aqprint "Hello world\en"\*(Aq
+\&
+\& # MS\-DOS, etc.
+\& perl \-e "print \e"Hello world\en\e""
+\&
+\& # VMS
+\& perl \-e "print ""Hello world\en"""
+.Ve
+.PP
+The problem is that none of this is reliable: it depends on the
+command and it is entirely possible neither works. If \fI4DOS\fR were
+the command shell, this would probably work better:
+.PP
+.Vb 1
+\& perl \-e "print <Ctrl\-x>"Hello world\en<Ctrl\-x>""
+.Ve
+.PP
+\&\fBCMD.EXE\fR in Windows NT slipped a lot of standard Unix functionality in
+when nobody was looking, but just try to find documentation for its
+quoting rules.
+.PP
+There is no general solution to all of this. It's just a mess.
+.SS "Location of Perl"
+.IX Xref "perl, location of interpreter"
+.IX Subsection "Location of Perl"
+It may seem obvious to say, but Perl is useful only when users can
+easily find it. When possible, it's good for both \fI/usr/bin/perl\fR
+and \fI/usr/local/bin/perl\fR to be symlinks to the actual binary. If
+that can't be done, system administrators are strongly encouraged
+to put (symlinks to) perl and its accompanying utilities into a
+directory typically found along a user's PATH, or in some other
+obvious and convenient place.
+.PP
+In this documentation, \f(CW\*(C`#!/usr/bin/perl\*(C'\fR on the first line of the program
+will stand in for whatever method works on your system. You are
+advised to use a specific path if you care about a specific version.
+.PP
+.Vb 1
+\& #!/usr/local/bin/perl5.14
+.Ve
+.PP
+or if you just want to be running at least version, place a statement
+like this at the top of your program:
+.PP
+.Vb 1
+\& use v5.14;
+.Ve
+.SS "Command Switches"
+.IX Xref "perl, command switches command switches"
+.IX Subsection "Command Switches"
+As with all standard commands, a single-character switch may be
+clustered with the following switch, if any.
+.PP
+.Vb 1
+\& #!/usr/bin/perl \-spi.orig # same as \-s \-p \-i.orig
+.Ve
+.PP
+A \f(CW\*(C`\-\-\*(C'\fR signals the end of options and disables further option processing. Any
+arguments after the \f(CW\*(C`\-\-\*(C'\fR are treated as filenames and arguments.
+.PP
+Switches include:
+.IP \fB\-0\fR[\fIoctal/hexadecimal\fR] 5
+.IX Xref "-0 $"
+.IX Item "-0[octal/hexadecimal]"
+specifies the input record separator (\f(CW$/\fR) as an octal or
+hexadecimal number. If there are no digits, the null character is the
+separator. Other switches may precede or follow the digits. For
+example, if you have a version of \fIfind\fR which can print filenames
+terminated by the null character, you can say this:
+.Sp
+.Vb 1
+\& find . \-name \*(Aq*.orig\*(Aq \-print0 | perl \-n0e unlink
+.Ve
+.Sp
+The special value 00 will cause Perl to slurp files in paragraph mode.
+.Sp
+Any value 0400 or above will cause Perl to slurp files whole, but by convention
+the value 0777 is the one normally used for this purpose. The "\-g" flag
+is a simpler alias for it.
+.Sp
+You can also specify the separator character using hexadecimal notation:
+\&\fB\-0x\fR\f(BIHHH...\fR, where the \f(CW\*(C`\fR\f(CIH\fR\f(CW\*(C'\fR are valid hexadecimal digits. Unlike
+the octal form, this one may be used to specify any Unicode character, even
+those beyond 0xFF. So if you \fIreally\fR want a record separator of 0777,
+specify it as \fB\-0x1FF\fR. (This means that you cannot use the "\-x" option
+with a directory name that consists of hexadecimal digits, or else Perl
+will think you have specified a hex number to \fB\-0\fR.)
+.IP \fB\-a\fR 5
+.IX Xref "-a autosplit"
+.IX Item "-a"
+turns on autosplit mode when used with a "\-n" or "\-p". An implicit
+split command to the \f(CW@F\fR array is done as the first thing inside the
+implicit while loop produced by the "\-n" or "\-p".
+.Sp
+.Vb 1
+\& perl \-ane \*(Aqprint pop(@F), "\en";\*(Aq
+.Ve
+.Sp
+is equivalent to
+.Sp
+.Vb 4
+\& while (<>) {
+\& @F = split(\*(Aq \*(Aq);
+\& print pop(@F), "\en";
+\& }
+.Ve
+.Sp
+An alternate delimiter may be specified using \-F.
+.Sp
+\&\fB\-a\fR implicitly sets "\-n".
+.IP "\fB\-C [\fR\f(BInumber/list\fR\fB]\fR" 5
+.IX Xref "-C"
+.IX Item "-C [number/list]"
+The \fB\-C\fR flag controls some of the Perl Unicode features.
+.Sp
+As of 5.8.1, the \fB\-C\fR can be followed either by a number or a list
+of option letters. The letters, their numeric values, and effects
+are as follows; listing the letters is equal to summing the numbers.
+.Sp
+.Vb 10
+\& I 1 STDIN is assumed to be in UTF\-8
+\& O 2 STDOUT will be in UTF\-8
+\& E 4 STDERR will be in UTF\-8
+\& S 7 I + O + E
+\& i 8 UTF\-8 is the default PerlIO layer for input streams
+\& o 16 UTF\-8 is the default PerlIO layer for output streams
+\& D 24 i + o
+\& A 32 the @ARGV elements are expected to be strings encoded
+\& in UTF\-8
+\& L 64 normally the "IOEioA" are unconditional, the L makes
+\& them conditional on the locale environment variables
+\& (the LC_ALL, LC_CTYPE, and LANG, in the order of
+\& decreasing precedence) \-\- if the variables indicate
+\& UTF\-8, then the selected "IOEioA" are in effect
+\& a 256 Set ${^UTF8CACHE} to \-1, to run the UTF\-8 caching
+\& code in debugging mode.
+.Ve
+.Sp
+For example, \fB\-COE\fR and \fB\-C6\fR will both turn on UTF\-8\-ness on both
+STDOUT and STDERR. Repeating letters is just redundant, not cumulative
+nor toggling.
+.Sp
+The \f(CW\*(C`io\*(C'\fR options mean that any subsequent \fBopen()\fR (or similar I/O
+operations) in main program scope will have the \f(CW\*(C`:utf8\*(C'\fR PerlIO layer
+implicitly applied to them, in other words, UTF\-8 is expected from any
+input stream, and UTF\-8 is produced to any output stream. This is just
+the default set via \f(CW\*(C`${^OPEN}\*(C'\fR,
+with explicit layers in \fBopen()\fR and with \fBbinmode()\fR one can
+manipulate streams as usual. This has no effect on code run in modules.
+.Sp
+\&\fB\-C\fR on its own (not followed by any number or option list), or the
+empty string \f(CW""\fR for the "PERL_UNICODE" environment variable, has the
+same effect as \fB\-CSDL\fR. In other words, the standard I/O handles and
+the default \f(CWopen()\fR layer are UTF\-8\-fied \fIbut\fR only if the locale
+environment variables indicate a UTF\-8 locale. This behaviour follows
+the \fIimplicit\fR (and problematic) UTF\-8 behaviour of Perl 5.8.0.
+(See "UTF\-8 no longer default under UTF\-8 locales" in perl581delta.)
+.Sp
+You can use \fB\-C0\fR (or \f(CW"0"\fR for \f(CW\*(C`PERL_UNICODE\*(C'\fR) to explicitly
+disable all the above Unicode features.
+.Sp
+The read-only magic variable \f(CW\*(C`${^UNICODE}\*(C'\fR reflects the numeric value
+of this setting. This variable is set during Perl startup and is
+thereafter read-only. If you want runtime effects, use the three-arg
+\&\fBopen()\fR (see "open" in perlfunc), the two-arg \fBbinmode()\fR (see "binmode" in perlfunc),
+and the \f(CW\*(C`open\*(C'\fR pragma (see open).
+.Sp
+(In Perls earlier than 5.8.1 the \fB\-C\fR switch was a Win32\-only switch
+that enabled the use of Unicode-aware "wide system call" Win32 APIs.
+This feature was practically unused, however, and the command line
+switch was therefore "recycled".)
+.Sp
+\&\fBNote:\fR Since perl 5.10.1, if the \fB\-C\fR option is used on the \f(CW\*(C`#!\*(C'\fR line,
+it must be specified on the command line as well, since the standard streams
+are already set up at this point in the execution of the perl interpreter.
+You can also use \fBbinmode()\fR to set the encoding of an I/O stream.
+.IP \fB\-c\fR 5
+.IX Xref "-c"
+.IX Item "-c"
+causes Perl to check the syntax of the program and then exit without
+executing it. Actually, it \fIwill\fR execute any \f(CW\*(C`BEGIN\*(C'\fR, \f(CW\*(C`UNITCHECK\*(C'\fR,
+or \f(CW\*(C`CHECK\*(C'\fR blocks and any \f(CW\*(C`use\*(C'\fR statements: these are considered as
+occurring outside the execution of your program. \f(CW\*(C`INIT\*(C'\fR and \f(CW\*(C`END\*(C'\fR
+blocks, however, will be skipped.
+.IP \fB\-d\fR 5
+.IX Xref "-d -dt"
+.IX Item "-d"
+.PD 0
+.IP \fB\-dt\fR 5
+.IX Item "-dt"
+.PD
+runs the program under the Perl debugger. See perldebug.
+If \fBt\fR is specified, it indicates to the debugger that threads
+will be used in the code being debugged.
+.IP \fB\-d:\fR\fIMOD[=bar,baz]\fR 5
+.IX Xref "-d -dt"
+.IX Item "-d:MOD[=bar,baz]"
+.PD 0
+.IP \fB\-dt:\fR\fIMOD[=bar,baz]\fR 5
+.IX Item "-dt:MOD[=bar,baz]"
+.PD
+runs the program under the control of a debugging, profiling, or tracing
+module installed as \f(CW\*(C`Devel::\fR\f(CIMOD\fR\f(CW\*(C'\fR. E.g., \fB\-d:DProf\fR executes the
+program using the \f(CW\*(C`Devel::DProf\*(C'\fR profiler. As with the \-M
+flag, options may be passed to the \f(CW\*(C`Devel::\fR\f(CIMOD\fR\f(CW\*(C'\fR package where they will
+be received and interpreted by the \f(CW\*(C`Devel::\fR\f(CIMOD\fR\f(CW::import\*(C'\fR routine. Again,
+like \fB\-M\fR, use \-\fB\-d:\-\fR\f(BIMOD\fR to call \f(CW\*(C`Devel::\fR\f(CIMOD\fR\f(CW::unimport\*(C'\fR instead of
+import. The comma-separated list of options must follow a \f(CW\*(C`=\*(C'\fR character.
+If \fBt\fR is specified, it indicates to the debugger that threads will be used
+in the code being debugged. See perldebug.
+.IP \fB\-D\fR\fIletters\fR 5
+.IX Xref "-D DEBUGGING -DDEBUGGING"
+.IX Item "-Dletters"
+.PD 0
+.IP \fB\-D\fR\fInumber\fR 5
+.IX Item "-Dnumber"
+.PD
+sets debugging flags. This switch is enabled only if your perl binary has
+been built with debugging enabled: normal production perls won't have
+been.
+.Sp
+For example, to watch how perl executes your program, use \fB\-Dtls\fR.
+Another nice value is \fB\-Dx\fR, which lists your compiled syntax tree, and
+\&\fB\-Dr\fR displays compiled regular expressions; the format of the output is
+explained in perldebguts.
+.Sp
+As an alternative, specify a number instead of list of letters (e.g.,
+\&\fB\-D14\fR is equivalent to \fB\-Dtls\fR):
+.Sp
+.Vb 10
+\& 1 p Tokenizing and parsing (with v, displays parse
+\& stack)
+\& 2 s Stack snapshots (with v, displays all stacks)
+\& 4 l Context (loop) stack processing
+\& 8 t Trace execution
+\& 16 o Method and overloading resolution
+\& 32 c String/numeric conversions
+\& 64 P Print profiling info, source file input state
+\& 128 m Memory and SV allocation
+\& 256 f Format processing
+\& 512 r Regular expression parsing and execution
+\& 1024 x Syntax tree dump
+\& 2048 u Tainting checks
+\& 4096 U Unofficial, User hacking (reserved for private,
+\& unreleased use)
+\& 8192 h Show hash randomization debug output (changes to
+\& PL_hash_rand_bits and their origin)
+\& 16384 X Scratchpad allocation
+\& 32768 D Cleaning up
+\& 65536 S Op slab allocation
+\& 131072 T Tokenizing
+\& 262144 R Include reference counts of dumped variables
+\& (eg when using \-Ds)
+\& 524288 J show s,t,P\-debug (don\*(Aqt Jump over) on opcodes within
+\& package DB
+\& 1048576 v Verbose: use in conjunction with other flags to
+\& increase the verbosity of the output. Is a no\-op on
+\& many of the other flags
+\& 2097152 C Copy On Write
+\& 4194304 A Consistency checks on internal structures
+\& 8388608 q quiet \- currently only suppresses the "EXECUTING"
+\& message
+\& 16777216 M trace smart match resolution
+\& 33554432 B dump suBroutine definitions, including special
+\& Blocks like BEGIN
+\& 67108864 L trace Locale\-related info; what gets output is very
+\& subject to change
+\& 134217728 i trace PerlIO layer processing. Set PERLIO_DEBUG to
+\& the filename to trace to.
+\& 268435456 y trace y///, tr/// compilation and execution
+.Ve
+.Sp
+All these flags require \fB\-DDEBUGGING\fR when you compile the Perl
+executable (but see \f(CW\*(C`:opd\*(C'\fR in Devel::Peek or "'debug' mode" in re
+which may change this).
+See the INSTALL file in the Perl source distribution
+for how to do this.
+.Sp
+If you're just trying to get a print out of each line of Perl code
+as it executes, the way that \f(CW\*(C`sh \-x\*(C'\fR provides for shell scripts,
+you can't use Perl's \fB\-D\fR switch. Instead do this
+.Sp
+.Vb 2
+\& # If you have "env" utility
+\& env PERLDB_OPTS="NonStop=1 AutoTrace=1 frame=2" perl \-dS program
+\&
+\& # Bourne shell syntax
+\& $ PERLDB_OPTS="NonStop=1 AutoTrace=1 frame=2" perl \-dS program
+\&
+\& # csh syntax
+\& % (setenv PERLDB_OPTS "NonStop=1 AutoTrace=1 frame=2"; perl \-dS program)
+.Ve
+.Sp
+See perldebug for details and variations.
+.IP "\fB\-e\fR \fIcommandline\fR" 5
+.IX Xref "-e"
+.IX Item "-e commandline"
+may be used to enter one line of program. If \fB\-e\fR is given, Perl
+will not look for a filename in the argument list. Multiple \fB\-e\fR
+commands may be given to build up a multi-line script. Make sure
+to use semicolons where you would in a normal program.
+.IP "\fB\-E\fR \fIcommandline\fR" 5
+.IX Xref "-E"
+.IX Item "-E commandline"
+behaves just like \-e, except that it implicitly
+enables all optional features (in the main compilation unit). See
+feature.
+.IP \fB\-f\fR 5
+.IX Xref "-f sitecustomize sitecustomize.pl"
+.IX Item "-f"
+Disable executing \fR\f(CI$Config\fR\fI{sitelib}/sitecustomize.pl\fR at startup.
+.Sp
+Perl can be built so that it by default will try to execute
+\&\fR\f(CI$Config\fR\fI{sitelib}/sitecustomize.pl\fR at startup (in a BEGIN block).
+This is a hook that allows the sysadmin to customize how Perl behaves.
+It can for instance be used to add entries to the \f(CW@INC\fR array to make Perl
+find modules in non-standard locations.
+.Sp
+Perl actually inserts the following code:
+.Sp
+.Vb 4
+\& BEGIN {
+\& do { local $!; \-f "$Config{sitelib}/sitecustomize.pl"; }
+\& && do "$Config{sitelib}/sitecustomize.pl";
+\& }
+.Ve
+.Sp
+Since it is an actual \f(CW\*(C`do\*(C'\fR (not a \f(CW\*(C`require\*(C'\fR), \fIsitecustomize.pl\fR
+doesn't need to return a true value. The code is run in package \f(CW\*(C`main\*(C'\fR,
+in its own lexical scope. However, if the script dies, \f(CW$@\fR will not
+be set.
+.Sp
+The value of \f(CW$Config{sitelib}\fR is also determined in C code and not
+read from \f(CW\*(C`Config.pm\*(C'\fR, which is not loaded.
+.Sp
+The code is executed \fIvery\fR early. For example, any changes made to
+\&\f(CW@INC\fR will show up in the output of `perl \-V`. Of course, \f(CW\*(C`END\*(C'\fR
+blocks will be likewise executed very late.
+.Sp
+To determine at runtime if this capability has been compiled in your
+perl, you can check the value of \f(CW$Config{usesitecustomize}\fR.
+.IP \fB\-F\fR\fIpattern\fR 5
+.IX Xref "-F"
+.IX Item "-Fpattern"
+specifies the pattern to split on for "\-a". The pattern may be
+surrounded by \f(CW\*(C`//\*(C'\fR, \f(CW""\fR, or \f(CW\*(Aq\*(Aq\fR, otherwise it will be put in single
+quotes. You can't use literal whitespace or NUL characters in the pattern.
+.Sp
+\&\fB\-F\fR implicitly sets both "\-a" and "\-n".
+.IP \fB\-g\fR 5
+.IX Xref "-g"
+.IX Item "-g"
+undefines the input record separator (\f(CW$/\fR) and thus
+enables the slurp mode. In other words, it causes Perl to read whole
+files at once, instead of line by line.
+.Sp
+This flag is a simpler alias for \-0777.
+.Sp
+Mnemonics: gobble, grab, gulp.
+.IP \fB\-h\fR 5
+.IX Xref "-h"
+.IX Item "-h"
+prints a summary of the options.
+.IP \fB\-?\fR 5
+.IX Xref "-?"
+.IX Item "-?"
+synonym for \fB\-h\fR: prints a summary of the options.
+.IP \fB\-i\fR[\fIextension\fR] 5
+.IX Xref "-i in-place"
+.IX Item "-i[extension]"
+specifies that files processed by the \f(CW\*(C`<>\*(C'\fR construct are to be
+edited in-place. It does this by renaming the input file, opening the
+output file by the original name, and selecting that output file as the
+default for \fBprint()\fR statements. The extension, if supplied, is used to
+modify the name of the old file to make a backup copy, following these
+rules:
+.Sp
+If no extension is supplied, and your system supports it, the original
+\&\fIfile\fR is kept open without a name while the output is redirected to
+a new file with the original \fIfilename\fR. When perl exits, cleanly or not,
+the original \fIfile\fR is unlinked.
+.Sp
+If the extension doesn't contain a \f(CW\*(C`*\*(C'\fR, then it is appended to the
+end of the current filename as a suffix. If the extension does
+contain one or more \f(CW\*(C`*\*(C'\fR characters, then each \f(CW\*(C`*\*(C'\fR is replaced
+with the current filename. In Perl terms, you could think of this
+as:
+.Sp
+.Vb 1
+\& ($backup = $extension) =~ s/\e*/$file_name/g;
+.Ve
+.Sp
+This allows you to add a prefix to the backup file, instead of (or in
+addition to) a suffix:
+.Sp
+.Vb 2
+\& $ perl \-pi\*(Aqorig_*\*(Aq \-e \*(Aqs/bar/baz/\*(Aq fileA # backup to
+\& # \*(Aqorig_fileA\*(Aq
+.Ve
+.Sp
+Or even to place backup copies of the original files into another
+directory (provided the directory already exists):
+.Sp
+.Vb 2
+\& $ perl \-pi\*(Aqold/*.orig\*(Aq \-e \*(Aqs/bar/baz/\*(Aq fileA # backup to
+\& # \*(Aqold/fileA.orig\*(Aq
+.Ve
+.Sp
+These sets of one-liners are equivalent:
+.Sp
+.Vb 2
+\& $ perl \-pi \-e \*(Aqs/bar/baz/\*(Aq fileA # overwrite current file
+\& $ perl \-pi\*(Aq*\*(Aq \-e \*(Aqs/bar/baz/\*(Aq fileA # overwrite current file
+\&
+\& $ perl \-pi\*(Aq.orig\*(Aq \-e \*(Aqs/bar/baz/\*(Aq fileA # backup to \*(AqfileA.orig\*(Aq
+\& $ perl \-pi\*(Aq*.orig\*(Aq \-e \*(Aqs/bar/baz/\*(Aq fileA # backup to \*(AqfileA.orig\*(Aq
+.Ve
+.Sp
+From the shell, saying
+.Sp
+.Vb 1
+\& $ perl \-p \-i.orig \-e "s/foo/bar/; ... "
+.Ve
+.Sp
+is the same as using the program:
+.Sp
+.Vb 2
+\& #!/usr/bin/perl \-pi.orig
+\& s/foo/bar/;
+.Ve
+.Sp
+which is equivalent to
+.Sp
+.Vb 10
+\& #!/usr/bin/perl
+\& $extension = \*(Aq.orig\*(Aq;
+\& LINE: while (<>) {
+\& if ($ARGV ne $oldargv) {
+\& if ($extension !~ /\e*/) {
+\& $backup = $ARGV . $extension;
+\& }
+\& else {
+\& ($backup = $extension) =~ s/\e*/$ARGV/g;
+\& }
+\& rename($ARGV, $backup);
+\& open(ARGVOUT, ">$ARGV");
+\& select(ARGVOUT);
+\& $oldargv = $ARGV;
+\& }
+\& s/foo/bar/;
+\& }
+\& continue {
+\& print; # this prints to original filename
+\& }
+\& select(STDOUT);
+.Ve
+.Sp
+except that the \fB\-i\fR form doesn't need to compare \f(CW$ARGV\fR to \f(CW$oldargv\fR to
+know when the filename has changed. It does, however, use ARGVOUT for
+the selected filehandle. Note that STDOUT is restored as the default
+output filehandle after the loop.
+.Sp
+As shown above, Perl creates the backup file whether or not any output
+is actually changed. So this is just a fancy way to copy files:
+.Sp
+.Vb 3
+\& $ perl \-p \-i\*(Aq/some/file/path/*\*(Aq \-e 1 file1 file2 file3...
+\&or
+\& $ perl \-p \-i\*(Aq.orig\*(Aq \-e 1 file1 file2 file3...
+.Ve
+.Sp
+You can use \f(CW\*(C`eof\*(C'\fR without parentheses to locate the end of each input
+file, in case you want to append to each file, or reset line numbering
+(see example in "eof" in perlfunc).
+.Sp
+If, for a given file, Perl is unable to create the backup file as
+specified in the extension then it will skip that file and continue on
+with the next one (if it exists).
+.Sp
+For a discussion of issues surrounding file permissions and \fB\-i\fR, see
+"Why does Perl let me delete read-only files? Why does \-i clobber
+protected files? Isn't this a bug in Perl?" in perlfaq5.
+.Sp
+You cannot use \fB\-i\fR to create directories or to strip extensions from
+files.
+.Sp
+Perl does not expand \f(CW\*(C`~\*(C'\fR in filenames, which is good, since some
+folks use it for their backup files:
+.Sp
+.Vb 1
+\& $ perl \-pi~ \-e \*(Aqs/foo/bar/\*(Aq file1 file2 file3...
+.Ve
+.Sp
+Note that because \fB\-i\fR renames or deletes the original file before
+creating a new file of the same name, Unix-style soft and hard links will
+not be preserved.
+.Sp
+Finally, the \fB\-i\fR switch does not impede execution when no
+files are given on the command line. In this case, no backup is made
+(the original file cannot, of course, be determined) and processing
+proceeds from STDIN to STDOUT as might be expected.
+.IP \fB\-I\fR\fIdirectory\fR 5
+.IX Xref "-I @INC"
+.IX Item "-Idirectory"
+Directories specified by \fB\-I\fR are prepended to the search path for
+modules (\f(CW@INC\fR).
+.IP \fB\-l\fR[\fIoctnum\fR] 5
+.IX Xref "-l $ $\\"
+.IX Item "-l[octnum]"
+enables automatic line-ending processing. It has two separate
+effects. First, it automatically chomps \f(CW$/\fR (the input record
+separator) when used with "\-n" or "\-p". Second, it assigns \f(CW\*(C`$\e\*(C'\fR
+(the output record separator) to have the value of \fIoctnum\fR so
+that any print statements will have that separator added back on.
+If \fIoctnum\fR is omitted, sets \f(CW\*(C`$\e\*(C'\fR to the current value of
+\&\f(CW$/\fR. For instance, to trim lines to 80 columns:
+.Sp
+.Vb 1
+\& perl \-lpe \*(Aqsubstr($_, 80) = ""\*(Aq
+.Ve
+.Sp
+Note that the assignment \f(CW\*(C`$\e = $/\*(C'\fR is done when the switch is processed,
+so the input record separator can be different than the output record
+separator if the \fB\-l\fR switch is followed by a
+\&\-0 switch:
+.Sp
+.Vb 1
+\& gnufind / \-print0 | perl \-ln0e \*(Aqprint "found $_" if \-p\*(Aq
+.Ve
+.Sp
+This sets \f(CW\*(C`$\e\*(C'\fR to newline and then sets \f(CW$/\fR to the null character.
+.IP \fB\-m\fR[\fB\-\fR]\fImodule\fR 5
+.IX Xref "-m -M"
+.IX Item "-m[-]module"
+.PD 0
+.IP \fB\-M\fR[\fB\-\fR]\fImodule\fR 5
+.IX Item "-M[-]module"
+.IP "\fB\-M\fR[\fB\-\fR]\fI'module ...'\fR" 5
+.IX Item "-M[-]'module ...'"
+.IP \fB\-[mM]\fR[\fB\-\fR]\fImodule=arg[,arg]...\fR 5
+.IX Item "-[mM][-]module=arg[,arg]..."
+.PD
+\&\fB\-m\fR\fImodule\fR executes \f(CW\*(C`use\*(C'\fR \fImodule\fR \f(CW\*(C`();\*(C'\fR before executing your
+program. This loads the module, but does not call its \f(CW\*(C`import\*(C'\fR method,
+so does not import subroutines and does not give effect to a pragma.
+.Sp
+\&\fB\-M\fR\fImodule\fR executes \f(CW\*(C`use\*(C'\fR \fImodule\fR \f(CW\*(C`;\*(C'\fR before executing your
+program. This loads the module and calls its \f(CW\*(C`import\*(C'\fR method, causing
+the module to have its default effect, typically importing subroutines
+or giving effect to a pragma.
+You can use quotes to add extra code after the module name,
+e.g., \f(CW\*(Aq\-M\fR\f(CIMODULE\fR\f(CW qw(foo bar)\*(Aq\fR.
+.Sp
+If the first character after the \fB\-M\fR or \fB\-m\fR is a dash (\fB\-\fR)
+then the 'use' is replaced with 'no'.
+This makes no difference for \fB\-m\fR.
+.Sp
+A little builtin syntactic sugar means you can also say
+\&\fB\-m\fR\f(BIMODULE\fR\fB=foo,bar\fR or \fB\-M\fR\f(BIMODULE\fR\fB=foo,bar\fR as a shortcut for
+\&\fB'\-M\fR\f(BIMODULE\fR\fB qw(foo bar)'\fR. This avoids the need to use quotes when
+importing symbols. The actual code generated by \fB\-M\fR\f(BIMODULE\fR\fB=foo,bar\fR is
+\&\f(CW\*(C`use module split(/,/,q{foo,bar})\*(C'\fR. Note that the \f(CW\*(C`=\*(C'\fR form
+removes the distinction between \fB\-m\fR and \fB\-M\fR; that is,
+\&\fB\-m\fR\f(BIMODULE\fR\fB=foo,bar\fR is the same as \fB\-M\fR\f(BIMODULE\fR\fB=foo,bar\fR.
+.Sp
+A consequence of the \f(CW\*(C`split\*(C'\fR formulation
+is that \fB\-M\fR\f(BIMODULE\fR\fB=number\fR never does a version check,
+unless \f(CW\*(C`\fR\f(CIMODULE\fR\f(CW::import()\*(C'\fR itself is set up to do a version check, which
+could happen for example if \fIMODULE\fR inherits from Exporter.
+.IP \fB\-n\fR 5
+.IX Xref "-n"
+.IX Item "-n"
+causes Perl to assume the following loop around your program, which
+makes it iterate over filename arguments somewhat like \fIsed \-n\fR or
+\&\fIawk\fR:
+.Sp
+.Vb 4
+\& LINE:
+\& while (<>) {
+\& ... # your program goes here
+\& }
+.Ve
+.Sp
+Note that the lines are not printed by default. See "\-p" to have
+lines printed. If a file named by an argument cannot be opened for
+some reason, Perl warns you about it and moves on to the next file.
+.Sp
+Also note that \f(CW\*(C`<>\*(C'\fR passes command line arguments to
+"open" in perlfunc, which doesn't necessarily interpret them as file names.
+See perlop for possible security implications.
+.Sp
+Here is an efficient way to delete all files that haven't been modified for
+at least a week:
+.Sp
+.Vb 1
+\& find . \-mtime +7 \-print | perl \-nle unlink
+.Ve
+.Sp
+This is faster than using the \fB\-exec\fR switch of \fIfind\fR because you don't
+have to start a process on every filename found (but it's not faster
+than using the \fB\-delete\fR switch available in newer versions of \fIfind\fR.
+It does suffer from the bug of mishandling newlines in pathnames, which
+you can fix if you follow the example under
+\&\-0.
+.Sp
+\&\f(CW\*(C`BEGIN\*(C'\fR and \f(CW\*(C`END\*(C'\fR blocks may be used to capture control before or after
+the implicit program loop, just as in \fIawk\fR.
+.IP \fB\-p\fR 5
+.IX Xref "-p"
+.IX Item "-p"
+causes Perl to assume the following loop around your program, which
+makes it iterate over filename arguments somewhat like \fIsed\fR:
+.Sp
+.Vb 6
+\& LINE:
+\& while (<>) {
+\& ... # your program goes here
+\& } continue {
+\& print or die "\-p destination: $!\en";
+\& }
+.Ve
+.Sp
+If a file named by an argument cannot be opened for some reason, Perl
+warns you about it, and moves on to the next file. Note that the
+lines are printed automatically. An error occurring during printing is
+treated as fatal. To suppress printing use the "\-n" switch. A \fB\-p\fR
+overrides a \fB\-n\fR switch.
+.Sp
+\&\f(CW\*(C`BEGIN\*(C'\fR and \f(CW\*(C`END\*(C'\fR blocks may be used to capture control before or after
+the implicit loop, just as in \fIawk\fR.
+.IP \fB\-s\fR 5
+.IX Xref "-s"
+.IX Item "-s"
+enables rudimentary switch parsing for switches on the command
+line after the program name but before any filename arguments (or before
+an argument of \fB\-\-\fR). Any switch found there is removed from \f(CW@ARGV\fR and sets the
+corresponding variable in the Perl program, in the main package. The following program
+prints "1" if the program is invoked with a \fB\-xyz\fR switch, and "abc"
+if it is invoked with \fB\-xyz=abc\fR.
+.Sp
+.Vb 2
+\& #!/usr/bin/perl \-s
+\& if ($xyz) { print "$xyz\en" }
+.Ve
+.Sp
+Do note that a switch like \fB\-\-help\fR creates the variable \f(CW\*(C`${\-help}\*(C'\fR, which is
+not compliant with \f(CW\*(C`use strict "refs"\*(C'\fR. Also, when using this option on a
+script with warnings enabled you may get a lot of spurious "used only once"
+warnings. For these reasons, use of \fB\-s\fR is discouraged. See Getopt::Long
+for much more flexible switch parsing.
+.IP \fB\-S\fR 5
+.IX Xref "-S"
+.IX Item "-S"
+makes Perl use the "PATH" environment variable to search for the
+program unless the name of the program contains path separators.
+.Sp
+On some platforms, this also makes Perl append suffixes to the
+filename while searching for it. For example, on Win32 platforms,
+the ".bat" and ".cmd" suffixes are appended if a lookup for the
+original name fails, and if the name does not already end in one
+of those suffixes. If your Perl was compiled with \f(CW\*(C`DEBUGGING\*(C'\fR turned
+on, using the \-Dp switch to Perl shows how the search
+progresses.
+.Sp
+Typically this is used to emulate \f(CW\*(C`#!\*(C'\fR startup on platforms that don't
+support \f(CW\*(C`#!\*(C'\fR. It's also convenient when debugging a script that uses \f(CW\*(C`#!\*(C'\fR,
+and is thus normally found by the shell's \f(CW$PATH\fR search mechanism.
+.Sp
+This example works on many platforms that have a shell compatible with
+Bourne shell:
+.Sp
+.Vb 3
+\& #!/usr/bin/perl
+\& eval \*(Aqexec /usr/bin/perl \-wS $0 ${1+"$@"}\*(Aq
+\& if 0; # ^ Run only under a shell
+.Ve
+.Sp
+The system ignores the first line and feeds the program to \fI/bin/sh\fR,
+which proceeds to try to execute the Perl program as a shell script.
+The shell executes the second line as a normal shell command, and thus
+starts up the Perl interpreter. On some systems \f(CW$0\fR doesn't always
+contain the full pathname, so the "\-S" tells Perl to search for the
+program if necessary. After Perl locates the program, it parses the
+lines and ignores them because the check 'if 0' is never true.
+If the program will be interpreted by csh, you will need
+to replace \f(CW\*(C`${1+"$@"}\*(C'\fR with \f(CW$*\fR, even though that doesn't understand
+embedded spaces (and such) in the argument list. To start up \fIsh\fR rather
+than \fIcsh\fR, some systems may have to replace the \f(CW\*(C`#!\*(C'\fR line with a line
+containing just a colon, which will be politely ignored by Perl. Other
+systems can't control that, and need a totally devious construct that
+will work under any of \fIcsh\fR, \fIsh\fR, or Perl, such as the following:
+.Sp
+.Vb 3
+\& eval \*(Aq(exit $?0)\*(Aq && eval \*(Aqexec perl \-wS $0 ${1+"$@"}\*(Aq
+\& & eval \*(Aqexec /usr/bin/perl \-wS $0 $argv:q\*(Aq
+\& if 0; # ^ Run only under a shell
+.Ve
+.Sp
+If the filename supplied contains directory separators (and so is an
+absolute or relative pathname), and if that file is not found,
+platforms that append file extensions will do so and try to look
+for the file with those extensions added, one by one.
+.Sp
+On DOS-like platforms, if the program does not contain directory
+separators, it will first be searched for in the current directory
+before being searched for on the PATH. On Unix platforms, the
+program will be searched for strictly on the PATH.
+.IP \fB\-t\fR 5
+.IX Xref "-t"
+.IX Item "-t"
+Like "\-T", but taint checks will issue warnings rather than fatal
+errors. These warnings can now be controlled normally with \f(CWno warnings
+qw(taint)\fR.
+.Sp
+\&\fBNote: This is not a substitute for \fR\f(CB\*(C`\-T\*(C'\fR\fB!\fR This is meant to be
+used \fIonly\fR as a temporary development aid while securing legacy code:
+for real production code and for new secure code written from scratch,
+always use the real "\-T".
+.Sp
+This has no effect if your perl was built without taint support.
+.IP \fB\-T\fR 5
+.IX Xref "-T"
+.IX Item "-T"
+turns on "taint" so you can test them. Ordinarily
+these checks are done only when running setuid or setgid. It's a
+good idea to turn them on explicitly for programs that run on behalf
+of someone else whom you might not necessarily trust, such as CGI
+programs or any internet servers you might write in Perl. See
+perlsec for details. For security reasons, this option must be
+seen by Perl quite early; usually this means it must appear early
+on the command line or in the \f(CW\*(C`#!\*(C'\fR line for systems which support
+that construct.
+.IP \fB\-u\fR 5
+.IX Xref "-u"
+.IX Item "-u"
+This switch causes Perl to dump core after compiling your
+program. You can then in theory take this core dump and turn it
+into an executable file by using the \fIundump\fR program (not supplied).
+This speeds startup at the expense of some disk space (which you
+can minimize by stripping the executable). (Still, a "hello world"
+executable comes out to about 200K on my machine.) If you want to
+execute a portion of your program before dumping, use the \f(CWCORE::dump()\fR
+function instead. Note: availability of \fIundump\fR is platform
+specific and may not be available for a specific port of Perl.
+.IP \fB\-U\fR 5
+.IX Xref "-U"
+.IX Item "-U"
+allows Perl to do unsafe operations. Currently the only "unsafe"
+operations are attempting to unlink directories while running as superuser
+and running setuid programs with fatal taint checks turned into warnings.
+Note that warnings must be enabled along with this option to actually
+\&\fIgenerate\fR the taint-check warnings.
+.IP \fB\-v\fR 5
+.IX Xref "-v"
+.IX Item "-v"
+prints the version and patchlevel of your perl executable.
+.IP \fB\-V\fR 5
+.IX Xref "-V"
+.IX Item "-V"
+prints summary of the major perl configuration values and the current
+values of \f(CW@INC\fR.
+.IP \fB\-V:\fR\fIconfigvar\fR 5
+.IX Item "-V:configvar"
+Prints to STDOUT the value of the named configuration variable(s),
+with multiples when your \f(CW\*(C`\fR\f(CIconfigvar\fR\f(CW\*(C'\fR argument looks like a regex (has
+non-letters). For example:
+.Sp
+.Vb 12
+\& $ perl \-V:libc
+\& libc=\*(Aq/lib/libc\-2.2.4.so\*(Aq;
+\& $ perl \-V:lib.
+\& libs=\*(Aq\-lnsl \-lgdbm \-ldb \-ldl \-lm \-lcrypt \-lutil \-lc\*(Aq;
+\& libc=\*(Aq/lib/libc\-2.2.4.so\*(Aq;
+\& $ perl \-V:lib.*
+\& libpth=\*(Aq/usr/local/lib /lib /usr/lib\*(Aq;
+\& libs=\*(Aq\-lnsl \-lgdbm \-ldb \-ldl \-lm \-lcrypt \-lutil \-lc\*(Aq;
+\& lib_ext=\*(Aq.a\*(Aq;
+\& libc=\*(Aq/lib/libc\-2.2.4.so\*(Aq;
+\& libperl=\*(Aqlibperl.a\*(Aq;
+\& ....
+.Ve
+.Sp
+Additionally, extra colons can be used to control formatting. A
+trailing colon suppresses the linefeed and terminator ";", allowing
+you to embed queries into shell commands. (mnemonic: PATH separator
+":".)
+.Sp
+.Vb 2
+\& $ echo "compression\-vars: " \`perl \-V:z.*: \` " are here !"
+\& compression\-vars: zcat=\*(Aq\*(Aq zip=\*(Aqzip\*(Aq are here !
+.Ve
+.Sp
+A leading colon removes the "name=" part of the response, this allows
+you to map to the name you need. (mnemonic: empty label)
+.Sp
+.Vb 2
+\& $ echo "goodvfork="\`./perl \-Ilib \-V::usevfork\`
+\& goodvfork=false;
+.Ve
+.Sp
+Leading and trailing colons can be used together if you need
+positional parameter values without the names. Note that in the case
+below, the \f(CW\*(C`PERL_API\*(C'\fR params are returned in alphabetical order.
+.Sp
+.Vb 2
+\& $ echo building_on \`perl \-V::osname: \-V::PERL_API_.*:\` now
+\& building_on \*(Aqlinux\*(Aq \*(Aq5\*(Aq \*(Aq1\*(Aq \*(Aq9\*(Aq now
+.Ve
+.IP \fB\-w\fR 5
+.IX Xref "-w"
+.IX Item "-w"
+prints warnings about dubious constructs, such as variable names
+mentioned only once and scalar variables used
+before being set; redefined subroutines; references to undefined
+filehandles; filehandles opened read-only that you are attempting
+to write on; values used as a number that don't \fIlook\fR like numbers;
+using an array as though it were a scalar; if your subroutines
+recurse more than 100 deep; and innumerable other things.
+.Sp
+This switch really just enables the global \f(CW$^W\fR variable; normally,
+the lexically scoped \f(CW\*(C`use warnings\*(C'\fR pragma is preferred. You
+can disable or promote into fatal errors specific warnings using
+\&\f(CW\*(C`_\|_WARN_\|_\*(C'\fR hooks, as described in perlvar and "warn" in perlfunc.
+See also perldiag and perltrap. A fine-grained warning
+facility is also available if you want to manipulate entire classes
+of warnings; see warnings.
+.IP \fB\-W\fR 5
+.IX Xref "-W"
+.IX Item "-W"
+Enables all warnings regardless of \f(CW\*(C`no warnings\*(C'\fR or \f(CW$^W\fR.
+See warnings.
+.IP \fB\-X\fR 5
+.IX Xref "-X"
+.IX Item "-X"
+Disables all warnings regardless of \f(CW\*(C`use warnings\*(C'\fR or \f(CW$^W\fR.
+See warnings.
+.Sp
+Forbidden in \f(CW"PERL5OPT"\fR.
+.IP \fB\-x\fR 5
+.IX Xref "-x"
+.IX Item "-x"
+.PD 0
+.IP \fB\-x\fR\fIdirectory\fR 5
+.IX Item "-xdirectory"
+.PD
+tells Perl that the program is embedded in a larger chunk of unrelated
+text, such as in a mail message. Leading garbage will be
+discarded until the first line that starts with \f(CW\*(C`#!\*(C'\fR and contains the
+string "perl". Any meaningful switches on that line will be applied.
+.Sp
+All references to line numbers by the program (warnings, errors, ...)
+will treat the \f(CW\*(C`#!\*(C'\fR line as the first line.
+Thus a warning on the 2nd line of the program, which is on the 100th
+line in the file will be reported as line 2, not as line 100.
+This can be overridden by using the \f(CW\*(C`#line\*(C'\fR directive.
+(See "Plain Old Comments (Not!)" in perlsyn)
+.Sp
+If a directory name is specified, Perl will switch to that directory
+before running the program. The \fB\-x\fR switch controls only the
+disposal of leading garbage. The program must be terminated with
+\&\f(CW\*(C`_\|_END_\|_\*(C'\fR if there is trailing garbage to be ignored; the program
+can process any or all of the trailing garbage via the \f(CW\*(C`DATA\*(C'\fR filehandle
+if desired.
+.Sp
+The directory, if specified, must appear immediately following the \fB\-x\fR
+with no intervening whitespace.
+.SH ENVIRONMENT
+.IX Xref "perl, environment variables"
+.IX Header "ENVIRONMENT"
+.IP HOME 12
+.IX Xref "HOME"
+.IX Item "HOME"
+Used if \f(CW\*(C`chdir\*(C'\fR has no argument.
+.IP LOGDIR 12
+.IX Xref "LOGDIR"
+.IX Item "LOGDIR"
+Used if \f(CW\*(C`chdir\*(C'\fR has no argument and "HOME" is not set.
+.IP PATH 12
+.IX Xref "PATH"
+.IX Item "PATH"
+Used in executing subprocesses, and in finding the program if "\-S" is
+used.
+.IP PERL5LIB 12
+.IX Xref "PERL5LIB"
+.IX Item "PERL5LIB"
+A list of directories in which to look for Perl library files before
+looking in the standard library.
+Any architecture-specific and version-specific directories,
+such as \fIversion/archname/\fR, \fIversion/\fR, or \fIarchname/\fR under the
+specified locations are automatically included if they exist, with this
+lookup done at interpreter startup time. In addition, any directories
+matching the entries in \f(CW$Config{inc_version_list}\fR are added.
+(These typically would be for older compatible perl versions installed
+in the same directory tree.)
+.Sp
+If PERL5LIB is not defined, "PERLLIB" is used. Directories are separated
+(like in PATH) by a colon on Unixish platforms and by a semicolon on
+Windows (the proper path separator being given by the command \f(CW\*(C`perl
+\&\-V:\fR\f(CIpath_sep\fR\f(CW\*(C'\fR).
+.Sp
+When running taint checks, either because the program was running setuid or
+setgid, or the "\-T" or "\-t" switch was specified, neither PERL5LIB nor
+"PERLLIB" is consulted. The program should instead say:
+.Sp
+.Vb 1
+\& use lib "/my/directory";
+.Ve
+.IP PERL5OPT 12
+.IX Xref "PERL5OPT"
+.IX Item "PERL5OPT"
+Command-line options (switches). Switches in this variable are treated
+as if they were on every Perl command line. Only the \fB\-[CDIMTUWdmtw]\fR
+switches are allowed. When running taint checks (either because the
+program was running setuid or setgid, or because the "\-T" or "\-t"
+switch was used), this variable is ignored. If PERL5OPT begins with
+\&\fB\-T\fR, tainting will be enabled and subsequent options ignored. If
+PERL5OPT begins with \fB\-t\fR, tainting will be enabled, a writable dot
+removed from \f(CW@INC\fR, and subsequent options honored.
+.IP PERLIO 12
+.IX Xref "PERLIO"
+.IX Item "PERLIO"
+A space (or colon) separated list of PerlIO layers. If perl is built
+to use PerlIO system for IO (the default) these layers affect Perl's IO.
+.Sp
+It is conventional to start layer names with a colon (for example, \f(CW\*(C`:perlio\*(C'\fR) to
+emphasize their similarity to variable "attributes". But the code that parses
+layer specification strings, which is also used to decode the PERLIO
+environment variable, treats the colon as a separator.
+.Sp
+An unset or empty PERLIO is equivalent to the default set of layers for
+your platform; for example, \f(CW\*(C`:unix:perlio\*(C'\fR on Unix-like systems
+and \f(CW\*(C`:unix:crlf\*(C'\fR on Windows and other DOS-like systems.
+.Sp
+The list becomes the default for \fIall\fR Perl's IO. Consequently only built-in
+layers can appear in this list, as external layers (such as \f(CW:encoding()\fR) need
+IO in order to load them! See "open pragma" for how to add external
+encodings as defaults.
+.Sp
+Layers it makes sense to include in the PERLIO environment
+variable are briefly summarized below. For more details see PerlIO.
+.RS 12
+.IP :crlf 8
+.IX Xref ":crlf"
+.IX Item ":crlf"
+A layer which does CRLF to \f(CW"\en"\fR translation distinguishing "text" and
+"binary" files in the manner of MS-DOS and similar operating systems,
+and also provides buffering similar to \f(CW\*(C`:perlio\*(C'\fR on these architectures.
+.IP :perlio 8
+.IX Xref ":perlio"
+.IX Item ":perlio"
+This is a re-implementation of stdio-like buffering written as a
+PerlIO layer. As such it will call whatever layer is below it for
+its operations, typically \f(CW\*(C`:unix\*(C'\fR.
+.IP :stdio 8
+.IX Xref ":stdio"
+.IX Item ":stdio"
+This layer provides a PerlIO interface by wrapping system's ANSI C "stdio"
+library calls. The layer provides both buffering and IO.
+Note that the \f(CW\*(C`:stdio\*(C'\fR layer does \fInot\fR do CRLF translation even if that
+is the platform's normal behaviour. You will need a \f(CW\*(C`:crlf\*(C'\fR layer above it
+to do that.
+.IP :unix 8
+.IX Xref ":unix"
+.IX Item ":unix"
+Low-level layer that calls \f(CW\*(C`read\*(C'\fR, \f(CW\*(C`write\*(C'\fR, \f(CW\*(C`lseek\*(C'\fR, etc.
+.RE
+.RS 12
+.Sp
+The default set of layers should give acceptable results on all platforms.
+.Sp
+For Unix platforms that will be the equivalent of ":unix:perlio" or ":stdio".
+Configure is set up to prefer the ":stdio" implementation if the system's library
+provides for fast access to the buffer (not common on modern architectures);
+otherwise, it uses the ":unix:perlio" implementation.
+.Sp
+On Win32 the default in this release (5.30) is ":unix:crlf". Win32's ":stdio"
+has a number of bugs/mis\-features for Perl IO which are somewhat depending
+on the version and vendor of the C compiler. Using our own \f(CW\*(C`:crlf\*(C'\fR layer as
+the buffer avoids those issues and makes things more uniform.
+.Sp
+This release (5.30) uses \f(CW\*(C`:unix\*(C'\fR as the bottom layer on Win32, and so still
+uses the C compiler's numeric file descriptor routines.
+.Sp
+The PERLIO environment variable is completely ignored when Perl
+is run in taint mode.
+.RE
+.IP PERLIO_DEBUG 12
+.IX Xref "PERLIO_DEBUG"
+.IX Item "PERLIO_DEBUG"
+If set to the name of a file or device when Perl is run with the
+\&\-Di command-line switch, the logging of certain operations
+of the PerlIO subsystem will be redirected to the specified file rather
+than going to stderr, which is the default. The file is opened in append
+mode. Typical uses are in Unix:
+.Sp
+.Vb 1
+\& % env PERLIO_DEBUG=/tmp/perlio.log perl \-Di script ...
+.Ve
+.Sp
+and under Win32, the approximately equivalent:
+.Sp
+.Vb 2
+\& > set PERLIO_DEBUG=CON
+\& perl \-Di script ...
+.Ve
+.Sp
+This functionality is disabled for setuid scripts, for scripts run
+with "\-T", and for scripts run on a Perl built without \f(CW\*(C`\-DDEBUGGING\*(C'\fR
+support.
+.IP PERLLIB 12
+.IX Xref "PERLLIB"
+.IX Item "PERLLIB"
+A list of directories in which to look for Perl library
+files before looking in the standard library.
+If "PERL5LIB" is defined, PERLLIB is not used.
+.Sp
+The PERLLIB environment variable is completely ignored when Perl
+is run in taint mode.
+.IP PERL5DB 12
+.IX Xref "PERL5DB"
+.IX Item "PERL5DB"
+The command used to load the debugger code. The default is:
+.Sp
+.Vb 1
+\& BEGIN { require "perl5db.pl" }
+.Ve
+.Sp
+The PERL5DB environment variable is only used when Perl is started with
+a bare "\-d" switch.
+.IP PERL5DB_THREADED 12
+.IX Xref "PERL5DB_THREADED"
+.IX Item "PERL5DB_THREADED"
+If set to a true value, indicates to the debugger that the code being
+debugged uses threads.
+.IP "PERL5SHELL (specific to the Win32 port)" 12
+.IX Xref "PERL5SHELL"
+.IX Item "PERL5SHELL (specific to the Win32 port)"
+On Win32 ports only, may be set to an alternative shell that Perl must use
+internally for executing "backtick" commands or \fBsystem()\fR. Default is
+\&\f(CW\*(C`cmd.exe /x/d/c\*(C'\fR on WindowsNT and \f(CW\*(C`command.com /c\*(C'\fR on Windows95. The
+value is considered space-separated. Precede any character that
+needs to be protected, like a space or backslash, with another backslash.
+.Sp
+Note that Perl doesn't use COMSPEC for this purpose because
+COMSPEC has a high degree of variability among users, leading to
+portability concerns. Besides, Perl can use a shell that may not be
+fit for interactive use, and setting COMSPEC to such a shell may
+interfere with the proper functioning of other programs (which usually
+look in COMSPEC to find a shell fit for interactive use).
+.Sp
+Before Perl 5.10.0 and 5.8.8, PERL5SHELL was not taint checked
+when running external commands. It is recommended that
+you explicitly set (or delete) \f(CW$ENV{PERL5SHELL}\fR when running
+in taint mode under Windows.
+.IP "PERL_ALLOW_NON_IFS_LSP (specific to the Win32 port)" 12
+.IX Xref "PERL_ALLOW_NON_IFS_LSP"
+.IX Item "PERL_ALLOW_NON_IFS_LSP (specific to the Win32 port)"
+Set to 1 to allow the use of non-IFS compatible LSPs (Layered Service Providers).
+Perl normally searches for an IFS-compatible LSP because this is required
+for its emulation of Windows sockets as real filehandles. However, this may
+cause problems if you have a firewall such as \fIMcAfee Guardian\fR, which requires
+that all applications use its LSP but which is not IFS-compatible, because clearly
+Perl will normally avoid using such an LSP.
+.Sp
+Setting this environment variable to 1 means that Perl will simply use the
+first suitable LSP enumerated in the catalog, which keeps \fIMcAfee Guardian\fR
+happy\-\-and in that particular case Perl still works too because \fIMcAfee
+Guardian\fR's LSP actually plays other games which allow applications
+requiring IFS compatibility to work.
+.IP PERL_DEBUG_MSTATS 12
+.IX Xref "PERL_DEBUG_MSTATS"
+.IX Item "PERL_DEBUG_MSTATS"
+Relevant only if Perl is compiled with the \f(CW\*(C`malloc\*(C'\fR included with the Perl
+distribution; that is, if \f(CW\*(C`perl \-V:d_mymalloc\*(C'\fR is "define".
+.Sp
+If set, this dumps out memory statistics after execution. If set
+to an integer greater than one, also dumps out memory statistics
+after compilation.
+.IP PERL_DESTRUCT_LEVEL 12
+.IX Xref "PERL_DESTRUCT_LEVEL"
+.IX Item "PERL_DESTRUCT_LEVEL"
+Controls the behaviour of global destruction of objects and other
+references. See "PERL_DESTRUCT_LEVEL" in perlhacktips for more information.
+.IP PERL_DL_NONLAZY 12
+.IX Xref "PERL_DL_NONLAZY"
+.IX Item "PERL_DL_NONLAZY"
+Set to \f(CW"1"\fR to have Perl resolve \fIall\fR undefined symbols when it loads
+a dynamic library. The default behaviour is to resolve symbols when
+they are used. Setting this variable is useful during testing of
+extensions, as it ensures that you get an error on misspelled function
+names even if the test suite doesn't call them.
+.IP PERL_ENCODING 12
+.IX Xref "PERL_ENCODING"
+.IX Item "PERL_ENCODING"
+If using the \f(CW\*(C`use encoding\*(C'\fR pragma without an explicit encoding name, the
+PERL_ENCODING environment variable is consulted for an encoding name.
+.IP PERL_HASH_SEED 12
+.IX Xref "PERL_HASH_SEED"
+.IX Item "PERL_HASH_SEED"
+(Since Perl 5.8.1, new semantics in Perl 5.18.0) Used to override
+the randomization of Perl's internal hash function. The value is expressed
+in hexadecimal, and may include a leading 0x. Truncated patterns
+are treated as though they are suffixed with sufficient 0's as required.
+.Sp
+If the option is provided, and \f(CW\*(C`PERL_PERTURB_KEYS\*(C'\fR is NOT set, then
+a value of '0' implies \f(CW\*(C`PERL_PERTURB_KEYS=0\*(C'\fR/\f(CW\*(C`PERL_PERTURB_KEYS=NO\*(C'\fR
+and any other value implies
+\&\f(CW\*(C`PERL_PERTURB_KEYS=2\*(C'\fR/\f(CW\*(C`PERL_PERTURB_KEYS=DETERMINISTIC\*(C'\fR. See the
+documentation for PERL_PERTURB_KEYS for important
+caveats regarding the \f(CW\*(C`DETERMINISTIC\*(C'\fR mode.
+.Sp
+\&\fBPLEASE NOTE: The hash seed is sensitive information\fR. Hashes are
+randomized to protect against local and remote attacks against Perl
+code. By manually setting a seed, this protection may be partially or
+completely lost.
+.Sp
+See "Algorithmic Complexity Attacks" in perlsec, "PERL_PERTURB_KEYS", and
+"PERL_HASH_SEED_DEBUG" for more information.
+.IP PERL_PERTURB_KEYS 12
+.IX Xref "PERL_PERTURB_KEYS"
+.IX Item "PERL_PERTURB_KEYS"
+(Since Perl 5.18.0) Set to \f(CW"0"\fR or \f(CW"NO"\fR then traversing keys
+will be repeatable from run to run for the same \f(CW\*(C`PERL_HASH_SEED\*(C'\fR.
+Insertion into a hash will not change the order, except to provide
+for more space in the hash. When combined with setting PERL_HASH_SEED
+this mode is as close to pre 5.18 behavior as you can get.
+.Sp
+When set to \f(CW"1"\fR or \f(CW"RANDOM"\fR then traversing keys will be randomized.
+Every time a hash is inserted into the key order will change in a random
+fashion. The order may not be repeatable in a following program run
+even if the PERL_HASH_SEED has been specified. This is the default
+mode for perl when no PERL_HASH_SEED has been explicitly provided.
+.Sp
+When set to \f(CW"2"\fR or \f(CW"DETERMINISTIC"\fR then inserting keys into a hash
+will cause the key order to change, but in a way that is repeatable from
+program run to program run, provided that the same hash seed is used,
+and that the code does not itself perform any non-deterministic
+operations and also provided exactly the same environment context.
+Adding or removing an environment variable may and likely will change
+the key order. If any part of the code builds a hash using non\-
+deterministic keys, for instance a hash keyed by the stringified form of
+a reference, or the address of the objects it contains, then this may
+and likely will have a global effect on the key order of *every* hash in
+the process. To work properly this setting MUST be coupled with the
+PERL_HASH_SEED to produce deterministic results,
+and in fact, if you do set the \f(CW\*(C`PERL_HASH_SEED\*(C'\fR explicitly you do not
+need to set this as well, it will be automatically set to this mode.
+.Sp
+\&\fBNOTE:\fR Use of this option is considered insecure, and is intended only
+for debugging non-deterministic behavior in Perl's hash function. Do
+not use it in production.
+.Sp
+See "Algorithmic Complexity Attacks" in perlsec and "PERL_HASH_SEED"
+and "PERL_HASH_SEED_DEBUG" for more information. You can get and set the
+key traversal mask for a specific hash by using the \f(CWhash_traversal_mask()\fR
+function from Hash::Util.
+.IP PERL_HASH_SEED_DEBUG 12
+.IX Xref "PERL_HASH_SEED_DEBUG"
+.IX Item "PERL_HASH_SEED_DEBUG"
+(Since Perl 5.8.1.) Set to \f(CW"1"\fR to display (to STDERR) information
+about the hash function, seed, and what type of key traversal
+randomization is in effect at the beginning of execution. This, combined
+with "PERL_HASH_SEED" and "PERL_PERTURB_KEYS" is intended to aid in
+debugging nondeterministic behaviour caused by hash randomization.
+.Sp
+\&\fBNote\fR that any information about the hash function, especially the hash
+seed is \fBsensitive information\fR: by knowing it, one can craft a denial-of-service
+attack against Perl code, even remotely; see "Algorithmic Complexity Attacks" in perlsec
+for more information. \fBDo not disclose the hash seed\fR to people who
+don't need to know it. See also \f(CWhash_seed()\fR and
+\&\f(CWhash_traversal_mask()\fR.
+.Sp
+An example output might be:
+.Sp
+.Vb 1
+\& HASH_FUNCTION = ONE_AT_A_TIME_HARD HASH_SEED = 0x652e9b9349a7a032 PERTURB_KEYS = 1 (RANDOM)
+.Ve
+.IP PERL_MEM_LOG 12
+.IX Xref "PERL_MEM_LOG"
+.IX Item "PERL_MEM_LOG"
+If your Perl was configured with \fB\-Accflags=\-DPERL_MEM_LOG\fR, setting
+the environment variable \f(CW\*(C`PERL_MEM_LOG\*(C'\fR enables logging debug
+messages. The value has the form \f(CW\*(C`<\fR\f(CInumber\fR\f(CW>[m][s][t]\*(C'\fR, where
+\&\f(CW\*(C`\fR\f(CInumber\fR\f(CW\*(C'\fR is the file descriptor number you want to write to (2 is
+default), and the combination of letters specifies that you want
+information about (m)emory and/or (s)v, optionally with
+(t)imestamps. For example, \f(CW\*(C`PERL_MEM_LOG=1mst\*(C'\fR logs all
+information to stdout. You can write to other opened file descriptors
+in a variety of ways:
+.Sp
+.Vb 1
+\& $ 3>foo3 PERL_MEM_LOG=3m perl ...
+.Ve
+.IP "PERL_ROOT (specific to the VMS port)" 12
+.IX Xref "PERL_ROOT"
+.IX Item "PERL_ROOT (specific to the VMS port)"
+A translation-concealed rooted logical name that contains Perl and the
+logical device for the \f(CW@INC\fR path on VMS only. Other logical names that
+affect Perl on VMS include PERLSHR, PERL_ENV_TABLES, and
+SYS$TIMEZONE_DIFFERENTIAL, but are optional and discussed further in
+perlvms and in \fIREADME.vms\fR in the Perl source distribution.
+.IP PERL_SIGNALS 12
+.IX Xref "PERL_SIGNALS"
+.IX Item "PERL_SIGNALS"
+Available in Perls 5.8.1 and later. If set to \f(CW"unsafe"\fR, the pre\-Perl\-5.8.0
+signal behaviour (which is immediate but unsafe) is restored. If set
+to \f(CW\*(C`safe\*(C'\fR, then safe (but deferred) signals are used. See
+"Deferred Signals (Safe Signals)" in perlipc.
+.IP PERL_UNICODE 12
+.IX Xref "PERL_UNICODE"
+.IX Item "PERL_UNICODE"
+Equivalent to the \-C command-line switch. Note
+that this is not a boolean variable. Setting this to \f(CW"1"\fR is not the
+right way to "enable Unicode" (whatever that would mean). You can use
+\&\f(CW"0"\fR to "disable Unicode", though (or alternatively unset PERL_UNICODE
+in your shell before starting Perl). See the description of the
+\&\-C switch for more information.
+.IP PERL_USE_UNSAFE_INC 12
+.IX Xref "PERL_USE_UNSAFE_INC"
+.IX Item "PERL_USE_UNSAFE_INC"
+If perl has been configured to not have the current directory in
+\&\f(CW@INC\fR by default, this variable can be set to \f(CW"1"\fR
+to reinstate it. It's primarily intended for use while building and
+testing modules that have not been updated to deal with "." not being in
+\&\f(CW@INC\fR and should not be set in the environment for day-to-day use.
+.IP "SYS$LOGIN (specific to the VMS port)" 12
+.IX Xref "SYS$LOGIN"
+.IX Item "SYS$LOGIN (specific to the VMS port)"
+Used if chdir has no argument and "HOME" and "LOGDIR" are not set.
+.IP PERL_INTERNAL_RAND_SEED 12
+.IX Xref "PERL_INTERNAL_RAND_SEED"
+.IX Item "PERL_INTERNAL_RAND_SEED"
+Set to a non-negative integer to seed the random number generator used
+internally by perl for a variety of purposes.
+.Sp
+Ignored if perl is run setuid or setgid. Used only for some limited
+startup randomization (hash keys) if \f(CW\*(C`\-T\*(C'\fR or \f(CW\*(C`\-t\*(C'\fR perl is started
+with tainting enabled.
+.Sp
+Perl may be built to ignore this variable.
+.IP PERL_RAND_SEED 12
+.IX Xref "PERL_RAND_SEED"
+.IX Item "PERL_RAND_SEED"
+When set to an integer value this value will be used to seed the perl
+internal random number generator used for \f(CWrand()\fR when it is used
+without an explicit \f(CWsrand()\fR call or for when an explicit no-argument
+\&\f(CWsrand()\fR call is made.
+.Sp
+Normally calling \f(CWrand()\fR prior to calling \f(CWsrand()\fR or calling
+\&\f(CWsrand()\fR explicitly with no arguments should result in the random
+number generator using "best efforts" to seed the generator state with a
+relatively high quality random seed. When this environment variable is
+set then the seeds used will be deterministically computed from the
+value provided in the env var in such a way that the application process
+and any forks or threads should continue to have their own unique seed but
+that the program may be run twice with identical results as far as
+\&\f(CWrand()\fR goes (assuming all else is equal).
+.Sp
+PERL_RAND_SEED is intended for performance measurements and debugging
+and is explicitly NOT intended for stable testing. The only guarantee is
+that a specific perl executable will produce the same results twice in a
+row, there is no guarantee that the results will be the same between
+perl releases or on different architectures.
+.Sp
+Ignored if perl is run setuid or setgid.
+.PP
+Perl also has environment variables that control how Perl handles data
+specific to particular natural languages; see perllocale.
+.PP
+Perl and its various modules and components, including its test frameworks,
+may sometimes make use of certain other environment variables. Some of
+these are specific to a particular platform. Please consult the
+appropriate module documentation and any documentation for your platform
+(like perlsolaris, perllinux, perlmacosx, perlwin32, etc) for
+variables peculiar to those specific situations.
+.PP
+Perl makes all environment variables available to the program being
+executed, and passes these along to any child processes it starts.
+However, programs running setuid would do well to execute the following
+lines before doing anything else, just to keep people honest:
+.PP
+.Vb 3
+\& $ENV{PATH} = "/bin:/usr/bin"; # or whatever you need
+\& $ENV{SHELL} = "/bin/sh" if exists $ENV{SHELL};
+\& delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};
+.Ve
+.SH "ORDER OF APPLICATION"
+.IX Header "ORDER OF APPLICATION"
+Some options, in particular \f(CW\*(C`\-I\*(C'\fR, \f(CW\*(C`\-M\*(C'\fR, \f(CW\*(C`PERL5LIB\*(C'\fR and \f(CW\*(C`PERL5OPT\*(C'\fR can
+interact, and the order in which they are applied is important.
+.PP
+Note that this section does not document what \fIactually\fR happens inside the
+perl interpreter, it documents what \fIeffectively\fR happens.
+.IP \-I 4
+.IX Item "-I"
+The effect of multiple \f(CW\*(C`\-I\*(C'\fR options is to \f(CW\*(C`unshift\*(C'\fR them onto \f(CW@INC\fR
+from right to left. So for example:
+.Sp
+.Vb 1
+\& perl \-I 1 \-I 2 \-I 3
+.Ve
+.Sp
+will first prepend \f(CW3\fR onto the front of \f(CW@INC\fR, then prepend \f(CW2\fR, and
+then prepend \f(CW1\fR. The result is that \f(CW@INC\fR begins with:
+.Sp
+.Vb 1
+\& qw(1 2 3)
+.Ve
+.IP \-M 4
+.IX Item "-M"
+Multiple \f(CW\*(C`\-M\*(C'\fR options are processed from left to right. So this:
+.Sp
+.Vb 1
+\& perl \-Mlib=1 \-Mlib=2 \-Mlib=3
+.Ve
+.Sp
+will first use the lib pragma to prepend \f(CW1\fR to \f(CW@INC\fR, then
+it will prepend \f(CW2\fR, then it will prepend \f(CW3\fR, resulting in an \f(CW@INC\fR
+that begins with:
+.Sp
+.Vb 1
+\& qw(3 2 1)
+.Ve
+.IP "the PERL5LIB environment variable" 4
+.IX Item "the PERL5LIB environment variable"
+This contains a list of directories, separated by colons. The entire list
+is prepended to \f(CW@INC\fR in one go. This:
+.Sp
+.Vb 1
+\& PERL5LIB=1:2:3 perl
+.Ve
+.Sp
+will result in an \f(CW@INC\fR that begins with:
+.Sp
+.Vb 1
+\& qw(1 2 3)
+.Ve
+.IP "combinations of \-I, \-M and PERL5LIB" 4
+.IX Item "combinations of -I, -M and PERL5LIB"
+\&\f(CW\*(C`PERL5LIB\*(C'\fR is applied first, then all the \f(CW\*(C`\-I\*(C'\fR arguments, then all the
+\&\f(CW\*(C`\-M\*(C'\fR arguments. This:
+.Sp
+.Vb 1
+\& PERL5LIB=e1:e2 perl \-I i1 \-Mlib=m1 \-I i2 \-Mlib=m2
+.Ve
+.Sp
+will result in an \f(CW@INC\fR that begins with:
+.Sp
+.Vb 1
+\& qw(m2 m1 i1 i2 e1 e2)
+.Ve
+.IP "the PERL5OPT environment variable" 4
+.IX Item "the PERL5OPT environment variable"
+This contains a space separated list of switches. We only consider the
+effects of \f(CW\*(C`\-M\*(C'\fR and \f(CW\*(C`\-I\*(C'\fR in this section.
+.Sp
+After normal processing of \f(CW\*(C`\-I\*(C'\fR switches from the command line, all
+the \f(CW\*(C`\-I\*(C'\fR switches in \f(CW\*(C`PERL5OPT\*(C'\fR are extracted. They are processed from
+left to right instead of from right to left. Also note that while
+whitespace is allowed between a \f(CW\*(C`\-I\*(C'\fR and its directory on the command
+line, it is not allowed in \f(CW\*(C`PERL5OPT\*(C'\fR.
+.Sp
+After normal processing of \f(CW\*(C`\-M\*(C'\fR switches from the command line, all
+the \f(CW\*(C`\-M\*(C'\fR switches in \f(CW\*(C`PERL5OPT\*(C'\fR are extracted. They are processed from
+left to right, \fIi.e.\fR the same as those on the command line.
+.Sp
+An example may make this clearer:
+.Sp
+.Vb 3
+\& export PERL5OPT="\-Mlib=optm1 \-Iopti1 \-Mlib=optm2 \-Iopti2"
+\& export PERL5LIB=e1:e2
+\& perl \-I i1 \-Mlib=m1 \-I i2 \-Mlib=m2
+.Ve
+.Sp
+will result in an \f(CW@INC\fR that begins with:
+.Sp
+.Vb 3
+\& qw(
+\& optm2
+\& optm1
+\&
+\& m2
+\& m1
+\&
+\& opti2
+\& opti1
+\&
+\& i1
+\& i2
+\&
+\& e1
+\& e2
+\& )
+.Ve
+.IP "Other complications" 4
+.IX Item "Other complications"
+There are some complications that are ignored in the examples above:
+.RS 4
+.IP "arch and version subdirs" 4
+.IX Item "arch and version subdirs"
+All of \f(CW\*(C`\-I\*(C'\fR, \f(CW\*(C`PERL5LIB\*(C'\fR and \f(CW\*(C`use lib\*(C'\fR will also prepend arch and version
+subdirs if they are present
+.IP sitecustomize.pl 4
+.IX Item "sitecustomize.pl"
+.RE
+.RS 4
+.RE