=head1 SYNOPSIS
-B<perl> S<[ B<-CsTtuUWX> ]>
+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<-x>[I<dir>] ]>
S<[ B<-i>[I<extension>] ]>
S<[ B<-e> I<'command'> ] [ B<--> ] [ I<programfile> ] [ I<argument> ]...>
+ S<[ B<-C [I<number/list>] >]> ]>
=head1 DESCRIPTION
An alternate delimiter may be specified using B<-F>.
-=item B<-C>
-
-enables Perl to use the native wide character APIs on the target system.
-The magic variable C<${^WIDE_SYSTEM_CALLS}> reflects the state of
-this switch. See L<perlvar/"${^WIDE_SYSTEM_CALLS}">.
-
-This feature is currently only implemented on the Win32 platform.
+=item B<-C [I<number/list>]>
+
+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, 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.
+This feature was practically unused, however, and the command line
+switch was therefore "recycled".)
=item B<-c>
512 r Regular expression parsing and execution
1024 x Syntax tree dump
2048 u Tainting checks
- 4096 L Memory leaks (needs -DLEAKTEST when compiling Perl)
+ 4096 (Obsolete, previously used for LEAKTEST)
8192 H Hash dump -- usurps values()
16384 X Scratchpad allocation
32768 D Cleaning up
262144 R Include reference counts of dumped variables (eg when using -Ds)
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
All these flags require B<-DDEBUGGING> when you compile the Perl
executable (but see L<Devel::Peek>, L<re> which may change this).
As shown above, Perl creates the backup file whether or not any output
is actually changed. So this is just a fancy way to copy files:
- $ perl -p -i '/some/file/path/*' -e 1 file1 file2 file3...
+ $ perl -p -i'/some/file/path/*' -e 1 file1 file2 file3...
or
- $ perl -p -i '.orig' -e 1 file1 file2 file3...
+ $ perl -p -i'.orig' -e 1 file1 file2 file3...
You can use C<eof> without parentheses to locate the end of each input
file, in case you want to append to each file, or reset line numbering
using an array as though it were a scalar, if your subroutines
recurse more than 100 deep, and innumerable other things.
-This switch really just enables the internal C<^$W> variable. You
+This switch really just enables the internal C<$^W> variable. You
can disable or promote into fatal errors specific warnings using
C<__WARN__> hooks, as described in L<perlvar> and L<perlfunc/warn>.
See also L<perldiag> and L<perltrap>. A new, fine-grained warning
=item PERLIO
A space (or colon) separated list of PerlIO layers. If perl is built
-to use PerlIO system for IO (the default) these layers affect perl's IO.
+to use PerlIO system for IO (the default) these layers effect perl's IO.
It is conventional to start layer names with a colon e.g. C<:perlio> to
emphasise their similarity to variable "attributes". But the code that parses
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 signals are used.
+
+=item PERL_UNICODE
+
+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)
Used if chdir has no argument and HOME and LOGDIR are not set.