PERLRUN(1) Perl Programmers Reference Guide PERLRUN(1)
NAME
perlrun - how to execute the Perl interpreter
SYNOPSIS
perl [ -sTtuUWX ] [ -hv ] [ -V[:configvar] ] [ -cw ] [ -d[t][:debugger] ] [ -D[number/list] ]
[ -pna ] [ -Fpattern ] [ -l[octal] ] [ -0[octal/hexadecimal] ] [ -Idir ] [ -m[-]module ] [ -M[-]'module...' ] [ -f ]
[ -C [number/list] ] [ -S ] [ -x[dir] ] [ -i[extension] ]
[ [-e|-E] 'command' ] [ -- ] [ programfile ] [ argument ]...
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:
1. Specified line by line via -e or -E switches on the command line.
2. Contained in the file specified by the first filename on the command line. (Note that systems supporting the "#!" notation invoke
interpreters this way. See "Location of Perl".)
3. 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.
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 "#!" 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 "__END__" token.)
The "#!" 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 "#!" line, or worse, doesn't even recognize the "#!" 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.
Because historically some operating systems silently chopped off kernel interpretation of the "#!" 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.
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 -0digits by "BEGIN{ $/ = "