perlartistic and perlgpl reformatting from Sean Burke.
[p5sagit/p5-mst-13.2.git] / pod / perlrun.pod
index e38ad3d..2b63c6b 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,17 +275,17 @@ 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.  The letters and their numeric values are as follows;
-listing the letters is equal to summing the numbers.
+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    the default input layer expects UTF-8
-    o    16    the default output layer enforces UTF-8
+    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 supposed to be in UTF-8
+    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
@@ -291,20 +296,28 @@ 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<-C> on its own (not followed by any number or option list),
-or an empty string as the C<$ENV{PERL_UNICODE}), has the same effect
+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 behavior follows the I<implicit>
-UTF-8 behaviour of Perl 5.8.0.
-
-You can use C<-C0> to explicitly disable all the above Unicode features.
+variables indicate a UTF-8 locale.  This behaviour follows the
+I<implicit> (and problematic) UTF-8 behaviour of Perl 5.8.0.
 
-See L<perluniintro>, L<perlfunc/open>, and L<open> for more information.
+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 state of this
-setting, see L<perlvar/"${^UNICODE}">.  (Another way of setting this
-variable is to set the environment variable PERL_UNICODE.)
+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.
@@ -905,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
@@ -953,7 +968,7 @@ C<:perlio> will insert a C<:unix> layer below itself to do low level IO.
 
 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
+In particular CRLF translation, and/or :utf8 intuited from locale
 are disabled.
 
 Arranges for all accesses go straight to the lowest buffered layer provided
@@ -1085,9 +1100,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)