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