1=head1 NAME 2 3perlrun - how to execute the Perl interpreter 4 5=head1 SYNOPSIS 6 7B<perl> S<[ B<-sTtuUWX> ]> 8 S<[ B<-hv> ] [ B<-V>[:I<configvar>] ]> 9 S<[ B<-cw> ] [ B<-d>[B<t>][:I<debugger>] ] [ B<-D>[I<number/list>] ]> 10 S<[ B<-pna> ] [ B<-F>I<pattern> ] [ B<-l>[I<octal>] ] [ B<-0>[I<octal/hexadecimal>] ]> 11 S<[ B<-I>I<dir> ] [ B<-m>[B<->]I<module> ] [ B<-M>[B<->]I<'module...'> ] [ B<-f> ]> 12 S<[ B<-C [I<number/list>] >]> 13 S<[ B<-P> ]> 14 S<[ B<-S> ]> 15 S<[ B<-x>[I<dir>] ]> 16 S<[ B<-i>[I<extension>] ]> 17 S<[ B<-e> I<'command'> ] [ B<--> ] [ I<programfile> ] [ I<argument> ]...> 18 19=head1 DESCRIPTION 20 21The normal way to run a Perl program is by making it directly 22executable, or else by passing the name of the source file as an 23argument on the command line. (An interactive Perl environment 24is also possible--see L<perldebug> for details on how to do that.) 25Upon startup, Perl looks for your program in one of the following 26places: 27 28=over 4 29 30=item 1. 31 32Specified line by line via B<-e> switches on the command line. 33 34=item 2. 35 36Contained in the file specified by the first filename on the command line. 37(Note that systems supporting the #! notation invoke interpreters this 38way. See L<Location of Perl>.) 39 40=item 3. 41 42Passed in implicitly via standard input. This works only if there are 43no filename arguments--to pass arguments to a STDIN-read program you 44must explicitly specify a "-" for the program name. 45 46=back 47 48With methods 2 and 3, Perl starts parsing the input file from the 49beginning, unless you've specified a B<-x> switch, in which case it 50scans for the first line starting with #! and containing the word 51"perl", and starts there instead. This is useful for running a program 52embedded in a larger message. (In this case you would indicate the end 53of the program using the C<__END__> token.) 54 55The #! line is always examined for switches as the line is being 56parsed. Thus, if you're on a machine that allows only one argument 57with the #! line, or worse, doesn't even recognize the #! line, you 58still can get consistent switch behavior regardless of how Perl was 59invoked, even if B<-x> was used to find the beginning of the program. 60 61Because historically some operating systems silently chopped off 62kernel interpretation of the #! line after 32 characters, some 63switches may be passed in on the command line, and some may not; 64you could even get a "-" without its letter, if you're not careful. 65You probably want to make sure that all your switches fall either 66before or after that 32-character boundary. Most switches don't 67actually care if they're processed redundantly, but getting a "-" 68instead of a complete switch could cause Perl to try to execute 69standard input instead of your program. And a partial B<-I> switch 70could also cause odd results. 71 72Some switches do care if they are processed twice, for instance 73combinations of B<-l> and B<-0>. Either put all the switches after 74the 32-character boundary (if applicable), or replace the use of 75B<-0>I<digits> by C<BEGIN{ $/ = "\0digits"; }>. 76 77Parsing of the #! switches starts wherever "perl" is mentioned in the line. 78The sequences "-*" and "- " are specifically ignored so that you could, 79if you were so inclined, say 80 81 #!/bin/sh -- # -*- perl -*- -p 82 eval 'exec perl -wS $0 ${1+"$@"}' 83 if $running_under_some_shell; 84 85to let Perl see the B<-p> switch. 86 87A similar trick involves the B<env> program, if you have it. 88 89 #!/usr/bin/env perl 90 91The examples above use a relative path to the perl interpreter, 92getting whatever version is first in the user's path. If you want 93a specific version of Perl, say, perl5.005_57, you should place 94that directly in the #! line's path. 95 96If the #! line does not contain the word "perl", the program named after 97the #! is executed instead of the Perl interpreter. This is slightly 98bizarre, but it helps people on machines that don't do #!, because they 99can tell a program that their SHELL is F</usr/bin/perl>, and Perl will then 100dispatch the program to the correct interpreter for them. 101 102After locating your program, Perl compiles the entire program to an 103internal form. If there are any compilation errors, execution of the 104program is not attempted. (This is unlike the typical shell script, 105which might run part-way through before finding a syntax error.) 106 107If the program is syntactically correct, it is executed. If the program 108runs off the end without hitting an exit() or die() operator, an implicit 109C<exit(0)> is provided to indicate successful completion. 110 111=head2 #! and quoting on non-Unix systems 112X<hashbang> X<#!> 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 124as the first line in C<*.cmd> file (B<-S> due to a bug in cmd.exe's 125`extproc' handling). 126 127=item MS-DOS 128 129Create a batch file to run your program, and codify it in 130C<ALTERNATE_SHEBANG> (see the F<dosish.h> file in the source 131distribution for more information). 132 133=item Win95/NT 134 135The Win95/NT installation, when using the ActiveState installer for Perl, 136will modify the Registry to associate the F<.pl> extension with the perl 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. 141 142=item Macintosh 143 144Under "Classic" MacOS, a perl program will have the appropriate Creator and 145Type, so that double-clicking them will invoke the MacPerl application. 146Under Mac OS X, clickable apps can be made from any C<#!> script using Wil 147Sanchez' DropScript utility: http://www.wsanchez.net/software/ . 148 149=item VMS 150 151Put 152 153 $ perl -mysw 'f$env("procedure")' 'p1' 'p2' 'p3' 'p4' 'p5' 'p6' 'p7' 'p8' ! 154 $ exit++ + ++$status != 0 and $exit = $status = undef; 155 156at the top of your program, where B<-mysw> are any command line switches you 157want to pass to Perl. You can now invoke the program directly, by saying 158C<perl program>, or as a DCL procedure, by saying C<@program> (or implicitly 159via F<DCL$PATH> by just using the name of the program). 160 161This incantation is a bit much to remember, but Perl will display it for 162you if you say C<perl "-V:startperl">. 163 164=back 165 166Command-interpreters on non-Unix systems have rather different ideas 167on quoting than Unix shells. You'll need to learn the special 168characters in your command-interpreter (C<*>, C<\> and C<"> are 169common) and how to protect whitespace and these characters to run 170one-liners (see B<-e> below). 171 172On some systems, you may have to change single-quotes to double ones, 173which you must I<not> do on Unix or Plan 9 systems. You might also 174have to change a single % to a %%. 175 176For example: 177 178 # Unix 179 perl -e 'print "Hello world\n"' 180 181 # MS-DOS, etc. 182 perl -e "print \"Hello world\n\"" 183 184 # Macintosh 185 print "Hello world\n" 186 (then Run "Myscript" or Shift-Command-R) 187 188 # VMS 189 perl -e "print ""Hello world\n""" 190 191The problem is that none of this is reliable: it depends on the 192command and it is entirely possible neither works. If B<4DOS> were 193the command shell, this would probably work better: 194 195 perl -e "print <Ctrl-x>"Hello world\n<Ctrl-x>"" 196 197B<CMD.EXE> in Windows NT slipped a lot of standard Unix functionality in 198when nobody was looking, but just try to find documentation for its 199quoting rules. 200 201Under the Macintosh, it depends which environment you are using. The MacPerl 202shell, or MPW, is much like Unix shells in its support for several 203quoting variants, except that it makes free use of the Macintosh's non-ASCII 204characters as control characters. 205 206There is no general solution to all of this. It's just a mess. 207 208=head2 Location of Perl 209X<perl, location of interpreter> 210 211It may seem obvious to say, but Perl is useful only when users can 212easily find it. When possible, it's good for both F</usr/bin/perl> 213and F</usr/local/bin/perl> to be symlinks to the actual binary. If 214that can't be done, system administrators are strongly encouraged 215to put (symlinks to) perl and its accompanying utilities into a 216directory typically found along a user's PATH, or in some other 217obvious and convenient place. 218 219In this documentation, C<#!/usr/bin/perl> on the first line of the program 220will stand in for whatever method works on your system. You are 221advised to use a specific path if you care about a specific version. 222 223 #!/usr/local/bin/perl5.00554 224 225or if you just want to be running at least version, place a statement 226like this at the top of your program: 227 228 use 5.005_54; 229 230=head2 Command Switches 231X<perl, command switches> X<command switches> 232 233As with all standard commands, a single-character switch may be 234clustered with the following switch, if any. 235 236 #!/usr/bin/perl -spi.orig # same as -s -p -i.orig 237 238Switches include: 239 240=over 5 241 242=item B<-0>[I<octal/hexadecimal>] 243X<-0> X<$/> 244 245specifies the input record separator (C<$/>) as an octal or 246hexadecimal number. If there are no digits, the null character is the 247separator. Other switches may precede or follow the digits. For 248example, if you have a version of B<find> which can print filenames 249terminated by the null character, you can say this: 250 251 find . -name '*.orig' -print0 | perl -n0e unlink 252 253The special value 00 will cause Perl to slurp files in paragraph mode. 254The value 0777 will cause Perl to slurp files whole because there is no 255legal byte with that value. 256 257If you want to specify any Unicode character, use the hexadecimal 258format: C<-0xHHH...>, where the C<H> are valid hexadecimal digits. 259(This means that you cannot use the C<-x> with a directory name that 260consists of hexadecimal digits.) 261 262=item B<-a> 263X<-a> X<autosplit> 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 280=item B<-C [I<number/list>]> 281X<-C> 282 283The C<-C> flag controls some Unicode of the Perl Unicode features. 284 285As of 5.8.1, the C<-C> can be followed either by a number or a list 286of option letters. The letters, their numeric values, and effects 287are as follows; listing the letters is equal to summing the numbers. 288 289 I 1 STDIN is assumed to be in UTF-8 290 O 2 STDOUT will be in UTF-8 291 E 4 STDERR will be in UTF-8 292 S 7 I + O + E 293 i 8 UTF-8 is the default PerlIO layer for input streams 294 o 16 UTF-8 is the default PerlIO layer for output streams 295 D 24 i + o 296 A 32 the @ARGV elements are expected to be strings encoded 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 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. 306 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 314C<-C> on its own (not followed by any number or option list), or the 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. 320 321You can use C<-C0> (or C<"0"> for C<PERL_UNICODE>) to explicitly 322disable all the above Unicode features. 323 324The read-only magic variable C<${^UNICODE}> reflects the numeric value 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 327open() (see L<perlfunc/open>), the two-arg binmode() (see L<perlfunc/binmode>), 328and the C<open> pragma (see L<open>). 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".) 334 335=item B<-c> 336X<-c> 337 338causes Perl to check the syntax of the program and then exit without 339executing it. Actually, it I<will> execute C<BEGIN>, C<CHECK>, and 340C<use> blocks, because these are considered as occurring outside the 341execution of your program. C<INIT> and C<END> blocks, however, will 342be skipped. 343 344=item B<-d> 345X<-d> X<-dt> 346 347=item B<-dt> 348 349runs the program under the Perl debugger. See L<perldebug>. 350If B<t> is specified, it indicates to the debugger that threads 351will be used in the code being debugged. 352 353=item B<-d:>I<foo[=bar,baz]> 354X<-d> X<-dt> 355 356=item B<-dt:>I<foo[=bar,baz]> 357 358runs the program under the control of a debugging, profiling, or 359tracing module installed as Devel::foo. E.g., B<-d:DProf> executes 360the program using the Devel::DProf profiler. As with the B<-M> 361flag, options may be passed to the Devel::foo package where they 362will be received and interpreted by the Devel::foo::import routine. 363The comma-separated list of options must follow a C<=> character. 364If B<t> is specified, it indicates to the debugger that threads 365will be used in the code being debugged. 366See L<perldebug>. 367 368=item B<-D>I<letters> 369X<-D> X<DEBUGGING> X<-DDEBUGGING> 370 371=item B<-D>I<number> 372 373sets debugging flags. To watch how it executes your program, use 374B<-Dtls>. (This works only if debugging is compiled into your 375Perl.) Another nice value is B<-Dx>, which lists your compiled 376syntax tree. And B<-Dr> displays compiled regular expressions; 377the format of the output is explained in L<perldebguts>. 378 379As an alternative, specify a number instead of list of letters (e.g., 380B<-D14> is equivalent to B<-Dtls>): 381 382 1 p Tokenizing and parsing 383 2 s Stack snapshots (with v, displays all stacks) 384 4 l Context (loop) stack processing 385 8 t Trace execution 386 16 o Method and overloading resolution 387 32 c String/numeric conversions 388 64 P Print profiling info, preprocessor command for -P, source file input state 389 128 m Memory allocation 390 256 f Format processing 391 512 r Regular expression parsing and execution 392 1024 x Syntax tree dump 393 2048 u Tainting checks 394 4096 (Obsolete, previously used for LEAKTEST) 395 8192 H Hash dump -- usurps values() 396 16384 X Scratchpad allocation 397 32768 D Cleaning up 398 65536 S Thread synchronization 399 131072 T Tokenising 400 262144 R Include reference counts of dumped variables (eg when using -Ds) 401 524288 J Do not s,t,P-debug (Jump over) opcodes within package DB 402 1048576 v Verbose: use in conjunction with other flags 403 8388608 q quiet - currently only suppresses the "EXECUTING" message 404 405All these flags require B<-DDEBUGGING> when you compile the Perl 406executable (but see L<Devel::Peek>, L<re> which may change this). 407See the F<INSTALL> file in the Perl source distribution 408for how to do this. This flag is automatically set if you include B<-g> 409option when C<Configure> asks you about optimizer/debugger flags. 410 411If you're just trying to get a print out of each line of Perl code 412as it executes, the way that C<sh -x> provides for shell scripts, 413you can't use Perl's B<-D> switch. Instead do this 414 415 # If you have "env" utility 416 env PERLDB_OPTS="NonStop=1 AutoTrace=1 frame=2" perl -dS program 417 418 # Bourne shell syntax 419 $ PERLDB_OPTS="NonStop=1 AutoTrace=1 frame=2" perl -dS program 420 421 # csh syntax 422 % (setenv PERLDB_OPTS "NonStop=1 AutoTrace=1 frame=2"; perl -dS program) 423 424See L<perldebug> for details and variations. 425 426=item B<-e> I<commandline> 427X<-e> 428 429may be used to enter one line of program. If B<-e> is given, Perl 430will not look for a filename in the argument list. Multiple B<-e> 431commands may be given to build up a multi-line script. Make sure 432to use semicolons where you would in a normal program. 433 434=item B<-f> 435X<-f> 436 437Disable executing F<$Config{sitelib}/sitecustomize.pl> at startup. 438 439Perl can be built so that it by default will try to execute 440F<$Config{sitelib}/sitecustomize.pl> at startup. This is a hook that 441allows the sysadmin to customize how perl behaves. It can for 442instance be used to add entries to the @INC array to make perl find 443modules in non-standard locations. 444 445=item B<-F>I<pattern> 446X<-F> 447 448specifies the pattern to split on if B<-a> is also in effect. The 449pattern may be surrounded by C<//>, C<"">, or C<''>, otherwise it will be 450put in single quotes. You can't use literal whitespace in the pattern. 451 452=item B<-h> 453X<-h> 454 455prints a summary of the options. 456 457=item B<-i>[I<extension>] 458X<-i> X<in-place> 459 460specifies that files processed by the C<E<lt>E<gt>> construct are to be 461edited in-place. It does this by renaming the input file, opening the 462output file by the original name, and selecting that output file as the 463default for print() statements. The extension, if supplied, is used to 464modify the name of the old file to make a backup copy, following these 465rules: 466 467If no extension is supplied, no backup is made and the current file is 468overwritten. 469 470If the extension doesn't contain a C<*>, then it is appended to the 471end of the current filename as a suffix. If the extension does 472contain one or more C<*> characters, then each C<*> is replaced 473with the current filename. In Perl terms, you could think of this 474as: 475 476 ($backup = $extension) =~ s/\*/$file_name/g; 477 478This allows you to add a prefix to the backup file, instead of (or in 479addition to) a suffix: 480 481 $ perl -pi'orig_*' -e 's/bar/baz/' fileA # backup to 'orig_fileA' 482 483Or even to place backup copies of the original files into another 484directory (provided the directory already exists): 485 486 $ perl -pi'old/*.orig' -e 's/bar/baz/' fileA # backup to 'old/fileA.orig' 487 488These sets of one-liners are equivalent: 489 490 $ perl -pi -e 's/bar/baz/' fileA # overwrite current file 491 $ perl -pi'*' -e 's/bar/baz/' fileA # overwrite current file 492 493 $ perl -pi'.orig' -e 's/bar/baz/' fileA # backup to 'fileA.orig' 494 $ perl -pi'*.orig' -e 's/bar/baz/' fileA # backup to 'fileA.orig' 495 496From the shell, saying 497 498 $ perl -p -i.orig -e "s/foo/bar/; ... " 499 500is the same as using the program: 501 502 #!/usr/bin/perl -pi.orig 503 s/foo/bar/; 504 505which is equivalent to 506 507 #!/usr/bin/perl 508 $extension = '.orig'; 509 LINE: while (<>) { 510 if ($ARGV ne $oldargv) { 511 if ($extension !~ /\*/) { 512 $backup = $ARGV . $extension; 513 } 514 else { 515 ($backup = $extension) =~ s/\*/$ARGV/g; 516 } 517 rename($ARGV, $backup); 518 open(ARGVOUT, ">$ARGV"); 519 select(ARGVOUT); 520 $oldargv = $ARGV; 521 } 522 s/foo/bar/; 523 } 524 continue { 525 print; # this prints to original filename 526 } 527 select(STDOUT); 528 529except that the B<-i> form doesn't need to compare $ARGV to $oldargv to 530know when the filename has changed. It does, however, use ARGVOUT for 531the selected filehandle. Note that STDOUT is restored as the default 532output filehandle after the loop. 533 534As shown above, Perl creates the backup file whether or not any output 535is actually changed. So this is just a fancy way to copy files: 536 537 $ perl -p -i'/some/file/path/*' -e 1 file1 file2 file3... 538or 539 $ perl -p -i'.orig' -e 1 file1 file2 file3... 540 541You can use C<eof> without parentheses to locate the end of each input 542file, in case you want to append to each file, or reset line numbering 543(see example in L<perlfunc/eof>). 544 545If, for a given file, Perl is unable to create the backup file as 546specified in the extension then it will skip that file and continue on 547with the next one (if it exists). 548 549For a discussion of issues surrounding file permissions and B<-i>, 550see L<perlfaq5/Why does Perl let me delete read-only files? Why does -i clobber protected files? Isn't this a bug in Perl?>. 551 552You cannot use B<-i> to create directories or to strip extensions from 553files. 554 555Perl does not expand C<~> in filenames, which is good, since some 556folks use it for their backup files: 557 558 $ perl -pi~ -e 's/foo/bar/' file1 file2 file3... 559 560Note that because B<-i> renames or deletes the original file before 561creating a new file of the same name, UNIX-style soft and hard links will 562not be preserved. 563 564Finally, the B<-i> switch does not impede execution when no 565files are given on the command line. In this case, no backup is made 566(the original file cannot, of course, be determined) and processing 567proceeds from STDIN to STDOUT as might be expected. 568 569=item B<-I>I<directory> 570X<-I> X<@INC> 571 572Directories specified by B<-I> are prepended to the search path for 573modules (C<@INC>), and also tells the C preprocessor where to search for 574include files. The C preprocessor is invoked with B<-P>; by default it 575searches /usr/include and /usr/lib/perl. 576 577=item B<-l>[I<octnum>] 578X<-l> X<$/> X<$\> 579 580enables automatic line-ending processing. It has two separate 581effects. First, it automatically chomps C<$/> (the input record 582separator) when used with B<-n> or B<-p>. Second, it assigns C<$\> 583(the output record separator) to have the value of I<octnum> so 584that any print statements will have that separator added back on. 585If I<octnum> is omitted, sets C<$\> to the current value of 586C<$/>. For instance, to trim lines to 80 columns: 587 588 perl -lpe 'substr($_, 80) = ""' 589 590Note that the assignment C<$\ = $/> is done when the switch is processed, 591so the input record separator can be different than the output record 592separator if the B<-l> switch is followed by a B<-0> switch: 593 594 gnufind / -print0 | perl -ln0e 'print "found $_" if -p' 595 596This sets C<$\> to newline and then sets C<$/> to the null character. 597 598=item B<-m>[B<->]I<module> 599X<-m> X<-M> 600 601=item B<-M>[B<->]I<module> 602 603=item B<-M>[B<->]I<'module ...'> 604 605=item B<-[mM]>[B<->]I<module=arg[,arg]...> 606 607B<-m>I<module> executes C<use> I<module> C<();> before executing your 608program. 609 610B<-M>I<module> executes C<use> I<module> C<;> before executing your 611program. You can use quotes to add extra code after the module name, 612e.g., C<'-Mmodule qw(foo bar)'>. 613 614If the first character after the B<-M> or B<-m> is a dash (C<->) 615then the 'use' is replaced with 'no'. 616 617A little builtin syntactic sugar means you can also say 618B<-mmodule=foo,bar> or B<-Mmodule=foo,bar> as a shortcut for 619C<'-Mmodule qw(foo bar)'>. This avoids the need to use quotes when 620importing symbols. The actual code generated by B<-Mmodule=foo,bar> is 621C<use module split(/,/,q{foo,bar})>. Note that the C<=> form 622removes the distinction between B<-m> and B<-M>. 623 624A consequence of this is that B<-MFoo=number> never does a version check 625(unless C<Foo::import()> itself is set up to do a version check, which 626could happen for example if Foo inherits from Exporter.) 627 628=item B<-n> 629X<-n> 630 631causes Perl to assume the following loop around your program, which 632makes it iterate over filename arguments somewhat like B<sed -n> or 633B<awk>: 634 635 LINE: 636 while (<>) { 637 ... # your program goes here 638 } 639 640Note that the lines are not printed by default. See B<-p> to have 641lines printed. If a file named by an argument cannot be opened for 642some reason, Perl warns you about it and moves on to the next file. 643 644Here is an efficient way to delete all files that haven't been modified for 645at least a week: 646 647 find . -mtime +7 -print | perl -nle unlink 648 649This is faster than using the B<-exec> switch of B<find> because you don't 650have to start a process on every filename found. It does suffer from 651the bug of mishandling newlines in pathnames, which you can fix if 652you follow the example under B<-0>. 653 654C<BEGIN> and C<END> blocks may be used to capture control before or after 655the implicit program loop, just as in B<awk>. 656 657=item B<-p> 658X<-p> 659 660causes Perl to assume the following loop around your program, which 661makes it iterate over filename arguments somewhat like B<sed>: 662 663 664 LINE: 665 while (<>) { 666 ... # your program goes here 667 } continue { 668 print or die "-p destination: $!\n"; 669 } 670 671If a file named by an argument cannot be opened for some reason, Perl 672warns you about it, and moves on to the next file. Note that the 673lines are printed automatically. An error occurring during printing is 674treated as fatal. To suppress printing use the B<-n> switch. A B<-p> 675overrides a B<-n> switch. 676 677C<BEGIN> and C<END> blocks may be used to capture control before or after 678the implicit loop, just as in B<awk>. 679 680=item B<-P> 681X<-P> 682 683B<NOTE: Use of -P is strongly discouraged because of its inherent 684problems, including poor portability.> 685 686This option causes your program to be run through the C preprocessor before 687compilation by Perl. Because both comments and B<cpp> directives begin 688with the # character, you should avoid starting comments with any words 689recognized by the C preprocessor such as C<"if">, C<"else">, or C<"define">. 690 691If you're considering using C<-P>, you might also want to look at the 692Filter::cpp module from CPAN. 693 694The problems of -P include, but are not limited to: 695 696=over 10 697 698=item * 699 700The C<#!> line is stripped, so any switches there don't apply. 701 702=item * 703 704A C<-P> on a C<#!> line doesn't work. 705 706=item * 707 708B<All> lines that begin with (whitespace and) a C<#> but 709do not look like cpp commands, are stripped, including anything 710inside Perl strings, regular expressions, and here-docs . 711 712=item * 713 714In some platforms the C preprocessor knows too much: it knows about 715the C++ -style until-end-of-line comments starting with C<"//">. 716This will cause problems with common Perl constructs like 717 718 s/foo//; 719 720because after -P this will became illegal code 721 722 s/foo 723 724The workaround is to use some other quoting separator than C<"/">, 725like for example C<"!">: 726 727 s!foo!!; 728 729 730 731=item * 732 733It requires not only a working C preprocessor but also a working 734F<sed>. If not on UNIX, you are probably out of luck on this. 735 736=item * 737 738Script line numbers are not preserved. 739 740=item * 741 742The C<-x> does not work with C<-P>. 743 744=back 745 746=item B<-s> 747X<-s> 748 749enables rudimentary switch parsing for switches on the command 750line after the program name but before any filename arguments (or before 751an argument of B<-->). Any switch found there is removed from @ARGV and sets the 752corresponding variable in the Perl program. The following program 753prints "1" if the program is invoked with a B<-xyz> switch, and "abc" 754if it is invoked with B<-xyz=abc>. 755 756 #!/usr/bin/perl -s 757 if ($xyz) { print "$xyz\n" } 758 759Do note that a switch like B<--help> creates the variable ${-help}, which is not compliant 760with C<strict refs>. Also, when using this option on a script with 761warnings enabled you may get a lot of spurious "used only once" warnings. 762 763=item B<-S> 764X<-S> 765 766makes Perl use the PATH environment variable to search for the 767program (unless the name of the program contains directory separators). 768 769On some platforms, this also makes Perl append suffixes to the 770filename while searching for it. For example, on Win32 platforms, 771the ".bat" and ".cmd" suffixes are appended if a lookup for the 772original name fails, and if the name does not already end in one 773of those suffixes. If your Perl was compiled with DEBUGGING turned 774on, using the -Dp switch to Perl shows how the search progresses. 775 776Typically this is used to emulate #! startup on platforms that don't 777support #!. Its also convenient when debugging a script that uses #!, 778and is thus normally found by the shell's $PATH search mechanism. 779 780This example works on many platforms that have a shell compatible with 781Bourne shell: 782 783 #!/usr/bin/perl 784 eval 'exec /usr/bin/perl -wS $0 ${1+"$@"}' 785 if $running_under_some_shell; 786 787The system ignores the first line and feeds the program to F</bin/sh>, 788which proceeds to try to execute the Perl program as a shell script. 789The shell executes the second line as a normal shell command, and thus 790starts up the Perl interpreter. On some systems $0 doesn't always 791contain the full pathname, so the B<-S> tells Perl to search for the 792program if necessary. After Perl locates the program, it parses the 793lines and ignores them because the variable $running_under_some_shell 794is never true. If the program will be interpreted by csh, you will need 795to replace C<${1+"$@"}> with C<$*>, even though that doesn't understand 796embedded spaces (and such) in the argument list. To start up sh rather 797than csh, some systems may have to replace the #! line with a line 798containing just a colon, which will be politely ignored by Perl. Other 799systems can't control that, and need a totally devious construct that 800will work under any of B<csh>, B<sh>, or Perl, such as the following: 801 802 eval '(exit $?0)' && eval 'exec perl -wS $0 ${1+"$@"}' 803 & eval 'exec /usr/bin/perl -wS $0 $argv:q' 804 if $running_under_some_shell; 805 806If the filename supplied contains directory separators (i.e., is an 807absolute or relative pathname), and if that file is not found, 808platforms that append file extensions will do so and try to look 809for the file with those extensions added, one by one. 810 811On DOS-like platforms, if the program does not contain directory 812separators, it will first be searched for in the current directory 813before being searched for on the PATH. On Unix platforms, the 814program will be searched for strictly on the PATH. 815 816=item B<-t> 817X<-t> 818 819Like B<-T>, but taint checks will issue warnings rather than fatal 820errors. These warnings can be controlled normally with C<no warnings 821qw(taint)>. 822 823B<NOTE: this is not a substitute for -T.> This is meant only to be 824used as a temporary development aid while securing legacy code: 825for real production code and for new secure code written from scratch 826always use the real B<-T>. 827 828=item B<-T> 829X<-T> 830 831forces "taint" checks to be turned on so you can test them. Ordinarily 832these checks are done only when running setuid or setgid. It's a 833good idea to turn them on explicitly for programs that run on behalf 834of someone else whom you might not necessarily trust, such as CGI 835programs or any internet servers you might write in Perl. See 836L<perlsec> for details. For security reasons, this option must be 837seen by Perl quite early; usually this means it must appear early 838on the command line or in the #! line for systems which support 839that construct. 840 841=item B<-u> 842X<-u> 843 844This obsolete switch causes Perl to dump core after compiling your 845program. You can then in theory take this core dump and turn it 846into an executable file by using the B<undump> program (not supplied). 847This speeds startup at the expense of some disk space (which you 848can minimize by stripping the executable). (Still, a "hello world" 849executable comes out to about 200K on my machine.) If you want to 850execute a portion of your program before dumping, use the dump() 851operator instead. Note: availability of B<undump> is platform 852specific and may not be available for a specific port of Perl. 853 854This switch has been superseded in favor of the new Perl code 855generator backends to the compiler. See L<B> and L<B::Bytecode> 856for details. 857 858=item B<-U> 859X<-U> 860 861allows Perl to do unsafe operations. Currently the only "unsafe" 862operations are attempting to unlink directories while running as 863superuser, and running setuid programs with fatal taint checks turned 864into warnings. Note that the B<-w> switch (or the C<$^W> variable) 865must be used along with this option to actually I<generate> the 866taint-check warnings. 867 868=item B<-v> 869X<-v> 870 871prints the version and patchlevel of your perl executable. 872 873=item B<-V> 874X<-V> 875 876prints summary of the major perl configuration values and the current 877values of @INC. 878 879=item B<-V:>I<configvar> 880 881Prints to STDOUT the value of the named configuration variable(s), 882with multiples when your configvar argument looks like a regex (has 883non-letters). For example: 884 885 $ perl -V:libc 886 libc='/lib/libc-2.2.4.so'; 887 $ perl -V:lib. 888 libs='-lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lc'; 889 libc='/lib/libc-2.2.4.so'; 890 $ perl -V:lib.* 891 libpth='/usr/local/lib /lib /usr/lib'; 892 libs='-lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lc'; 893 lib_ext='.a'; 894 libc='/lib/libc-2.2.4.so'; 895 libperl='libperl.a'; 896 .... 897 898Additionally, extra colons can be used to control formatting. A 899trailing colon suppresses the linefeed and terminator ';', allowing 900you to embed queries into shell commands. (mnemonic: PATH separator 901':'.) 902 903 $ echo "compression-vars: " `perl -V:z.*: ` " are here !" 904 compression-vars: zcat='' zip='zip' are here ! 905 906A leading colon removes the 'name=' part of the response, this allows 907you to map to the name you need. (mnemonic: empty label) 908 909 $ echo "goodvfork="`./perl -Ilib -V::usevfork` 910 goodvfork=false; 911 912Leading and trailing colons can be used together if you need 913positional parameter values without the names. Note that in the case 914below, the PERL_API params are returned in alphabetical order. 915 916 $ echo building_on `perl -V::osname: -V::PERL_API_.*:` now 917 building_on 'linux' '5' '1' '9' now 918 919=item B<-w> 920X<-w> 921 922prints warnings about dubious constructs, such as variable names 923that are mentioned only once and scalar variables that are used 924before being set, redefined subroutines, references to undefined 925filehandles or filehandles opened read-only that you are attempting 926to write on, values used as a number that don't look like numbers, 927using an array as though it were a scalar, if your subroutines 928recurse more than 100 deep, and innumerable other things. 929 930This switch really just enables the internal C<$^W> variable. You 931can disable or promote into fatal errors specific warnings using 932C<__WARN__> hooks, as described in L<perlvar> and L<perlfunc/warn>. 933See also L<perldiag> and L<perltrap>. A new, fine-grained warning 934facility is also available if you want to manipulate entire classes 935of warnings; see L<warnings> or L<perllexwarn>. 936 937=item B<-W> 938X<-W> 939 940Enables all warnings regardless of C<no warnings> or C<$^W>. 941See L<perllexwarn>. 942 943=item B<-X> 944X<-X> 945 946Disables all warnings regardless of C<use warnings> or C<$^W>. 947See L<perllexwarn>. 948 949=item B<-x> 950X<-x> 951 952=item B<-x> I<directory> 953 954tells Perl that the program is embedded in a larger chunk of unrelated 955ASCII text, such as in a mail message. Leading garbage will be 956discarded until the first line that starts with #! and contains the 957string "perl". Any meaningful switches on that line will be applied. 958If a directory name is specified, Perl will switch to that directory 959before running the program. The B<-x> switch controls only the 960disposal of leading garbage. The program must be terminated with 961C<__END__> if there is trailing garbage to be ignored (the program 962can process any or all of the trailing garbage via the DATA filehandle 963if desired). 964 965=back 966 967=head1 ENVIRONMENT 968X<perl, environment variables> 969 970=over 12 971 972=item HOME 973X<HOME> 974 975Used if chdir has no argument. 976 977=item LOGDIR 978X<LOGDIR> 979 980Used if chdir has no argument and HOME is not set. 981 982=item PATH 983X<PATH> 984 985Used in executing subprocesses, and in finding the program if B<-S> is 986used. 987 988=item PERL5LIB 989X<PERL5LIB> 990 991A list of directories in which to look for Perl library 992files before looking in the standard library and the current 993directory. Any architecture-specific directories under the specified 994locations are automatically included if they exist. If PERL5LIB is not 995defined, PERLLIB is used. Directories are separated (like in PATH) by 996a colon on unixish platforms and by a semicolon on Windows (the proper 997path separator being given by the command C<perl -V:path_sep>). 998 999When running taint checks (either because the program was running setuid 1000or setgid, or the B<-T> switch was used), neither variable is used. 1001The program should instead say: 1002 1003 use lib "/my/directory"; 1004 1005=item PERL5OPT 1006X<PERL5OPT> 1007 1008Command-line options (switches). Switches in this variable are taken 1009as if they were on every Perl command line. Only the B<-[DIMUdmtw]> 1010switches are allowed. When running taint checks (because the program 1011was running setuid or setgid, or the B<-T> switch was used), this 1012variable is ignored. If PERL5OPT begins with B<-T>, tainting will be 1013enabled, and any subsequent options ignored. 1014 1015=item PERLIO 1016X<PERLIO> 1017 1018A space (or colon) separated list of PerlIO layers. If perl is built 1019to use PerlIO system for IO (the default) these layers effect perl's IO. 1020 1021It is conventional to start layer names with a colon e.g. C<:perlio> to 1022emphasise their similarity to variable "attributes". But the code that parses 1023layer specification strings (which is also used to decode the PERLIO 1024environment variable) treats the colon as a separator. 1025 1026An unset or empty PERLIO is equivalent to C<:stdio>. 1027 1028The list becomes the default for I<all> perl's IO. Consequently only built-in 1029layers can appear in this list, as external layers (such as :encoding()) need 1030IO in order to load them!. See L<"open pragma"|open> for how to add external 1031encodings as defaults. 1032 1033The layers that it makes sense to include in the PERLIO environment 1034variable are briefly summarised below. For more details see L<PerlIO>. 1035 1036=over 8 1037 1038=item :bytes 1039X<:bytes> 1040 1041A pseudolayer that turns I<off> the C<:utf8> flag for the layer below. 1042Unlikely to be useful on its own in the global PERLIO environment variable. 1043You perhaps were thinking of C<:crlf:bytes> or C<:perlio:bytes>. 1044 1045=item :crlf 1046X<:crlf> 1047 1048A layer which does CRLF to "\n" translation distinguishing "text" and 1049"binary" files in the manner of MS-DOS and similar operating systems. 1050(It currently does I<not> mimic MS-DOS as far as treating of Control-Z 1051as being an end-of-file marker.) 1052 1053=item :mmap 1054X<:mmap> 1055 1056A layer which implements "reading" of files by using C<mmap()> to 1057make (whole) file appear in the process's address space, and then 1058using that as PerlIO's "buffer". 1059 1060=item :perlio 1061X<:perlio> 1062 1063This is a re-implementation of "stdio-like" buffering written as a 1064PerlIO "layer". As such it will call whatever layer is below it for 1065its operations (typically C<:unix>). 1066 1067=item :pop 1068X<:pop> 1069 1070An experimental pseudolayer that removes the topmost layer. 1071Use with the same care as is reserved for nitroglycerin. 1072 1073=item :raw 1074X<:raw> 1075 1076A pseudolayer that manipulates other layers. Applying the C<:raw> 1077layer is equivalent to calling C<binmode($fh)>. It makes the stream 1078pass each byte as-is without any translation. In particular CRLF 1079translation, and/or :utf8 intuited from locale are disabled. 1080 1081Unlike in the earlier versions of Perl C<:raw> is I<not> 1082just the inverse of C<:crlf> - other layers which would affect the 1083binary nature of the stream are also removed or disabled. 1084 1085=item :stdio 1086X<:stdio> 1087 1088This layer provides PerlIO interface by wrapping system's ANSI C "stdio" 1089library calls. The layer provides both buffering and IO. 1090Note that C<:stdio> layer does I<not> do CRLF translation even if that 1091is platforms normal behaviour. You will need a C<:crlf> layer above it 1092to do that. 1093 1094=item :unix 1095X<:unix> 1096 1097Low level layer which calls C<read>, C<write> and C<lseek> etc. 1098 1099=item :utf8 1100X<:utf8> 1101 1102A pseudolayer that turns on a flag on the layer below to tell perl 1103that output should be in utf8 and that input should be regarded as 1104already in utf8 form. May be useful in PERLIO environment 1105variable to make UTF-8 the default. (To turn off that behaviour 1106use C<:bytes> layer.) 1107 1108=item :win32 1109X<:win32> 1110 1111On Win32 platforms this I<experimental> layer uses native "handle" IO 1112rather than unix-like numeric file descriptor layer. Known to be 1113buggy in this release. 1114 1115=back 1116 1117On all platforms the default set of layers should give acceptable results. 1118 1119For UNIX platforms that will equivalent of "unix perlio" or "stdio". 1120Configure is setup to prefer "stdio" implementation if system's library 1121provides for fast access to the buffer, otherwise it uses the "unix perlio" 1122implementation. 1123 1124On Win32 the default in this release is "unix crlf". Win32's "stdio" 1125has a number of bugs/mis-features for perl IO which are somewhat 1126C compiler vendor/version dependent. Using our own C<crlf> layer as 1127the buffer avoids those issues and makes things more uniform. 1128The C<crlf> layer provides CRLF to/from "\n" conversion as well as 1129buffering. 1130 1131This release uses C<unix> as the bottom layer on Win32 and so still uses C 1132compiler's numeric file descriptor routines. There is an experimental native 1133C<win32> layer which is expected to be enhanced and should eventually be 1134the default under Win32. 1135 1136=item PERLIO_DEBUG 1137X<PERLIO_DEBUG> 1138 1139If set to the name of a file or device then certain operations of PerlIO 1140sub-system will be logged to that file (opened as append). Typical uses 1141are UNIX: 1142 1143 PERLIO_DEBUG=/dev/tty perl script ... 1144 1145and Win32 approximate equivalent: 1146 1147 set PERLIO_DEBUG=CON 1148 perl script ... 1149 1150This functionality is disabled for setuid scripts and for scripts run 1151with B<-T>. 1152 1153=item PERLLIB 1154X<PERLLIB> 1155 1156A list of directories in which to look for Perl library 1157files before looking in the standard library and the current directory. 1158If PERL5LIB is defined, PERLLIB is not used. 1159 1160=item PERL5DB 1161X<PERL5DB> 1162 1163The command used to load the debugger code. The default is: 1164 1165 BEGIN { require 'perl5db.pl' } 1166 1167=item PERL5DB_THREADED 1168X<PERL5DB_THREADED> 1169 1170If set to a true value, indicates to the debugger that the code being 1171debugged uses threads. 1172 1173=item PERL5SHELL (specific to the Win32 port) 1174X<PERL5SHELL> 1175 1176May be set to an alternative shell that perl must use internally for 1177executing "backtick" commands or system(). Default is C<cmd.exe /x/d/c> 1178on WindowsNT and C<command.com /c> on Windows95. The value is considered 1179to be space-separated. Precede any character that needs to be protected 1180(like a space or backslash) with a backslash. 1181 1182Note that Perl doesn't use COMSPEC for this purpose because 1183COMSPEC has a high degree of variability among users, leading to 1184portability concerns. Besides, perl can use a shell that may not be 1185fit for interactive use, and setting COMSPEC to such a shell may 1186interfere with the proper functioning of other programs (which usually 1187look in COMSPEC to find a shell fit for interactive use). 1188 1189=item PERL_ALLOW_NON_IFS_LSP (specific to the Win32 port) 1190X<PERL_ALLOW_NON_IFS_LSP> 1191 1192Set to 1 to allow the use of non-IFS compatible LSP's. 1193Perl normally searches for an IFS-compatible LSP because this is required 1194for its emulation of Windows sockets as real filehandles. However, this may 1195cause problems if you have a firewall such as McAfee Guardian which requires 1196all applications to use its LSP which is not IFS-compatible, because clearly 1197Perl will normally avoid using such an LSP. 1198Setting this environment variable to 1 means that Perl will simply use the 1199first suitable LSP enumerated in the catalog, which keeps McAfee Guardian 1200happy (and in that particular case Perl still works too because McAfee 1201Guardian's LSP actually plays some other games which allow applications 1202requiring IFS compatibility to work). 1203 1204=item PERL_DEBUG_MSTATS 1205X<PERL_DEBUG_MSTATS> 1206 1207Relevant only if perl is compiled with the malloc included with the perl 1208distribution (that is, if C<perl -V:d_mymalloc> is 'define'). 1209If set, this causes memory statistics to be dumped after execution. If set 1210to an integer greater than one, also causes memory statistics to be dumped 1211after compilation. 1212 1213=item PERL_DESTRUCT_LEVEL 1214X<PERL_DESTRUCT_LEVEL> 1215 1216Relevant only if your perl executable was built with B<-DDEBUGGING>, 1217this controls the behavior of global destruction of objects and other 1218references. See L<perlhack/PERL_DESTRUCT_LEVEL> for more information. 1219 1220=item PERL_DL_NONLAZY 1221X<PERL_DL_NONLAZY> 1222 1223Set to one to have perl resolve B<all> undefined symbols when it loads 1224a dynamic library. The default behaviour is to resolve symbols when 1225they are used. Setting this variable is useful during testing of 1226extensions as it ensures that you get an error on misspelled function 1227names even if the test suite doesn't call it. 1228 1229=item PERL_ENCODING 1230X<PERL_ENCODING> 1231 1232If using the C<encoding> pragma without an explicit encoding name, the 1233PERL_ENCODING environment variable is consulted for an encoding name. 1234 1235=item PERL_HASH_SEED 1236X<PERL_HASH_SEED> 1237 1238(Since Perl 5.8.1.) Used to randomise Perl's internal hash function. 1239To emulate the pre-5.8.1 behaviour, set to an integer (zero means 1240exactly the same order as 5.8.0). "Pre-5.8.1" means, among other 1241things, that hash keys will be ordered the same between different runs 1242of Perl. 1243 1244The default behaviour is to randomise unless the PERL_HASH_SEED is set. 1245If Perl has been compiled with C<-DUSE_HASH_SEED_EXPLICIT>, the default 1246behaviour is B<not> to randomise unless the PERL_HASH_SEED is set. 1247 1248If PERL_HASH_SEED is unset or set to a non-numeric string, Perl uses 1249the pseudorandom seed supplied by the operating system and libraries. 1250This means that each different run of Perl will have a different 1251ordering of the results of keys(), values(), and each(). 1252 1253B<Please note that the hash seed is sensitive information>. Hashes are 1254randomized to protect against local and remote attacks against Perl 1255code. By manually setting a seed this protection may be partially or 1256completely lost. 1257 1258See L<perlsec/"Algorithmic Complexity Attacks"> and 1259L</PERL_HASH_SEED_DEBUG> for more information. 1260 1261=item PERL_HASH_SEED_DEBUG 1262X<PERL_HASH_SEED_DEBUG> 1263 1264(Since Perl 5.8.1.) Set to one to display (to STDERR) the value of 1265the hash seed at the beginning of execution. This, combined with 1266L</PERL_HASH_SEED> is intended to aid in debugging nondeterministic 1267behavior caused by hash randomization. 1268 1269B<Note that the hash seed is sensitive information>: by knowing it one 1270can craft a denial-of-service attack against Perl code, even remotely, 1271see L<perlsec/"Algorithmic Complexity Attacks"> for more information. 1272B<Do not disclose the hash seed> to people who don't need to know it. 1273See also hash_seed() of L<Hash::Util>. 1274 1275=item PERL_ROOT (specific to the VMS port) 1276X<PERL_ROOT> 1277 1278A translation concealed rooted logical name that contains perl and the 1279logical device for the @INC path on VMS only. Other logical names that 1280affect perl on VMS include PERLSHR, PERL_ENV_TABLES, and 1281SYS$TIMEZONE_DIFFERENTIAL but are optional and discussed further in 1282L<perlvms> and in F<README.vms> in the Perl source distribution. 1283 1284=item PERL_SIGNALS 1285X<PERL_SIGNALS> 1286 1287In Perls 5.8.1 and later. If set to C<unsafe> the pre-Perl-5.8.0 1288signals behaviour (immediate but unsafe) is restored. If set to 1289C<safe> the safe (or deferred) signals are used. 1290See L<perlipc/"Deferred Signals (Safe Signals)">. 1291 1292=item PERL_UNICODE 1293X<PERL_UNICODE> 1294 1295Equivalent to the B<-C> command-line switch. Note that this is not 1296a boolean variable-- setting this to C<"1"> is not the right way to 1297"enable Unicode" (whatever that would mean). You can use C<"0"> to 1298"disable Unicode", though (or alternatively unset PERL_UNICODE in 1299your shell before starting Perl). See the description of the C<-C> 1300switch for more information. 1301 1302=item SYS$LOGIN (specific to the VMS port) 1303X<SYS$LOGIN> 1304 1305Used if chdir has no argument and HOME and LOGDIR are not set. 1306 1307=back 1308 1309Perl also has environment variables that control how Perl handles data 1310specific to particular natural languages. See L<perllocale>. 1311 1312Apart from these, Perl uses no other environment variables, except 1313to make them available to the program being executed, and to child 1314processes. However, programs running setuid would do well to execute 1315the following lines before doing anything else, just to keep people 1316honest: 1317 1318 $ENV{PATH} = '/bin:/usr/bin'; # or whatever you need 1319 $ENV{SHELL} = '/bin/sh' if exists $ENV{SHELL}; 1320 delete @ENV{qw(IFS CDPATH ENV BASH_ENV)}; 1321