several bug fixes; now croak()s when date exceeds integer limits (instead
[p5sagit/p5-mst-13.2.git] / pod / perldelta.pod
index d1f0261..f64a1da 100644 (file)
 =head1 NAME
 
-perldelta - what's new for perl5.005
+perldelta - what's new for perl5.006 (as of 5.005_54)
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.004 release and this one.
-
-[XXX this needs more verbose summaries of the sub topics, instead of just
-the "See foo."  Scheduled for a second iteration. GSAR]
-
-=head1 About the new versioning system
+This document describes differences between the 5.005 release and this one.
 
 =head1 Incompatible Changes
 
-=head2 WARNING:  This version is not binary compatible with Perl 5.004.
-
-Starting with Perl 5.004_50 there were many deep and far-reaching changes
-to the language internals.  If you have dynamically loaded extensions
-that you built under perl 5.003 or 5.004, you can continue to use them
-with 5.004, but you will need to rebuild and reinstall those extensions
-to use them 5.005.  See L<INSTALL> for detailed instructions on how to
-upgrade.
-
-=head2 Default installation structure has changed
-
-The new Configure defaults are designed to allow a smooth upgrade from
-5.004 to 5.005, but you should read L<INSTALL> for a detailed
-discussion of the changes in order to adapt them to your system.
+=head2 Perl Source Incompatibilities
 
-=head2 Perl Source Compatibility
+None known at this time.
 
-When none of the experimental features are enabled, there should be
-no user-visible Perl source compatibility issue.
+=head2 C Source Incompatibilities
 
-If threads are enabled, then some caveats apply. C<@_> and C<$_> become
-lexical variables.  The effect of this should be largely transparent to
-the user, but there are some boundary conditions under which user will
-need to be aware of the issues. [XXX Add e.g. here.]
+=over 4
 
-Some new keywords have been introduced.  These are generally expected to
-have very little impact on compatibility.  See L</New C<INIT> keyword>,
-L</New C<lock> keyword>, and L</New C<qr//> operator>.
+=item C<PERL_POLLUTE>
 
-Certain barewords are now reserved.  Use of these will provoke a warning
-if you have asked for them with the C<-w> switch.
-See L</C<our> is now a reserved word>.
+Release 5.005 grandfathered old global symbol names by providing preprocessor
+macros for extension source compatibility.  As of release 5.006, these
+preprocessor definitions are not available by default.  You need to explicitly
+compile perl with C<-DPERL_POLLUTE> in order to get these definitions.
 
-=head2 C Source Compatibility
+=item C<PERL_POLLUTE_MALLOC>
 
-=item Core sources now require ANSI C compiler
+Enabling the use of Perl's malloc in release 5.005 and earlier caused
+the namespace of system versions of the malloc family of functions to
+be usurped by the Perl versions of these functions, since they used the
+same names by default.
 
-=item Enabling threads has source compatibility issues
+Besides causing problems on platforms that do not allow these functions to
+be cleanly replaced, this also meant that the system versions could not
+be called in programs that used Perl's malloc.  Previous versions of Perl
+have allowed this behavior to be suppressed with the HIDEMYMALLOC and
+EMBEDMYMALLOC preprocessor definitions.
 
-=head2 Binary Compatibility
+As of release 5.006, Perl's malloc family of functions have default names
+distinct from the system versions.  You need to explicitly compile perl with
+C<-DPERL_POLLUTE_MALLOC> in order to get the older behavior.  HIDEMYMALLOC
+and EMBEDMYMALLOC have no effect, since the behavior they enabled is now
+the default.
 
-This version is NOT binary compatible with older versions.  All extensions
-will need to be recompiled.
+Note that these functions do B<not> constitute Perl's memory allocation API.
+See L<perlguts/"Memory Allocation"> for further information about that.
 
-=head2 Security fixes may affect compatibility
+=item C<PL_na> and C<dTHR> Issues
 
-A few taint leaks and taint omissions have been corrected.  This may lead
-to "failure" of scripts that used to work with older versions.  Compiling
-with -DINCOMPLETE_TAINTS provides a perl with minimal amounts of changes
-to the tainting behavior.  But note that the resulting perl will have
-known insecurities.
+The C<PL_na> global is now thread local, so a C<dTHR> declaration is needed
+in the scope in which it appears.  XSUBs should handle this automatically,
+but if you have used C<PL_na> in support functions, you either need to
+change the C<PL_na> to a local variable (which is recommended), or put in
+a C<dTHR>.
 
-Oneliners with the C<-e> switch do not create temporary files anymore.
-
-=head2 Relaxed new mandatory warnings introduced in 5.004
-
-Many new warnings that were introduced in 5.004 have been made
-optional.  Some of these warnings are still present, but perl's new
-features make them less often a problem.  See L<New Diagnostics>.
-
-=head2 Licensing
+=back
 
-Perl has a new Social Contract for contributors.  See F<Porting/Contract>.
+=head2 Binary Incompatibilities
 
-The license included in much of the Perl documentation has changed.
-[XXX See where?]
+This release is not binary compatible with the 5.005 release and its
+maintenance versions.
 
 =head1 Core Changes
 
+=head2 Binary numbers supported
 
-=head2 Threads
-
-WARNING: Threading is considered an experimental feature.  Details of the
-implementation may change without notice.  There are known limitations
-and and some bugs.
-
-See L<README.threads>.
-
-=head2 Compiler
-
-WARNING: The Compiler and related tools are considered experimental.
-Features may change without notice, and there are known limitations
-and bugs.
-
-The Compiler produces three different types of transformations of a
-perl program.  The C backend generates C code that captures perl's state
-just before execution begins.  It eliminates the compile-time overheads
-of the regular perl interpreter, but the run-time performance remains
-comparatively the same.  The CC backend generates optimized C code
-equivivalent to the code path at run-time.  The CC backend has greater
-potential for big optimizations, but only a few optimizations are
-implemented currently.  The Bytecode backend generates a platform
-independent bytecode representation of the interpreter's state
-just before execution.  Thus, the Bytecode back end also eliminates
-much of the compilation overhead of the interpreter.
-
-The compiler comes with several valuable utilities.
-
-C<B::Lint> is an experimental module to detect and warn about suspicious
-code, especially the cases that the C<-w> switch does not detect.
-
-C<B::Deparse> can be used to demystify perl code, and understand
-how perl optimizes certain constructs.
-
-C<B::Xref> generates cross reference reports of all definition and use
-of variables, subroutines and formats in a program.
-
-C<B::Showlex> show the lexical variables used by a subroutine or file
-at a glance.
-
-C<perlcc> is a simple frontend for compiling perl.
-
-See C<ext/B/README>.
-
-=head2 Regular Expressions
-
-See L<perlre> and L<perlop>.
-
-=head2   Improved malloc()
-
-See banner at the beginning of C<malloc.c> for details.
-
-=head2 Quicksort is internally implemented
-
-See C<perlfunc/sort>.
-
-=head2 Reliable signals
-
-Two kinds.
-
-Via C<Thread::Signal>.
-
-Via switched runtime op loop.  [XXX Not yet available.]
-
-=head2 Reliable stack pointers
-
-The internals now reallocate the perl stack only at predictable times.
-In particular, magic calls never trigger reallocations of the stack,
-because all reentrancy of the runtime is handled using a "stack of stacks".
-This should improve reliability of cached stack pointers in the internals
-and in XSUBs.
-
-=head2 Behavior of local() on composites is now well-defined
-
-See L<perlfunc/local>.
-
-=head2 C<%!> is transparently tied to the L<Errno> module
-
-See L<perlvar>, and L<Errno>.
+Binary numbers are now supported as literals, in s?printf formats, and
+C<oct()>:
 
-=head2 Pseudo-hashes are supported
+       $answer = 0b101010;
+       printf "The answer is: %b\n", oct("0b101010");
 
-See L<perlref>.
+=head2 syswrite() ease-of-use
 
-=head2 C<EXPR foreach EXPR> is supported
+The length argument of C<syswrite()> is now optional.
 
-See L<perlsyn>.
+=head2 64-bit support
 
-=head2 Slice notation on glob elements is supported
+Better 64-bit support -- but full support still a distant goal.  One
+must Configure with -Duse64bits to get Configure to probe for the
+extent of 64-bit support.  Depending on the platform (hints file) more
+or less 64-awareness becomes available.  As of 5.005_54 at least
+somewhat 64-bit aware platforms are HP-UX 11 or better, Solaris 2.6 or
+better, IRIX 6.2 or better.  Naturally 64-bit platforms like Digital
+UNIX and UNICOS also have 64-bit support.
 
-[XXX See what?]
+=head2 Better syntax checks on parenthesized unary operators
 
-=head2 Keywords can be globally overridden
+Expressions such as:
 
-See L<perlsub>.
+       print defined(&foo,&bar,&baz);
+       print uc("foo","bar","baz");
+       undef($foo,&bar);
 
-=head2 C<$^E> is meaningful on Win32
+used to be accidentally allowed in earlier versions, and produced 
+unpredictable behavior.  Some of them produced ancillary warnings
+when used in this way, while others silently did the wrong thing.
 
-See L<perlvar>.
+The parenthesized forms of most unary operators that expect a single
+argument will now ensure that they are not called with more than one
+argument, making the above cases syntax errors.  Note that the usual
+behavior of:
 
-=head2 C<foreach (1..1000000)> optimized
+       print defined &foo, &bar, &baz;
+       print uc "foo", "bar", "baz";
+       undef $foo, &bar;
 
-C<foreach (1..1000000)> is now optimized into a counting loop.  It does
-not try to allocate a 1000000-size list anymore.
+remains unchanged.  See L<perlop>.
 
-=head2 C<Foo::> can be used as implicitly quoted package name
+=head2 Improved C<qw//> operator
 
-[XXX See what?]
+The C<qw//> operator is now evaluated at compile time into a true list
+instead of being replaced with a run time call to C<split()>.  This
+removes the confusing behavior of C<qw//> in scalar context stemming from
+the older implementation, which inherited the behavior from split().  
 
-=head2 C<exists $Foo::{Bar::}> tests existence of a package
+Thus:
 
-[XXX See what?]
+    $foo = ($bar) = qw(a b c); print "$foo|$bar\n";
 
-=head2 Better locale support
+now correctly prints "3|a", instead of "2|a".
 
-See L<perllocale>.
+=head2 pack() format 'Z' supported
 
-=head2 Experimental support for 64-bit platforms
+The new format type 'Z' is useful for packing and unpacking null-terminated
+strings.  See L<perlfunc/"pack">.
 
-Perl5 has always had 64-bit support on systems with 64-bit longs.
-Starting with 5.005, the beginnings of experimental support for systems
-with 32-bit long and 64-bit 'long long' integers has been added.
-If you add -DUSE_LONG_LONG to your ccflags in config.sh (or manually
-define it in perl.h) then perl will be built with 'long long' support.
-There will be many compiler warnings, and the resultant perl may not
-work on all systems.  There are many other issues related to
-third-party extensions and libraries.  This option exists to allow
-people to work on those issues.
+=head1 Significant bug fixes
 
-=head2 prototype() returns useful results on builtins
+=head2 E<lt>HANDLEE<gt> on empty files
 
-See L<perlfunc/prototype>.
+With C<$/> set to C<undef>, slurping an empty file returns a string of
+zero length (instead of C<undef>, as it used to) for the first time the
+HANDLE is read.  Subsequent reads yield C<undef>.
 
-=head2 Extended support for exception handling
+This means that the following will append "foo" to an empty file (it used
+to not do anything before):
 
-C<die()> now accepts a reference value, and C<$@> gets set to that
-value in exception traps.  This makes it possible to propagate
-exception objects.  See L<perlfunc/eval>.  [XXX there's nothing
-about this in perlfunc/eval yet.]
+    perl -0777 -pi -e 's/^/foo/' empty_file
 
-=head2 Re-blessing in DESTROY() supported for chaining DESTROY() methods
+Note that the behavior of:
 
-See L<perlobj/Destructors>.
-
-=head2 All C<printf> format conversions are handled internally
-
-See L<perlfunc/printf>.
-
-=head2 New C<INIT> keyword
-
-C<INIT> subs are like C<BEGIN> and C<END>, but they get run just before
-the perl runtime begins execution.  e.g., the Perl Compiler makes use of
-C<INIT> blocks to initialize and resolve pointers to XSUBs.
-
-[XXX Needs to be documented in perlsub or perlmod.]
-
-=head2 New C<lock> keyword
-
-The C<lock> keyword is the fundamental synchronization primitive
-in threaded perl.  When threads are not enabled, it is currently a noop.
-
-To minimize impact on source compatibility this keyword is "weak", i.e., any
-user-defined subroutine of the same name overrides it, unless a C<use Thread>
-has been seen.
-
-=head2 New C<qr//> operator
-
-The C<qr//> operator, which is syntactically similar to the other quote-like
-operators, is used to create compiled regular expressions.  This compiled
-form can now be explicitly passed around in variables, and interpolated in
-other regular expressions.  See L<perlop> and L<perlre>.
-
-=head2 C<our> is now a reserved word
-
-=head2 Tied arrays are now fully supported
-
-See L<Tie::Array>.
-
-=head2 Tied handles support is better
-
-Several missing hooks have been added.  There is also a new base class for
-TIEARRAY implementations.  See L<Tie::Array>.
+    perl -pi -e 's/^/foo/' empty_file
 
+is unchanged (it continues to leave the file empty).
 
 =head1 Supported Platforms
 
-Configure has many incremental improvements.  Site-wide policy for building
-perl can now be made persistent, via Policy.sh.  Configure also records
-the command-line arguments used in F<config.sh>.
-
-=head2 New Platforms
-
-BeOS is now supported.  See L<README.beos>.
-
-DOS is now supported under the DJGPP tools.  See L<README.dos>.
+=over 4
 
-MPE/iX is now supported.  See L<README.mpeix>.
+=item *
 
-=head2 Changes in existing support
+VM/ESA is now supported.
 
-Win32 support has been vastly enhanced.  Support for Perl Object, a C++
-encapsulation of Perl.  GCC and EGCS are now supported on Win32.
-[XXX Perl Object needs a big explanation elsewhere, and a pointer to
-that location here.]
+=item *
 
-VMS configuration system has been rewritten.  See L<README.vms>.
+Siemens BS200 is now supported.
 
-OpenBSD better supported.  [XXX what others?]
+=item *
 
-=head1 Modules and Pragmata
-
-=head2 New Modules
-
-=over
-
-=item B
-
-Perl compiler and tools.  See [XXX what?].
-
-=item Data::Dumper
-
-A module to pretty print Perl data.  See L<Data::Dumper>.
-
-=item Errno
-
-A module to look up errors more conveniently.  See L<Errno>.
+The Mach CThreads (NeXTstep) are now supported by the Thread extension.
 
-=item File::Spec
-
-A portable API for file operations.
-
-=item ExtUtils::Installed
-
-Query and manage installed modules.
-
-=item ExtUtils::Packlist
-
-Manipulate .packlist files.
-
-=item Fatal
-
-Make functions/builtins succeed or die.
-
-=item IPC::SysV
+=back
 
-Constants and other support infrastructure for System V IPC operations
-in perl.
+=head1 New tests
 
-=item Test
+=over 4
 
-A framework for writing testsuites.
+=item  op/io_const
 
-=item Tie::Array
+IO constants (SEEK_*, _IO*).
+       
+=item  op/io_dir
 
-Base class for tied arrays.
+Directory-related IO methods (new, read, close, rewind, tied delete).
 
-=item Tie::Handle
+=item  op/io_multihomed
 
-Base class for tied handles.
+INET sockets with multi-homed hosts.
 
-=item Thread
+=item  op/io_poll
 
-Perl thread creation, manipulation, and support.
+IO poll().
 
-=item attrs
+=item  op/io_unix
 
-Set subroutine attributes.
+UNIX sockets.
 
-=item fields
+=item  op/filetest
 
-Compile-time class fields.
+File test operators.
 
-=item re
+=item  op/lex_assign
 
-Various pragmata to control behavior of regular expressions.
+Verify operations that access pad objects (lexicals and temporaries).
 
 =back
 
-=head2 Changes in existing modules
-
-=over
-
-=item CGI
-
-CGI has been updated to version 2.42.
+=head1 Modules and Pragmata
 
-=item POSIX
+=head2 Modules
 
-POSIX now has its own platform-specific hints files.
+=over 4
 
-=item DB_File
+=item Dumpvalue
 
-DB_File supports version 2.x of Berkeley DB.  See C<ext/DB_File/Changes>.
+Added Dumpvalue module provides screen dumps of Perl data.
 
-=item MakeMaker
+=item Benchmark
 
-MakeMaker now supports writing empty makefiles, provides a way to
-specify that site umask() policy should be honored.  There is also
-better support for manipulation of .packlist files, and getting
-information about installed modules.
+You can now run tests for I<x> seconds instead of guessing the right
+number of tests to run.
 
-Extensions that have both architecture-dependent and
-architecture-independent files are now always installed completely in
-the architecture-dependent locations.  Previously, the shareable parts
-were shared both across architectures and across perl versions and were
-therefore liable to be overwritten with newer versions that might have
-subtle incompatibilities.
+=item Fcntl
 
-=item CPAN
+More Fcntl constants added: F_SETLK64, F_SETLKW64, O_LARGEFILE for
+large (more than 4G) file access (the 64-bit support is not yet
+working, though, so no need to get overly excited), Free/Net/OpenBSD
+locking behaviour flags F_FLOCK, F_POSIX, Linux F_SHLCK, and
+O_ACCMODE: the mask of O_RDONLY, O_WRONLY, and O_RDWR.
 
-[XXX What?]
+=item Math::Complex
+The accessors methods Re, Im, arg, abs, rho, theta, methods can
+($z->Re()) now also act as mutators ($z->Re(3)).
 
-=item Cwd
+=item Math::Trig
 
-Cwd::cwd is faster on most platforms.
+A little bit of radial trigonometry (cylindrical and spherical) added,
+for example the great circle distance.
 
-=item Benchmark
+=item Time::Local
 
-Keeps better time.
+The timelocal() and timegm() functions used to silently return bogus
+results when the date exceeded the machine's integer range.  They
+consistently croak() if the date falls in an unsupported range.
 
 =back
 
-=head1 Utility Changes
-
-h2ph and related utilities have been vastly overhauled.
-
-perlcc, a new experimental front end for the compiler is available.
-
-The crude GNU configure emulator is now called configure.gnu.
+=head2 Pragmata
 
-=head1 API Changes
+Lexical warnings pragma, "use warning;", to control optional warnings.
 
-=head2 Incompatible Changes
+Filetest pragma, to control the behaviour of filetests (C<-r> C<-w> ...).
+Currently only one subpragma implemented, "use filetest 'access';",
+that enables the use of access(2) or equivalent to check the
+permissions instead of using stat(2) as usual.  This matters
+in filesystems where there are ACLs (access control lists), the
+stat(2) might lie, while access(2) knows better.
 
-=head2 Deprecations, Extensions
+=head1 Utility Changes
 
-=head2 C++ Support
+Todo.
 
 =head1 Documentation Changes
 
-Config.pm now has a glossary of variables.
-
-Porting/patching.pod has detailed instructions on how to create and
-submit patches for perl.
-
-=head1 New Diagnostics
-
-=over
-
-=item Ambiguous call resolved as CORE::%s(), qualify as such or use &
-
-(W) A subroutine you have declared has the same name as a Perl keyword,
-and you have used the name without qualification for calling one or the
-other.  Perl decided to call the builtin because the subroutine is
-not imported.
-
-To force interpretation as a subroutine call, either put an ampersand
-before the subroutine name, or qualify the name with its package.
-Alternatively, you can import the subroutine (or pretend that it's
-imported with the C<use subs> pragma).
-
-To silently interpret it as the Perl operator, use the C<CORE::> prefix
-on the operator (e.g. C<CORE::log($x)>) or by declaring the subroutine
-to be an object method (see L<attrs>).
-
-=item Bad index while coercing array into hash
-
-(F) The index looked up in the hash found as the 0'th element of a
-pseudo-hash is not legal.  Index values must be at 1 or greater.
-See L<perlref>.
-
-=item Bareword "%s" refers to nonexistent package
-
-(W) You used a qualified bareword of the form C<Foo::>, but
-the compiler saw no other uses of that namespace before that point.
-Perhaps you need to predeclare a package?
-
-=item Can't call method "%s" on an undefined value
-
-(F) You used the syntax of a method call, but the slot filled by the
-object reference or package name contains an undefined value.
-Something like this will reproduce the error:
-
-    $BADREF = 42;
-    process $BADREF 1,2,3;
-    $BADREF->process(1,2,3);
-
-=item Can't coerce array into hash
-
-(F) You used an array where a hash was expected, but the array has no
-information on how to map from keys to array indices.  You can do that
-only with arrays that have a hash reference at index 0.
-
-=item Can't goto subroutine from an eval-string
-
-(F) The "goto subroutine" call can't be used to jump out of an eval "string".
-(You can use it to jump out of an eval {BLOCK}, but you probably don't want to.)
-
-=item Can't use %%! because Errno.pm is not available
-
-(F) The first time the %! hash is used, perl automatically loads the
-Errno.pm module. The Errno module is expected to tie the %! hash to
-provide symbolic names for C<$!> errno values.
-
-=item Cannot find an opnumber for "%s"
-
-(F) A string of a form C<CORE::word> was given to prototype(), but
-there is no builtin with the name C<word>.
-
-=item Character class syntax [. .] is reserved for future extensions
-
-(W) Within regular expression character classes ([]) the syntax beginning
-with "[." and ending with ".]" is reserved for future extensions.
-If you need to represent those character sequences inside a regular
-expression character class, just quote the square brackets with the
-backslash: "\[." and ".\]".
-
-=item Character class syntax [: :] is reserved for future extensions
+=over 4
 
-(W) Within regular expression character classes ([]) the syntax beginning
-with "[:" and ending with ":]" is reserved for future extensions.
-If you need to represent those character sequences inside a regular
-expression character class, just quote the square brackets with the
-backslash: "\[:" and ":\]".
+=item perlopentut.pod
 
-=item Character class syntax [= =] is reserved for future extensions
+A tutorial on using open() effectively.
 
-(W) Within regular expression character classes ([]) the syntax
-beginning with "[=" and ending with "=]" is reserved for future extensions.
-If you need to represent those character sequences inside a regular
-expression character class, just quote the square brackets with the
-backslash: "\[=" and "=\]".
+=item perlreftut.pod
 
-=item %s: Eval-group in insecure regular expression
-
-(F) Perl detected tainted data when trying to compile a regular expression
-that contains the C<(?{ ... })> zero-width assertion, which is unsafe.
-See L<perlre/(?{ code })>, and L<perlsec>.
-
-=item %s: Eval-group not allowed, use re 'eval'
-
-(F) A regular expression contained the C<(?{ ... })> zero-width assertion,
-but that construct is only allowed when the C<use re 'eval'> pragma is
-in effect.  See L<perlre/(?{ code })>.
-
-=item %s: Eval-group not allowed at run time
-
-(F) Perl tried to compile a regular expression containing the C<(?{ ... })>
-zero-width assertion at run time, as it would when the pattern contains
-interpolated values.  Since that is a security risk, it is not allowed.
-If you insist, you may still do this by explicitly building the pattern
-from an interpolated string at run time and using that in an eval().
-See L<perlre/(?{ code })>.
-
-=item Explicit blessing to '' (assuming package main)
-
-(W) You are blessing a reference to a zero length string.  This has
-the effect of blessing the reference into the package main.  This is
-usually not what you want.  Consider providing a default target
-package, e.g. bless($ref, $p or 'MyPackage');
-
-=item Illegal hex digit ignored
-
-(W) You may have tried to use a character other than 0 - 9 or A - F in a
-hexadecimal number.  Interpretation of the hexadecimal number stopped
-before the illegal character.
-
-=item No such array field
-
-(F) You tried to access an array as a hash, but the field name used is
-not defined.  The hash at index 0 should map all valid field names to
-array indices for that to work.
-
-=item No such field "%s" in variable %s of type %s
-
-(F) You tried to access a field of a typed variable where the type
-does not know about the field name.  The field names are looked up in
-the %FIELDS hash in the type package at compile time.  The %FIELDS hash
-is usually set up with the 'fields' pragma.
-
-=item Out of memory during ridiculously large request
-
-(F) You can't allocate more than 2^31+"small amount" bytes.  This error
-is most likely to be caused by a typo in the Perl program. e.g., C<$arr[time]>
-instead of C<$arr[$time]>.
-
-=item Range iterator outside integer range
-
-(F) One (or both) of the numeric arguments to the range operator ".."
-are outside the range which can be represented by integers internally.
-One possible workaround is to force Perl to use magical string
-increment by prepending "0" to your numbers.
-
-=item Recursive inheritance detected while looking for method '%s' in package '%s'
-
-(F) More than 100 levels of inheritance were encountered while invoking a
-method.  Probably indicates an unintended loop in your inheritance hierarchy.
-
-=item Reference found where even-sized list expected
-
-(W) You gave a single reference where Perl was expecting a list with
-an even number of elements (for assignment to a hash). This
-usually means that you used the anon hash constructor when you meant 
-to use parens. In any case, a hash requires key/value B<pairs>.
-
-    %hash = { one => 1, two => 2, };   # WRONG
-    %hash = [ qw/ an anon array / ];   # WRONG
-    %hash = ( one => 1, two => 2, );   # right
-    %hash = qw( one 1 two 2 );                 # also fine
-
-=item Undefined value assigned to typeglob
-
-(W) An undefined value was assigned to a typeglob, a la C<*foo = undef>.
-This does nothing.  It's possible that you really mean C<undef *foo>.
-
-=item Use of reserved word "%s" is deprecated
-
-(D) The indicated bareword is a reserved word.  Future versions of perl
-may use it as a keyword, so you're better off either explicitly quoting
-the word in a manner appropriate for its context of use, or using a
-different name altogether.  The warning can be suppressed for subroutine
-names by either adding a C<&> prefix, or using a package qualifier,
-e.g. C<&our()>, or C<Foo::our()>.
-
-=item perl: warning: Setting locale failed.
-
-(S) The whole warning message will look something like:
-
-       perl: warning: Setting locale failed.
-       perl: warning: Please check that your locale settings:
-               LC_ALL = "En_US",
-               LANG = (unset)
-           are supported and installed on your system.
-       perl: warning: Falling back to the standard locale ("C").
-
-Exactly what were the failed locale settings varies.  In the above the
-settings were that the LC_ALL was "En_US" and the LANG had no value.
-This error means that Perl detected that you and/or your system
-administrator have set up the so-called variable system but Perl could
-not use those settings.  This was not dead serious, fortunately: there
-is a "default locale" called "C" that Perl can and will use, the
-script will be run.  Before you really fix the problem, however, you
-will get the same error message each time you run Perl.  How to really
-fix the problem can be found in L<perllocale> section B<LOCALE PROBLEMS>.
+A tutorial that introduces the essentials of references.
 
 =back
 
+=head1 New Diagnostics
 
-=head1 Obsolete Diagnostics
+=item /%s/: Unrecognized escape \\%c passed through
 
-=over
+(W) You used a backslash-character combination which is not recognized
+by Perl.  This combination appears in an interpolated variable or a 
+C<'>-delimited regular expression.
 
-=item Can't mktemp()
+=item Unrecognized escape \\%c passed through
 
-(F) The mktemp() routine failed for some reason while trying to process
-a B<-e> switch.  Maybe your /tmp partition is full, or clobbered.
+(W) You used a backslash-character combination which is not recognized
+by Perl.
 
-=item Can't write to temp file for B<-e>: %s
+=item Missing command in piped open
 
-(F) The write routine failed for some reason while trying to process
-a B<-e> switch.  Maybe your /tmp partition is full, or clobbered.
+(W) You used the C<open(FH, "| command")> or C<open(FH, "command |")>
+construction, but the command was missing or blank.
 
-=item Cannot open temporary file
+=head1 Obsolete Diagnostics
 
-(F) The create routine failed for some reason while trying to process
-a B<-e> switch.  Maybe your /tmp partition is full, or clobbered.
+Todo.
 
+=head1 Configuration Changes
 
-=back
+You can use "Configure -Uinstallusrbinperl" which causes installperl
+to skip installing perl also as /usr/bin/perl.  This is useful if you
+prefer not to modify /usr/bin for some reason or another but harmful
+because many scripts assume to find Perl in /usr/bin/perl.
 
 =head1 BUGS
 
@@ -678,4 +320,9 @@ The F<Artistic> and F<Copying> files for copyright information.
 
 =head1 HISTORY
 
+Written by Gurusamy Sarathy <F<gsar@umich.edu>>, with many contributions
+from The Perl Porters.
+
+Send omissions or corrections to <F<perlbug@perl.com>>.
+
 =cut