Add a new warning, "Newline in left-justified string for printf/sprintf"
[p5sagit/p5-mst-13.2.git] / pod / perlrun.pod
index 1beedc5..85d3bdf 100644 (file)
@@ -7,7 +7,7 @@ perlrun - how to execute the Perl interpreter
 B<perl>        S<[ B<-sTtuUWX> ]>
        S<[ B<-hv> ] [ B<-V>[:I<configvar>] ]>
        S<[ B<-cw> ] [ B<-d>[:I<debugger>] ] [ B<-D>[I<number/list>] ]>
-       S<[ B<-pna> ] [ B<-F>I<pattern> ] [ B<-l>[I<octal>] ] [ B<-0>[I<octal>] ]>
+       S<[ B<-pna> ] [ B<-F>I<pattern> ] [ B<-l>[I<octal>] ] [ B<-0>[I<octal/hexadecimal>] ]>
        S<[ B<-I>I<dir> ] [ B<-m>[B<->]I<module> ] [ B<-M>[B<->]I<'module...'> ]>
        S<[ B<-P> ]>
        S<[ B<-S> ]>
@@ -234,19 +234,24 @@ Switches include:
 
 =over 5
 
-=item B<-0>[I<digits>]
+=item B<-0>[I<octal/hexadecimal>]
 
-specifies the input record separator (C<$/>) as an octal number.  If there are
-no digits, the null character is the separator.  Other switches may
-precede or follow the digits.  For example, if you have a version of
-B<find> which can print filenames terminated by the null character, you
-can say this:
+specifies the input record separator (C<$/>) as an octal or
+hexadecimal number.  If there are no digits, the null character is the
+separator.  Other switches may precede or follow the digits.  For
+example, if you have a version of B<find> which can print filenames
+terminated by the null character, you can say this:
 
     find . -name '*.orig' -print0 | perl -n0e unlink
 
 The special value 00 will cause Perl to slurp files in paragraph mode.
 The value 0777 will cause Perl to slurp files whole because there is no
-legal character with that value.
+legal byte with that value.
+
+If you want to specify any Unicode character, use the hexadecimal
+format: C<-0xHHH...>, where the C<H> are valid hexadecimal digits.
+(This means that you cannot use the C<-x> with a directory name that
+consists of hexadecimal digits.)
 
 =item B<-a>
 
@@ -270,34 +275,49 @@ An alternate delimiter may be specified using B<-F>.
 The C<-C> flag controls some Unicode of the Perl Unicode features.
 
 As of 5.8.1, the C<-C> can be followed either by a number or a list
-of option letters.
-
-    I    0x0001    STDIN is assumed to be in UTF-8
-    O    0x0002    STDOUT will be in UTF-8
-    E    0x0004    STDERR will be in UTF-8
-    S    0x0007    I + O + E
-    i    0x0008    the default input layer expects UTF-8
-    o    0x0010    the default output layer enforces UTF-8
-    D    0x0018    i + o
-    A    0x0020    the @ARGV elements are supposed to be in UTF-8
-    L    0x0040    normally the IOEio (SD) 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)
-
-The C<-C> on its own (not followed by any number or option list) 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 behavior follows
-the I<implicit> behaviour of Perl 5.8.0.
-
-You can use C<-C0> to explicitly disable all the above Unicode features.
-
-See L<perluniintro>, L<perlfunc/open>, and L<open> for more information.
-
-The magic variable C<${^UNICODE}> reflects the state of this setting,
-see L<perlvar/"${^UNICODE}">.  (Another way of setting this variable
-is to set the environment variable PERL_UNICODE.)
+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
+
+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
+nor toggling.
+
+The C<io> options mean that any subsequent open() (or similar I/O
+operations) will have the C<:utf8> PerlIO layer implicitly applied
+to them, in other words, UTF-8 is expected from any input stream,
+and UTF-8 is produced to any output stream.  This is just the default,
+with explicit layers in open() and with binmode() one can manipulate
+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.
+
+You can use C<-C0> (or C<"0"> for $ENV{PERL_UNICODE}) to explicitly
+disable all the above Unicode features.
+
+The read-only magic variable C<${^UNICODE}> reflects the numeric value
+of this setting.  This is variable is set during Perl startup and is
+thereafter read-only.  If you want runtime effects, use the three-arg
+open() (see L<perlfunc/open>), the two-arg binmode() (see L<perlfunc/binmode>),
+and the C<open> pragma (see L<open>).
 
 (In Perls earlier than 5.8.1 the C<-C> switch was a Win32-only switch
 that enabled the use of Unicode-aware "wide system call" Win32 APIs.
@@ -898,6 +918,8 @@ emphasise their similarity to variable "attributes". But the code that parses
 layer specification strings (which is also used to decode the PERLIO
 environment variable) treats the colon as a separator.
 
+An unset or empty PERLIO is equivalent to C<:stdio>.
+
 The list becomes the default for I<all> perl's IO. Consequently only built-in
 layers can appear in this list, as external layers (such as :encoding()) need
 IO in  order to load them!. See L<"open pragma"|open> for how to add external
@@ -910,8 +932,9 @@ variable are summarised below. For more details see L<PerlIO>.
 
 =item :bytes
 
-Turns I<off> the C<:utf8> flag for the layer below.
-Unlikely to be useful in global PERLIO environment variable.
+A pseudolayer that turns I<off> the C<:utf8> flag for the layer below.
+Unlikely to be useful on its own in the global PERLIO environment variable.
+You perhaps were thinking of C<:crlf:bytes> or C<:perlio:bytes>.
 
 =item :crlf
 
@@ -942,12 +965,17 @@ and in general attempts to minimize data copying.
 
 C<:perlio> will insert a C<:unix> layer below itself to do low level IO.
 
+=item :pop
+
+An experimental pseudolayer that removes the topmost layer.
+Use with the same care as is reserved for nitroglyserin.
+
 =item :raw
 
-Applying the <:raw> layer is equivalent to calling C<binmode($fh)>.
-It makes the stream pass each byte as-is without any translation.
-In particular CRLF translation, and/or :utf8 inuited from locale
-are disabled.
+A pseudolayer that manipulates other layers.  Applying the <:raw>
+layer is equivalent to calling C<binmode($fh)>.  It makes the stream
+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.
@@ -976,12 +1004,13 @@ C<open(), read(), write(), lseek(), close()>
 
 =item :utf8
 
-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.)
+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.)
 
 =item :win32
 
@@ -1039,7 +1068,7 @@ The command used to load the debugger code.  The default is:
 =item PERL5SHELL (specific to the Win32 port)
 
 May be set to an alternative shell that perl must use internally for
-executing "backtick" commands or system().  Default is C<cmd.exe /x/c>
+executing "backtick" commands or system().  Default is C<cmd.exe /x/d/c>
 on WindowsNT and C<command.com /c> on Windows95.  The value is considered
 to be space-separated.  Precede any character that needs to be protected
 (like a space or backslash) with a backslash.
@@ -1078,9 +1107,20 @@ affect perl on VMS include PERLSHR, PERL_ENV_TABLES, and
 SYS$TIMEZONE_DIFFERENTIAL but are optional and discussed further in
 L<perlvms> and in F<README.vms> in the Perl source distribution.
 
+=item PERL_SIGNALS
+
+In Perls 5.8.1 and later.  If set to C<unsafe> the pre-Perl-5.8.0
+signals behaviour (immediate but unsafe) is restored.  If set to
+C<safe> the safe (or deferred) signals are used.  See L<perlipc>.
+
 =item PERL_UNICODE
 
-Equivalent to the B<-C> command-line switch.
+Equivalent to the B<-C> command-line switch.  Note that this is not
+a boolean variable-- setting this to C<"1"> is not the right way to
+"enable Unicode" (whatever that would mean).  You can use C<"0"> to
+"disable Unicode", though (or alternatively unset PERL_UNICODE in
+your shell before starting Perl).  See the description of the C<-C>
+switch for more information.
 
 =item SYS$LOGIN (specific to the VMS port)