S<[ B<-pna> ] [ B<-F>I<pattern> ] [ B<-l>[I<octal>] ] [ B<-0>[I<octal/hexadecimal>] ]>
S<[ B<-I>I<dir> ] [ B<-m>[B<->]I<module> ] [ B<-M>[B<->]I<'module...'> ] [ B<-f> ]>
S<[ B<-C [I<number/list>] >]>
- S<[ B<-P> ]>
S<[ B<-S> ]>
S<[ B<-x>[I<dir>] ]>
S<[ B<-i>[I<extension>] ]>
- S<[ B<-eE> I<'command'> ] [ B<--> ] [ I<programfile> ] [ I<argument> ]...>
+ S<[ [B<-e>|B<-E>] I<'command'> ] [ B<--> ] [ I<programfile> ] [ I<argument> ]...>
=head1 DESCRIPTION
The sequences "-*" and "- " are specifically ignored so that you could,
if you were so inclined, say
- #!/bin/sh -- # -*- perl -*- -p
- eval 'exec perl -wS $0 ${1+"$@"}'
- if $running_under_some_shell;
+ #!/bin/sh
+ #! -*-perl-*-
+ eval 'exec perl -x -wS $0 ${1+"$@"}'
+ if 0;
to let Perl see the B<-p> switch.
this means you can no longer tell the difference between an executable
Perl program and a Perl library file.
-=item Macintosh
-
-Under "Classic" MacOS, a perl program will have the appropriate Creator and
-Type, so that double-clicking them will invoke the MacPerl application.
-Under Mac OS X, clickable apps can be made from any C<#!> script using Wil
-Sanchez' DropScript utility: http://www.wsanchez.net/software/ .
-
=item VMS
Put
# MS-DOS, etc.
perl -e "print \"Hello world\n\""
- # Macintosh
- print "Hello world\n"
- (then Run "Myscript" or Shift-Command-R)
-
# VMS
perl -e "print ""Hello world\n"""
when nobody was looking, but just try to find documentation for its
quoting rules.
-Under the Macintosh, it depends which environment you are using. The MacPerl
-shell, or MPW, is much like Unix shells in its support for several
-quoting variants, except that it makes free use of the Macintosh's non-ASCII
-characters as control characters.
-
There is no general solution to all of this. It's just a mess.
=head2 Location of Perl
=item B<-C [I<number/list>]>
X<-C>
-The C<-C> flag controls some Unicode of the Perl Unicode features.
+The C<-C> flag controls some of the Perl Unicode features.
As of 5.8.1, the C<-C> can be followed either by a number or a list
of option letters. The letters, their numeric values, and effects
This feature was practically unused, however, and the command line
switch was therefore "recycled".)
+B<Note:> Since perl 5.10.1, if the -C option is used on the #! 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 binmode() to set the encoding of an I/O stream.
+
=item B<-c>
X<-c>
8 t Trace execution
16 o Method and overloading resolution
32 c String/numeric conversions
- 64 P Print profiling info, preprocessor command for -P, source file input state
- 128 m Memory allocation
+ 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
8192 H Hash dump -- usurps values()
16384 X Scratchpad allocation
32768 D Cleaning up
- 65536 S Thread synchronization
131072 T Tokenising
262144 R Include reference counts of dumped variables (eg when using -Ds)
524288 J Do not s,t,P-debug (Jump over) opcodes within package DB
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
All these flags require B<-DDEBUGGING> when you compile the Perl
executable (but see L<Devel::Peek>, L<re> which may change this).
Disable executing F<$Config{sitelib}/sitecustomize.pl> at startup.
Perl can be built so that it by default will try to execute
-F<$Config{sitelib}/sitecustomize.pl> at startup. This is a hook that
-allows the sysadmin to customize how perl behaves. It can for
-instance be used to add entries to the @INC array to make perl find
-modules in non-standard locations.
+F<$Config{sitelib}/sitecustomize.pl> 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 @INC array to make perl
+find modules in non-standard locations.
=item B<-F>I<pattern>
X<-F>
X<-I> X<@INC>
Directories specified by B<-I> are prepended to the search path for
-modules (C<@INC>), and also tells the C preprocessor where to search for
-include files. The C preprocessor is invoked with B<-P>; by default it
-searches /usr/include and /usr/lib/perl.
+modules (C<@INC>).
=item B<-l>[I<octnum>]
X<-l> X<$/> X<$\>
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.
+Also note that C<< <> >> passes command line arguments to
+L<perlfunc/open>, which doesn't necessarily interpret them as file names.
+See L<perlop> for possible security implications.
+
Here is an efficient way to delete all files that haven't been modified for
at least a week:
C<BEGIN> and C<END> blocks may be used to capture control before or after
the implicit loop, just as in B<awk>.
-=item B<-P>
-X<-P>
-
-B<NOTE: Use of -P is strongly discouraged because of its inherent
-problems, including poor portability. It is deprecated and will be
-removed in a future version of Perl.>
-
-This option causes your program to be run through the C preprocessor before
-compilation by Perl. Because both comments and B<cpp> directives begin
-with the # character, you should avoid starting comments with any words
-recognized by the C preprocessor such as C<"if">, C<"else">, or C<"define">.
-
-If you're considering using C<-P>, you might also want to look at the
-Filter::cpp module from CPAN.
-
-The problems of -P include, but are not limited to:
-
-=over 10
-
-=item *
-
-The C<#!> line is stripped, so any switches there don't apply.
-
-=item *
-
-A C<-P> on a C<#!> line doesn't work.
-
-=item *
-
-B<All> lines that begin with (whitespace and) a C<#> but
-do not look like cpp commands, are stripped, including anything
-inside Perl strings, regular expressions, and here-docs .
-
-=item *
-
-In some platforms the C preprocessor knows too much: it knows about
-the C++ -style until-end-of-line comments starting with C<"//">.
-This will cause problems with common Perl constructs like
-
- s/foo//;
-
-because after -P this will became illegal code
-
- s/foo
-
-The workaround is to use some other quoting separator than C<"/">,
-like for example C<"!">:
-
- s!foo!!;
-
-
-
-=item *
-
-It requires not only a working C preprocessor but also a working
-F<sed>. If not on UNIX, you are probably out of luck on this.
-
-=item *
-
-Script line numbers are not preserved.
-
-=item *
-
-The C<-x> does not work with C<-P>.
-
-=back
-
=item B<-s>
X<-s>
ASCII text, such as in a mail message. Leading garbage will be
discarded until the first line that starts with #! and contains the
string "perl". Any meaningful switches on that line will be applied.
+
+All references to line numbers by the program (warnings, errors, ...)
+will treat the #! 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, and not as line 100.
+This can be overridden by using the #line directive.
+(See L<perlsyn/"Plain-Old-Comments-(Not!)">)
+
If a directory name is specified, Perl will switch to that directory
before running the program. The B<-x> switch controls only the
disposal of leading garbage. The program must be terminated with
can process any or all of the trailing garbage via the DATA filehandle
if desired).
-The directory, if specified, must appear immedately following the B<-x>
+The directory, if specified, must appear immediately following the B<-x>
with no intervening whitespace.
=back
X<PERL5OPT>
Command-line options (switches). Switches in this variable are taken
-as if they were on every Perl command line. Only the B<-[CDIMUdmtwA]>
+as if they were on every Perl command line. Only the B<-[CDIMUdmtwW]>
switches are allowed. When running taint checks (because the program
was running setuid or setgid, or the B<-T> switch was used), this
variable is ignored. If PERL5OPT begins with B<-T>, tainting will be
A pseudolayer that turns on a flag on the layer below to tell perl
that output should be in utf8 and that input should be regarded as
-already in utf8 form. May be useful in PERLIO environment
-variable to make UTF-8 the default. (To turn off that behaviour
-use C<:bytes> layer.)
+already in valid utf8 form. It does not check for validity and as such
+should be handled with caution for input. Generally C<:encoding(utf8)> is
+the best option when reading UTF-8 encoded data.
=item :win32
X<:win32>
C<win32> layer which is expected to be enhanced and should eventually be
the default under Win32.
+The PERLIO environment variable is completely ignored when perl
+is run in taint mode.
+
=item PERLIO_DEBUG
X<PERLIO_DEBUG>
files before looking in the standard library and the current directory.
If PERL5LIB is defined, PERLLIB is not used.
+The PERLLIB environment variable is completely ignored when perl
+is run in taint mode.
+
=item PERL5DB
X<PERL5DB>
BEGIN { require 'perl5db.pl' }
+The PERL5DB environment variable only used when perl is started with
+a bare B<-d> switch.
+
=item PERL5DB_THREADED
X<PERL5DB_THREADED>
interfere with the proper functioning of other programs (which usually
look in COMSPEC to find a shell fit for interactive use).
+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) C<$ENV{PERL5SHELL}> when running
+in taint mode under Windows.
+
=item PERL_ALLOW_NON_IFS_LSP (specific to the Win32 port)
X<PERL_ALLOW_NON_IFS_LSP>
B<Do not disclose the hash seed> to people who don't need to know it.
See also hash_seed() of L<Hash::Util>.
+=item PERL_MEM_LOG
+X<PERL_MEM_LOG>
+
+If your perl was configured with C<-Accflags=-DPERL_MEM_LOG>, setting the
+environment variable C<PERL_MEMLOG> enables logging debug messages. The
+value has the form C<< <number>[m][s][t] >>, where C<number> is the
+filedescriptor number you want to write to, and the combination of letters
+specifies that you want information about (m)emory and/or (s)v, optionally
+with (t)imestamps. For example C<PERL_MEMLOG=1mst> will log all
+information to stdout. You can write to other opened filedescriptors too,
+in a variety of ways;
+
+ bash$ 3>foo3 PERL_MEM_LOG=3m perl ...
+
=item PERL_ROOT (specific to the VMS port)
X<PERL_ROOT>