This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
integrate cfgperl contents into mainline
[perl5.git] / pod / perldelta.pod
index f074d8f..ad0abcc 100644 (file)
 =head1 NAME
 
-perldelta - what's new for perl5.005
+perldelta - what's new for perl v5.6 (as of v5.005_58)
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.004 release and this one.
+This is an unsupported alpha release, meant for intrepid Perl developers
+only.  The included sources may not even build correctly on some platforms.
+Subscribing to perl5-porters is the best way to monitor and contribute
+to the progress of development releases (see www.perl.org for info).
 
-[XXX this needs more verbose summaries of the sub topics, instead of just
-the "See L<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 Installation structure has changed
-
-Extensions that have with architecture-dependent files are now always
-installed in the architecture-dependent locations.  Previously, they
-were shared will multiple versions of perl, an were therefore liable to
-be overwritten with newer versions that may have subtle incompatibilities.
+=head2 Perl Source Incompatibilities
 
-=head2 Perl Source Compatibility
+TODO
 
-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
 
-=head2 C Source Compatibility
+=item C<PERL_POLLUTE>
 
-=item Core sources now require ANSI C compiler
+Release 5.005 grandfathered old global symbol names by providing preprocessor
+macros for extension source compatibility.  As of release 5.6, these
+preprocessor definitions are not available by default.  You need to explicitly
+compile perl with C<-DPERL_POLLUTE> to get these definitions.  For
+extensions still using the old symbols, this option can be
+specified via MakeMaker:
 
-=item Enabling threads has source compatibility issues
+    perl Makefile.PL POLLUTE=1
 
-=head2 Binary Compatibility
+=item C<PERL_IMPLICIT_CONTEXT>
 
-This version is NOT binary compatible with older versions.  All extensions
-will need to be recompiled.
+This new build option provides a set of macros for all API functions
+such that an implicit interpreter/thread context argument is passed to
+every API function.  As a result of this, something like C<sv_setsv(foo,bar)>
+amounts to a macro invocation that actually translates to something like
+C<Perl_sv_setsv(my_perl,foo,bar)>.  While this is generally expected
+to not have any significant source compatibility issues, the difference
+between a macro and a real function call will need to be considered.
 
-=head2 Security fixes may affect compatibility
+This means that there B<is> a source compatibility issue as a result of
+this if your extensions attempt to use pointers to any of the Perl API
+functions.
 
-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.
+Note that the above issue is not relevant to the default build of
+Perl, whose interfaces continue to match those of prior versions
+(but subject to the other options described here).
 
-Oneliners with the C<-e> switch do not create temporary files anymore.
+For testing purposes, the 5.005_58 release automatically enables
+PERL_IMPLICIT_CONTEXT whenever Perl is built with -Dusethreads or
+-Dusemultiplicity.
 
-=head2 Relaxed new mandatory warnings introduced in 5.004
+See L<perlguts/"The Perl API"> for detailed information on the
+ramifications of building Perl using this option.
 
-Many new warnings that were introduced in 5.004 have either 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>.
+=item C<PERL_POLLUTE_MALLOC>
 
-=head2 Licensing
-
-Perl has a new Social Contract for contributors.
-
-Perl's documentation license has changed.
-
-=head1 Core Changes
+Enabling 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, since by default they used the
+same names.
 
+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 behaviour to be suppressed with the HIDEMYMALLOC and
+EMBEDMYMALLOC preprocessor definitions.
 
-=head2 Threads
+As of release 5.6, 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> to get the older behaviour.  HIDEMYMALLOC
+and EMBEDMYMALLOC have no effect, since the behaviour they enabled is now
+the default.
 
-WARNING: Threading is considered an experimental feature.  Details of the
-implementation may change without notice.  There are known limitations
-and bugs.
+Note that these functions do B<not> constitute Perl's memory allocation API.
+See L<perlguts/"Memory Allocation"> for further information about that.
 
-See L<README.threads>.
+=item C<PL_na> and C<dTHR> Issues
 
-=head2 Compiler
+The C<PL_na> global is now thread local, so a C<dTHR> declaration is needed
+in the scope in which the global 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>.
 
-WARNING: The Compiler and related tools are considered experimental.
-Features may change without notice, and there are known limitations
-and bugs.
-
-B::Lint is an experimental module to detect and warn about suspicious
-code, especially the cases that the -w switch does not detect.
-
-B::Deparse can be used to demystify perl code.
-
-See C<ext/B/README>.
-
-=head2 Regular Expressions
+=back
 
-See L<perlre> and L<perlop>.
+=head2 Compatible C Source API Changes
 
-=head2   Improved malloc()
+=over
 
-See banner at the beginning of C<malloc.c> for details.
+=item C<PATCHLEVEL> is now C<PERL_VERSION>
 
-=head2 Quicksort is internally implemented
+The cpp macros C<PERL_REVISION>, C<PERL_VERSION>, and C<PERL_SUBVERSION>
+are now available by default from perl.h, and reflect the base revision,
+patchlevel, and subversion respectively.  C<PERL_REVISION> had no
+prior equivalent, while C<PERL_VERSION> and C<PERL_SUBVERSION> were
+previously available as C<PATCHLEVEL> and C<SUBVERSION>.
 
-See C<perlfunc/sort>.
+The new names cause less pollution of the B<cpp> namespace and reflect what
+the numbers have come to stand for in common practice.  For compatibility,
+the old names are still supported when F<patchlevel.h> is explicitly
+included (as required before), so there is no source incompatibility
+from the change.
 
-=head2 Reliable signals
+=back
 
-Via Thread::Signal.
+=head2 Binary Incompatibilities
 
-Via switched runtime op loop.
+The default build of this release can be made binary compatible with the
+5.005 release or its maintenance versions.  Add -DPERL_BINCOMPAT_5005
+to ccflags in config.sh to achieve this.  See INSTALL for further
+information about adding build flags to config.sh.
 
-=head2 Reliable stack pointers
+The usethreads or usemultiplicity builds are B<not> binary compatible
+with the corresponding builds in 5.005.
 
-The internals now reallocate the perl stack only at predicatable 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 XSUBs.
+=head1 Core Changes
 
-=head2 Behavior of local() on composites is well-defined
+=head2 Unicode and UTF-8 support
 
-See L<perlfunc/local>.
+Perl can optionally use UTF-8 as its internal representation for character
+strings.  The C<use utf8> pragma enables this support in the current lexical
+scope.  See L<utf8> for more information.
 
-=head2 C<%!> is transparently tied to the L<Errno> module
+=head2 Lexically scoped warning categories
 
-See L<perlvar>.
+You can now control the granularity of warnings emitted by perl at a finer
+level using the C<use warning> pragma.  See L<warning> and L<perllexwarn>
+for details.
 
-=head2 Pseudo-hashes are supported
+=head2 Binary numbers supported
 
-See L<perlref>.
+Binary numbers are now supported as literals, in s?printf formats, and
+C<oct()>:
 
-=head2 C<EXPR foreach EXPR> is supported
+    $answer = 0b101010;
+    printf "The answer is: %b\n", oct("0b101010");
 
-See L<perlsyn>.
+=head2 syswrite() ease-of-use
 
-=head2 Slice notation on glob elements is supported
+The length argument of C<syswrite()> is now optional.
 
-[XXX See what?]
+=head2 64-bit support
 
-=head2 Keywords can be globally overridden
+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.
 
-See L<perlsub>.
+=head2 Better syntax checks on parenthesized unary operators
 
-=head2 C<$^E> is meaningful on Win32
+Expressions such as:
 
-See L<perlvar>.
+    print defined(&foo,&bar,&baz);
+    print uc("foo","bar","baz");
+    undef($foo,&bar);
 
-=head2 C<foreach (1..1000000)> optimized
+used to be accidentally allowed in earlier versions, and produced
+unpredictable behaviour.  Some produced ancillary warnings
+when used in this way; others silently did the wrong thing.
 
-C<foreach (1..1000000)> is now optimized into a counting loop.  It does
-not try to allocate a 1000000-size list anymore.
+The parenthesized forms of most unary operators that expect a single
+argument now ensure that they are not called with more than one
+argument, making the cases shown above syntax errors.  The usual
+behaviour of:
 
-=head2 C<Foo::> can be used as implicitly quoted package name
+    print defined &foo, &bar, &baz;
+    print uc "foo", "bar", "baz";
+    undef $foo, &bar;
 
-[XXX See what?]
+remains unchanged.  See L<perlop>.
 
-=head2 C<exists $Foo::{Bar::}> tests existence of a package
+=head2 POSIX character class syntax [: :] supported
 
-[XXX See what?]
+For example to match alphabetic characters use /[[:alpha:]]/.
+See L<perlre> for details.
 
-=head2 Better locale support
+=head2 Improved C<qw//> operator
 
-See L<perllocale>.
+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 misbehaviour of C<qw//> in scalar context, which
+had inherited that behaviour from split().
 
-=head2 Better support for 64-bit platforms
+Thus:
 
-[XXX How?]
+    $foo = ($bar) = qw(a b c); print "$foo|$bar\n";
 
-=head2 prototype() returns useful results on builtins
+now correctly prints "3|a", instead of "2|a".
 
-See L<perlfunc/prototype>.
+=head2 pack() format 'Z' supported
 
-=head2 Re-blessing in DESTROY() supported for chaining DESTROY() methods
+The new format type 'Z' is useful for packing and unpacking null-terminated
+strings.  See L<perlfunc/"pack">.
 
-See L<perlobj/Destructors>.
+=head2 pack() format modifier '!' supported
 
-=head2 All C<printf> format conversions are handled internally
+The new format type modifier '!' is useful for packing and unpacking
+native shorts, ints, and longs.  See L<perlfunc/"pack">.
 
-See L<perlfunc/printf>.
+=head2 pack() and unpack() support counted strings
 
-=head2 New C<INIT> keyword
+The template character '#' can be used to specify a counted string
+type to be packed or unpacked.  See L<perlfunc/"pack">.
 
-C<INIT> subs are like C<BEGIN> and C<END>, but they get called just before
-the perl runtime begins execution.
+=head2 $^X variables may now have names longer than one character
 
-[XXX Needs to be documented in perlsub or perlmod.]
+Formerly, $^X was synonymous with ${"\cX"}, but $^XY was a syntax
+error.  Now variable names that begin with a control character may be
+arbitrarily long.  However, for compatibility reasons, these variables
+I<must> be written with explicit braces, as C<${^XY}> for example.
+C<${^XYZ}> is synonymous with ${"\cXYZ"}.  Variable names with more
+than one control character, such as C<${^XY^Z}>, are illegal.
 
-=head2 New C<lock> keyword
+The old syntax has not changed.  As before, `^X' may be either a
+literal control-X character or the two-character sequence `caret' plus
+`X'.  When braces are omitted, the variable name stops after the
+control character.  Thus C<"$^XYZ"> continues to be synonymous with
+C<$^X . "YZ"> as before.
 
-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.
+As before, lexical variables may not have names beginning with control
+characters.  As before, variables whose names begin with a control
+character are always forced to be in package `main'.  All such variables
+are reserved for future extensions, except those that begin with
+C<^_>, which may be used by user programs and is guaranteed not to
+acquire special meaning in any future version of Perl.
 
-=head2 Tied arrays are now fully supported
+=head1 Significant bug fixes
 
-See L<Tie::Array>.
+=head2 E<lt>HANDLEE<gt> on empty files
 
-=head2 Tied handles support is better
+With C<$/> set to C<undef>, slurping an empty file returns a string of
+zero length (instead of C<undef>, as it used to) the first time the
+HANDLE is read.  Further reads yield C<undef>.
 
-Several missing hooks have been added.  There is also a new base class for
-TIEARRAY implementations.  See L<Tie::Array>.
+This means that the following will append "foo" to an empty file (it used
+to do nothing):
 
+    perl -0777 -pi -e 's/^/foo/' empty_file
 
-=head1 Supported Platforms
+The behaviour of:
 
-Configure has many incremental improvements.  Site-wide policy for building
-perl can now be made perlsistent, via Policy.sh.  Configure can also remember
-the arguments used in previous invocations.
+    perl -pi -e 's/^/foo/' empty_file
 
-=head2 New Platforms
+is unchanged (it continues to leave the file empty).
 
-BeOS is now supported.  See L<README.beos>.
+=head2 C<eval '...'> improvements
 
-DOS is now supported under the DJGPP tools.  See L<README.dos>.
+Line numbers (as reflected by caller() and most diagnostics) within
+C<eval '...'> were often incorrect when here documents were involved.
+This has been corrected.
 
-=head2 Changes in existing support
+Lexical lookups for variables appearing in C<eval '...'> within
+functions that were themselves called within an C<eval '...'> were
+searching the wrong place for lexicals.  The lexical search now
+correctly ends at the subroutine's block boundary.
 
-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.]
+Parsing of here documents used to be flawed when they appeared as
+the replacement expression in C<eval 's/.../.../e'>.  This has
+been fixed.
 
-VMS configuration system has been rewritten.  See L<README.vms>.
+=head2 Automatic flushing of output buffers
 
-OpenBSD better supported.  [XXX what others?]
+fork(), exec(), system(), qx//, and pipe open()s now flush buffers
+of all files opened for output when the operation
+was attempted.  This mostly eliminates confusing 
+buffering mishaps suffered by users unaware of how Perl internally
+handles I/O.
 
-=head1 Modules and Pragmata
+=head2 Better diagnostics on meaningless filehandle operations
 
-=head2 New Modules
+Constructs such as C<open(E<lt>FHE<gt>)> and C<close(E<lt>FHE<gt>)>
+are compile time errors.  Attempting to read from filehandles that
+were opened only for writing will now produce warnings (just as
+writing to read-only filehandles does).
 
-=over
+=head1 Supported Platforms
 
-=item B
+=over 4
 
-Perl compiler and tools.  See [XXX what?].
+=item *
 
-=item Data::Dumper
+VM/ESA is now supported.
 
-A module to pretty print Perl data.  See L<Data::Dumper>.
+=item *
 
-=item Errno
+Siemens BS2000 is now supported under the POSIX Shell.
 
-A module to look up errors more conveniently.  See L<Errno>.
+=item *
 
-=item File::Spec
+The Mach CThreads (NEXTSTEP, OPENSTEP) are now supported by the Thread
+extension.
 
-A portable API for file operations.
+=item *
 
-=item ExtUtils::Installed
+GNU/Hurd is now supported.
 
-Query and manage installed modules.
+=item *
 
-=item ExtUtils::Packlist
+Rhapsody is now supported.
 
-Manipulate .packlist files.
+=item *
 
-=item Fatal
+EPOC is is now supported (on Psion 5).
 
-Make functions/builtins succeed or die.
+=back
 
-=item IPC::SysV
+=head1 New tests
 
-Constants and other support infrastructure for System V IPC operations
-in perl.
+=over 4
 
-=item Test
+=item  op/io_const
 
-A framework for writing testsuites.
+IO constants (SEEK_*, _IO*).
 
-=item Tie::Array
+=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 ByteLoader
 
-DB_File supports version 2.x of Berkeley DB.  See C<ext/DB_File/Changes>.
+The ByteLoader is a dedication extension to generate and run
+Perl bytecode.  See L<ByteLoader>.
 
-=item MakeMaker
+=item B
 
-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.
+The Perl Compiler suite has been extensively reworked for this
+release.
 
-=item CPAN
+=item Devel::DProf
 
-[XXX What?]
+Devel::DProf, a Perl source code profiler has been added.
 
-=item Cwd
+=item Dumpvalue
 
-Cwd::cwd is faster on most platforms.
+Added Dumpvalue module provides screen dumps of Perl data.
 
 =item Benchmark
 
-Keeps better time.
+You can now run tests for I<n> seconds instead of guessing the right
+number of tests to run: e.g. timethese(-5, ...) will run each 
+code for at least 5 CPU seconds.  Zero as the "number of repetitions"
+means "for at least 3 CPU seconds".  The output format has also
+changed.  For example:
 
-=back
-
-=head1 Utility Changes
-
-The crude GNU configure emulator is now called configure.gnu.
-
-h2ph and related utilities have been vastly overhauled.
-
-perlcc, a new experimental front end for the compiler is available.
-
-=head1 API Changes
+use Benchmark;$x=3;timethese(-5,{a=>sub{$x*$x},b=>sub{$x**2}})
 
-=head2 Incompatible Changes
+will now output something like this:
 
-=head2 Deprecations, Extensions
+Benchmark: running a, b, each for at least 5 CPU seconds...
+         a:  5 wallclock secs ( 5.77 usr +  0.00 sys =  5.77 CPU) @ 200551.91/s (n=1156516)
+         b:  4 wallclock secs ( 5.00 usr +  0.02 sys =  5.02 CPU) @ 159605.18/s (n=800686)
 
-=head2 C++ Support
+New features: "each for at least N CPU seconds...", "wallclock secs",
+and the "@ operations/CPU second (n=operations)".
 
-=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 Devel::Peek
 
-=item Ambiguous call resolved as CORE::%s(), qualify as such or use &
+The Devel::Peek module provides access to the internal representation
+of Perl variables and data.  It is a data debugging tool for the XS programmer.
 
-(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.
+=item Fcntl
 
-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).
+More Fcntl constants added: F_SETLK64, F_SETLKW64, O_LARGEFILE for
+large (more than 4G) file access (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.
 
-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 File::Spec
 
-=item Bad index while coercing array into hash
+New methods have been added to the File::Spec module: devnull() returns
+the name of the null device (/dev/null on Unix) and tmpdir() the name of
+the temp directory (normally /tmp on Unix).  There are now also methods
+to convert between absolute and relative filenames: abs2rel() and
+rel2abs().  For compatibility with operating systems that specify volume
+names in file paths, the splitpath(), splitdir(), and catdir() methods
+have been added.
 
-(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 File::Spec::Functions
 
-=item Bareword "%s" refers to nonexistent package
+The new File::Spec::Functions modules provides a function interface
+to the File::Spec module.  Allows shorthand
 
-(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?
+    $fullname = catfile($dir1, $dir2, $file);
 
-=item Can't call method "%s" on an undefined value
+instead of
 
-(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:
+    $fullname = File::Spec->catfile($dir1, $dir2, $file);
 
-    $BADREF = 42;
-    process $BADREF 1,2,3;
-    $BADREF->process(1,2,3);
+=item Math::BigInt
 
-=item Can't coerce array into hash
+The logical operations C<E<lt>E<lt>>, C<E<gt>E<gt>>, C<&>, C<|>,
+and C<~> are now supported on bigints.
 
-(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 Math::Complex
 
-=item Can't goto subroutine from an eval-string
+The accessor methods Re, Im, arg, abs, rho, and theta can now also
+act as mutators (accessor $z->Re(), mutator $z->Re(3)).
 
-(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 Math::Trig
 
-=item Can't use %%! because Errno.pm is not available
+A little bit of radial trigonometry (cylindrical and spherical),
+radial coordinate conversions, and the great circle distance were added.
 
-(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 SDBM_File
 
-=item Can't use %%! because Errno.pm is not available
+An EXISTS method has been added to this module (and sdbm_exists() has
+been added to the underlying sdbm library), so one can now call exists
+on an SDBM_File tied hash and get the correct result, rather than a
+runtime error.
 
-(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 Time::Local
 
-=item Cannot find an opnumber for "%s"
+The timelocal() and timegm() functions used to silently return bogus
+results when the date exceeded the machine's integer range.  They
+now consistently croak() if the date falls in an unsupported range.
 
-(F) A string of a form C<CORE::word> was given to prototype(), but
-there is no builtin with the name C<word>.
+=item Win32
 
-=item Character class syntax [. .] is reserved for future extensions
+The error return value in list context has been changed for all functions
+that return a list of values.  Previously these functions returned a list
+with a single element C<undef> if an error occurred.  Now these functions
+return the empty list in these situations.  This applies to the following
+functions:
 
-(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 ".\]".
+    Win32::FsType
+    Win32::GetOSVersion
 
-=item Character class syntax [: :] is reserved for future extensions
+The remaining functions are unchanged and continue to return C<undef> on
+error even in list context.
 
-(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 ":\]".
+The Win32::SetLastError(ERROR) function has been added as a complement
+to the Win32::GetLastError() function.
 
-=item Character class syntax [= =] is reserved for future extensions
+The new Win32::GetFullPathName(FILENAME) returns the full absolute
+pathname for FILENAME in scalar context.  In list context it returns
+a two-element list containing the fully qualified directory name and
+the filename.
 
-(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 DBM Filters
 
-=item %s: Eval-group in insecure regular expression
+A new feature called "DBM Filters" has been added to all the
+DBM modules--DB_File, GDBM_File, NDBM_File, ODBM_File, and SDBM_File.
+DBM Filters add four new methods to each DBM module:
 
-(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>.
+    filter_store_key
+    filter_store_value
+    filter_fetch_key
+    filter_fetch_value
 
-=item %s: Eval-group not allowed, use re 'eval'
+These can be used to filter key-value pairs before the pairs are
+written to the database or just after they are read from the database.
+See L<perldbmfilter> for further information.
 
-(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 })>.
+=back
 
-=item %s: Eval-group not allowed at run time
+=head2 Pragmata
 
-(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 })>.
+C<use utf8> to enable UTF-8 and Unicode support.
 
-=item Explicit blessing to '' (assuming package main)
+C<use caller 'encoding'> allows modules to inherit pragmatic attributes
+from the caller's context.  C<encoding> is currently the only supported
+attribute.
 
-(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');
+Lexical warnings pragma, C<use warning;>, to control optional warnings.
 
-=item Illegal hex digit ignored
+C<use filetest> 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
+permissions instead of using stat(2) as usual.  This matters
+in filesystems where there are ACLs (access control lists): the
+stat(2) might lie, but access(2) knows better.
 
-(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.
+=head1 Utility Changes
 
-=item No such array field
+Todo.
 
-(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.
+=head1 Documentation Changes
 
-=item No such field "%s" in variable %s of type %s
+=over 4
 
-(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 perlopentut.pod
 
-=item Out of memory during ridiculously large request
+A tutorial on using open() effectively.
 
-(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 perlreftut.pod
 
-=item Range iterator outside integer range
+A tutorial that introduces the essentials of references.
 
-(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 perltootc.pod
 
-=item Recursive inheritance detected while looking for method '%s' in package '%s'
+A tutorial on managing class data for object modules.
 
-(F) More than 100 levels of inheritance were encountered while invoking a
-method.  Probably indicates an unintended loop in your inheritance hierarchy.
+=back
 
-=item Reference found where even-sized list expected
+=head1 New Diagnostics
 
-(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>.
+=item /%s/: Unrecognized escape \\%c passed through
 
-    %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
+(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 Undefined value assigned to typeglob
+=item Filehandle %s opened only for output
 
-(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>.
+(W) You tried to read from a filehandle opened only for writing.  If you
+intended it to be a read-write filehandle, you needed to open it with
+"+E<lt>" or "+E<gt>" or "+E<gt>E<gt>" instead of with "E<lt>" or nothing.  If
+you intended only to read from the file, use "E<lt>".  See
+L<perlfunc/open>.
 
-=item Use of reserved word "%s" is deprecated
+=item Missing command in piped open
 
-(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()>.
+(W) You used the C<open(FH, "| command")> or C<open(FH, "command |")>
+construction, but the command was missing or blank.
 
-=item perl: warning: Setting locale failed.
+=item Unrecognized escape \\%c passed through
 
-(S) The whole warning message will look something like:
+(W) You used a backslash-character combination which is not recognized
+by Perl.
 
-       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").
+=item defined(@array) is deprecated
 
-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>.
+(D) defined() is not usually useful on arrays because it checks for an
+undefined I<scalar> value.  If you want to see if the array is empty,
+just use C<if (@array) { # not empty }> for example.  
 
-=back
+=item defined(%hash) is deprecated
 
+(D) defined() is not usually useful on hashes because it checks for an
+undefined I<scalar> value.  If you want to see if the hash is empty,
+just use C<if (%hash) { # not empty }> for example.  
 
 =head1 Obsolete Diagnostics
 
-=over
-
-=item Can't mktemp()
+Todo.
 
-(F) The mktemp() routine failed for some reason while trying to process
-a B<-e> switch.  Maybe your /tmp partition is full, or clobbered.
+=head1 Configuration Changes
 
-=item Can't write to temp file for B<-e>: %s
+=head2 installusrbinperl
 
-(F) The write routine failed for some reason while trying to process
-a B<-e> switch.  Maybe your /tmp partition is full, or clobbered.
+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.
 
-=item Cannot open temporary file
+=head2 SOCKS support
 
-(F) The create routine failed for some reason while trying to process
-a B<-e> switch.  Maybe your /tmp partition is full, or clobbered.
-
-
-=back
+You can use "Configure -Dusesocks" which causes Perl to probe
+for the SOCKS proxy protocol library, http://www.socks.nec.com/
 
 =head1 BUGS
 
 If you find what you think is a bug, you might check the headers of
-recently posted articles in the comp.lang.perl.misc newsgroup.
+articles recently posted to the comp.lang.perl.misc newsgroup.
 There may also be information at http://www.perl.com/perl/, the Perl
 Home Page.
 
 If you believe you have an unreported bug, please run the B<perlbug>
-program included with your release.  Make sure you trim your bug down
+program included with your release.  Make sure to trim your bug down
 to a tiny but sufficient test case.  Your bug report, along with the
-output of C<perl -V>, will be sent off to <F<perlbug@perl.com>> to be
+output of C<perl -V>, will be sent off to perlbug@perl.com to be
 analysed by the Perl porting team.
 
 =head1 SEE ALSO
@@ -613,4 +611,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