of option letters. The letters, their numeric values, and effects
are as follows; listing the letters is equal to summing the numbers.
- I 1 STDIN is assumed to be in UTF-8
- O 2 STDOUT will be in UTF-8
- E 4 STDERR will be in UTF-8
- S 7 I + O + E
- i 8 UTF-8 is the default PerlIO layer for input streams
- o 16 UTF-8 is the default PerlIO layer for output streams
- D 24 i + o
- A 32 the @ARGV elements are expected to be strings encoded in UTF-8
- L 64 normally the "IOEioA" are unconditional,
- the L makes them conditional on the locale environment
- variables (the LC_ALL, LC_TYPE, and LANG, in the order
- of decreasing precedence) -- if the variables indicate
- UTF-8, then the selected "IOEioA" are in effect
+ I 1 STDIN is assumed to be in UTF-8
+ O 2 STDOUT will be in UTF-8
+ E 4 STDERR will be in UTF-8
+ S 7 I + O + E
+ i 8 UTF-8 is the default PerlIO layer for input streams
+ o 16 UTF-8 is the default PerlIO layer for output streams
+ D 24 i + o
+ A 32 the @ARGV elements are expected to be strings encoded
+ in UTF-8
+ L 64 normally the "IOEioA" are unconditional,
+ the L makes them conditional on the locale environment
+ variables (the LC_ALL, LC_TYPE, and LANG, in the order
+ of decreasing precedence) -- if the variables indicate
+ UTF-8, then the selected "IOEioA" are in effect
For example, C<-COE> and C<-C6> will both turn on UTF-8-ness on both
STDOUT and STDERR. Repeating letters is just redundant, not cumulative
streams as usual.
C<-C> on its own (not followed by any number or option list), or the
-empty string C<""> for the C<$ENV{PERL_UNICODE}, has the same effect
-as <-CSDL>. In other words, the standard I/O handles and the default
-C<open()> layer are UTF-8-fied B<but> only if the locale environment
-variables indicate a UTF-8 locale. This behaviour follows the
-I<implicit> (and problematic) UTF-8 behaviour of Perl 5.8.0.
+empty string C<""> for the C<PERL_UNICODE> environment variable, has the
+same effect as C<-CSDL>. In other words, the standard I/O handles and
+the default C<open()> layer are UTF-8-fied B<but> only if the locale
+environment variables indicate a UTF-8 locale. This behaviour follows
+the I<implicit> (and problematic) UTF-8 behaviour of Perl 5.8.0.
-You can use C<-C0> (or C<"0"> for $ENV{PERL_UNICODE}) to explicitly
+You can use C<-C0> (or C<"0"> for C<PERL_UNICODE>) to explicitly
disable all the above Unicode features.
The read-only magic variable C<${^UNICODE}> reflects the numeric value
As an alternative, specify a number instead of list of letters (e.g.,
B<-D14> is equivalent to B<-Dtls>):
- 1 p Tokenizing and parsing
+ 1 p Tokenizing and parsing (with v, displays parse stack)
2 s Stack snapshots
with v, displays all stacks
4 l Context (loop) stack processing
524288 J Do not s,t,P-debug (Jump over) opcodes within package DB
1048576 v Verbose: use in conjunction with other flags
2097152 C Copy On Write
+ 4194304 A Consistency checks on internal structures
+ 8388608 q quiet - currently only suppressed the "EXECUTING" message
All these flags require B<-DDEBUGGING> when you compile the Perl
executable (but see L<Devel::Peek>, L<re> which may change this).
This allows you to add a prefix to the backup file, instead of (or in
addition to) a suffix:
- $ perl -pi 'orig_*' -e 's/bar/baz/' fileA # backup to 'orig_fileA'
+ $ perl -pi'orig_*' -e 's/bar/baz/' fileA # backup to 'orig_fileA'
Or even to place backup copies of the original files into another
directory (provided the directory already exists):
- $ perl -pi 'old/*.orig' -e 's/bar/baz/' fileA # backup to 'old/fileA.orig'
+ $ perl -pi'old/*.orig' -e 's/bar/baz/' fileA # backup to 'old/fileA.orig'
These sets of one-liners are equivalent:
$ perl -pi -e 's/bar/baz/' fileA # overwrite current file
- $ perl -pi '*' -e 's/bar/baz/' fileA # overwrite current file
+ $ perl -pi'*' -e 's/bar/baz/' fileA # overwrite current file
- $ perl -pi '.orig' -e 's/bar/baz/' fileA # backup to 'fileA.orig'
- $ perl -pi '*.orig' -e 's/bar/baz/' fileA # backup to 'fileA.orig'
+ $ perl -pi'.orig' -e 's/bar/baz/' fileA # backup to 'fileA.orig'
+ $ perl -pi'*.orig' -e 's/bar/baz/' fileA # backup to 'fileA.orig'
From the shell, saying
lines printed. If a file named by an argument cannot be opened for
some reason, Perl warns you about it and moves on to the next file.
-Here is an efficient way to delete all files older than a week:
+Here is an efficient way to delete all files that haven't been modifed for
+at least a week:
find . -mtime +7 -print | perl -nle unlink
encodings as defaults.
The layers that it makes sense to include in the PERLIO environment
-variable are summarised below. For more details see L<PerlIO>.
+variable are briefly summarised below. For more details see L<PerlIO>.
=over 8
=item :crlf
-A layer that implements DOS/Windows like CRLF line endings. On read
-converts pairs of CR,LF to a single "\n" newline character. On write
-converts each "\n" to a CR,LF pair. Note that this layer likes to be
-one of its kind: it silently ignores attempts to be pushed into the
-layer stack more than once.
-
-(Gory details follow) To be more exact what happens is this: after
-pushing itself to the stack, the C<:crlf> layer checks all the layers
-below itself to find the first layer that is capable of being a CRLF
-layer but is not yet enabled to be a CRLF layer. If it finds such a
-layer, it enables the CRLFness of that other deeper layer, and then
-pops itself off the stack. If not, fine, use the one we just pushed.
-
-The end result is that a C<:crlf> means "please enable the first CRLF
-layer you can find, and if you can't find one, here would be a good
-spot to place a new one."
-
-Based on the C<:perlio> layer.
+A layer which does CRLF to "\n" translation distinguishing "text" and
+"binary" files in the manner of MS-DOS and similar operating systems.
+(It currently does I<not> mimic MS-DOS as far as treating of Control-Z
+as being an end-of-file marker.)
=item :mmap
A layer which implements "reading" of files by using C<mmap()> to
make (whole) file appear in the process's address space, and then
-using that as PerlIO's "buffer". This I<may> be faster in certain
-circumstances for large files, and may result in less physical memory
-use when multiple processes are reading the same file.
-
-Files which are not C<mmap()>-able revert to behaving like the C<:perlio>
-layer. Writes also behave like C<:perlio> layer as C<mmap()> for write
-needs extra house-keeping (to extend the file) which negates any advantage.
-
-The C<:mmap> layer will not exist if platform does not support C<mmap()>.
+using that as PerlIO's "buffer".
=item :perlio
-A from scratch implementation of buffering for PerlIO. Provides fast
-access to the buffer for C<sv_gets> which implements perl's readline/E<lt>E<gt>
-and in general attempts to minimize data copying.
-
-C<:perlio> will insert a C<:unix> layer below itself to do low level IO.
+This is a re-implementation of "stdio-like" buffering written as a
+PerlIO "layer". As such it will call whatever layer is below it for
+its operations (typically C<:unix>).
=item :pop
An experimental pseudolayer that removes the topmost layer.
-Use with the same care as is reserved for nitroglyserin.
+Use with the same care as is reserved for nitroglycerin.
=item :raw
pass each byte as-is without any translation. In particular CRLF
translation, and/or :utf8 intuited from locale are disabled.
-Arranges for all accesses go straight to the lowest buffered layer provided
-by the configration. That is it strips off any layers above that layer.
-
-In Perl 5.6 and some books the C<:raw> layer (previously sometimes also
-referred to as a "discipline") is documented as the inverse of the
-C<:crlf> layer. That is no longer the case - other layers which would
-alter binary nature of the stream are also disabled. If you want UNIX
-line endings on a platform that normally does CRLF translation, but still
-want UTF-8 or encoding defaults the appropriate thing to do is to add
-C<:perlio> to PERLIO environment variable.
+Unlike in the earlier versions of Perl C<:raw> is I<not>
+just the inverse of C<:crlf> - other layers which would affect the
+binary nature of the stream are also removed or disabled.
=item :stdio
=item :unix
-Lowest level layer which provides basic PerlIO operations in terms of
-UNIX/POSIX numeric file descriptor calls
-C<open(), read(), write(), lseek(), close()>
+Low level layer which calls C<read>, C<write> and C<lseek> etc.
=item :utf8
A pseudolayer that turns on a flag on the layer below to tell perl
-that data sent to the stream should be converted to perl internal
-"utf8" form and that data from the stream should be considered as so
-encoded. On ASCII based platforms the encoding is UTF-8 and on EBCDIC
-platforms UTF-EBCDIC. May be useful in PERLIO environment variable to
-make UTF-8 the default. (To turn off that behaviour use C<:bytes>
-layer.)
+that output should be in utf8 and that input should be regarded as
+already in utf8 form. May be useful in PERLIO environment
+variable to make UTF-8 the default. (To turn off that behaviour
+use C<:bytes> layer.)
=item :win32
This release uses C<unix> as the bottom layer on Win32 and so still uses C
compiler's numeric file descriptor routines. There is an experimental native
-C<win32> layer which is expected to be enhanced and should eventually replace
-the C<unix> layer.
+C<win32> layer which is expected to be enhanced and should eventually be
+the default under Win32.
=item PERLIO_DEBUG
this controls the behavior of global destruction of objects and other
references. See L<perlhack/PERL_DESTRUCT_LEVEL> for more information.
+=item PERL_DL_NONLAZY
+
+Set to one to have perl resolve B<all> undefined symbols when it loads
+a dynamic library. The default behaviour is to resolve symbols when
+they are used. Setting this variable is useful during testing of
+extensions as it ensures that you get an error on misspelled function
+names even if the test suite doesn't call it.
+
=item PERL_ENCODING
If using the C<encoding> pragma without an explicit encoding name, the
This means that each different run of Perl will have a different
ordering of the results of keys(), values(), and each().
-See L<perlsec/"Algorithmic Complexity Attacks"> for more information.
+B<Please note that the hash seed is sensitive information>. Hashes are
+randomized to protect against local and remote attacks against Perl
+code. By manually setting a seed this protection may be partially or
+completely lost.
+
+See L<perlsec/"Algorithmic Complexity Attacks"> and
+L</PERL_HASH_SEED_DEBUG> for more information.
=item PERL_HASH_SEED_DEBUG
-(Since Perl 5.8.1.) Set to "1" to display (to STDERR) the value of
-the hash seed at the beginning of execution.
+(Since Perl 5.8.1.) Set to one to display (to STDERR) the value of
+the hash seed at the beginning of execution. This, combined with
+L</PERL_HASH_SEED> is intended to aid in debugging nondeterministic
+behavior caused by hash randomization.
+
+B<Note that the hash seed is sensitive information>: by knowing it one
+can craft a denial-of-service attack against Perl code, even remotely,
+see L<perlsec/"Algorithmic Complexity Attacks"> for more information.
+B<Do not disclose the hash seed> to people who don't need to know it.
+See also hash_seed() of L<Hash::Util>.
=item PERL_ROOT (specific to the VMS port)