Perl expects any command-line options, also known as switches or
flags, to
come first on the command line. The next item is usually the name of
the script,
followed by any additional arguments (often filenames) to be
passed into the script. Some of these additional arguments may be
switches, but if so, they must be processed by the script, since Perl
gives up parsing switches as soon as it sees either a non-switch item or the
special --
switch that terminates switch processing.
A single-character switch with no argument may be combined (bundled) with the switch that follows it, if any. For example:
#!/usr/bin/perl -spi.bak
is the same as:
#!/usr/bin/perl -s -p -i.bak
Perl recognizes the switches listed in Table 3.1.
Switch | Function | ||
---|---|---|---|
-- | Terminates switch processing, even if the next argument starts with a minus. It has no other effect. | ||
-0[octnum] | Specifies the record separator ( | ||
-a | Turns on autosplit mode when used with -n
or -p. An implicit
| ||
-c | Causes Perl to check the syntax of the script and then exit without
executing it. More or less equivalent to having
| ||
-d | Runs the script under the Perl debugger. See Chapter 6, Debugging. | ||
-d:foo | Runs the script under the control of a debugging or tracing module installed in the Perl library as Devel::foo. For example, -d:DProf executes the script using the Devel::DProf profiler. See also the section on DProf in Chapter 6. | ||
-Dnumber | Sets debugging flags. (This only works if debugging was
compiled into the version of Perl you are running.) You may
specify either a number that is the sum of the bits
you want, or a list of letters. To watch how Perl executes your
script, for instance, use -D14 or
-Dslt. Another
useful value is -D1024
(-Dx), which lists your compiled syntax tree.
And -D512 (-Dr) displays
compiled regular expressions. The numeric value
of the flags is available internally as the special
variable | ||
-Dlist | |||
Bit | Letter | Meaning | |
1 | p | Tokenizing and parsing | |
2 | s | Stack snapshots | |
4 | l | Label stack processing | |
8 | t | Trace execution | |
16 | o | Object method lookup | |
32 | c | String/numeric conversions | |
64 | P | Print preprocessor command for | |
128 | m | Memory allocation | |
256 | f | Format processing | |
512 | r | Regular expression processing | |
1,024 | x | Syntax tree dump | |
2,048 | u | Tainting checks | |
4,096 | L | Memory leaks (not supported any more) | |
8,192 | H | Hash dump - usurps values | |
16,384 | X | Scratchpad allocation | |
32,768 | D | Cleaning up | |
-e commandline | May be used to enter one or more lines of script. If -e is used, Perl does not look for the name of a script in the argument list. Multiple -e commands may be given to build up a multiline script. (Make sure to use semicolons where you would in a normal program.) | ||
-Fpattern | Specifies the pattern to split on if -a is also in
effect. The pattern may be surrounded by //,
| ||
-h | Prints a summary of Perl's command-line options. | ||
-i[extension] | Specifies that files processed by the | ||
-Idirectory | Directories specified by -I are prepended to
| ||
-l[octnum] | Enables automatic line-end processing. This switch
has two effects: first, when it's used with -n
or -p, it causes the line terminator to be
automatically perl -lpe 'substr($_, 80) = ""' | ||
-m[-]module | Executes | ||
-M[-]module | |||
-M[-]'module ...' | |||
-[mM ][-]modulearg[,arg]... | |||
-mmodule | |||
Executes | |||
You can also say -m module=foo,bar or -Mmodule= foo,bar as a shortcut for -M'module qw(foo bar)'. This avoids the need to use quotes when importing symbols. The actual code generated by -Mmodule=foo,bar is: The = form removes the distinction between -m and -M.use module split(/,/, q{foo,bar}) | |||
-n | Causes Perl to assume the following loop around your script, which makes it iterate over filename arguments: By default, the lines are not printed. See -p to have lines printed. BEGIN and END blocks may be used to capture control before or after the implicit loop.LINE: while (<>) { ... # your script goes here | ||
-p | Causes Perl to assume the following loop around your script, which makes it iterate over filename arguments: The lines are printed automatically. To suppress printing, use the -n switch. If both are specified, the -p switch overrides -n. BEGIN and END blocks may be used to capture control before or after the implicit loop.LINE: while (<>) { ... # your script goes here } continue { print; | ||
Causes your script to be run through the C preprocessor before
compilation by Perl. (Since both comments and cpp directives begin with the | |||
-s | Enables some rudimentary parsing of switches on the command line
after the script name but before any filename arguments or the --
switch terminator. Any switch found there is removed from
| ||
-S | Makes Perl use the PATH environment variable to search for the
script (unless the name of the script starts with a slash). Typically
this is used to emulate | ||
Forces "taint" checks to be turned on. Ordinarily, these checks are done only when running setuid or setgid. It's a good idea to turn them on explicitly for programs run on another user's behalf, such as CGI programs. | |||
-u | Causes Perl to dump core after compiling your script. You can then
take this core dump and turn it into an executable file by using the
undump program (not supplied). This speeds startup at the expense of
some disk space (which you can minimize by stripping the executable).
If you want to execute a portion of your script before dumping,
use Perl's | ||
-U | Allows Perl to do unsafe operations. Currently, the only "unsafe" operations are the unlinking of directories while running as superuser and running setuid programs with fatal taint checks turned into warnings. | ||
-v | |||
-V | Prints a summary of the major Perl configuration values and the current
value of | ||
-V:name | Prints the value of the named configuration variable to STDOUT. | ||
-w | Prints warnings about identifiers that are mentioned only once and scalar variables that are used before being set. Also warns about redefined subroutines and references to undefined filehandles or to filehandles opened as read-only that you are attempting to write on. Warns you if you use a non-number as though it were a number, if you use an array as though it were a scalar, if your subroutines recurse more than 100 levels deep, etc. | ||
-x[directory] | Tells Perl to extract a script that is embedded in a message, by
looking for the first line that starts with |