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