-TODO: perl591delta and further
-
=head1 NAME
perldelta - what is new for perl 5.10.0
you what versions of core modules ship with any versions of Perl 5. It
comes with a command-line frontend, C<corelist>.
+=item *
+
+C<Math::BigInt::FastCalc> is an XS-enabled, and thus faster, version of
+C<Math::BigInt::Calc>.
+
+=item *
+
+C<Compress::Zlib> is an interface to the zlib compression library. It
+comes with a bundled version of zlib, so having a working zlib is not a
+prerequisite to install it. It's used by C<Archive::Tar> (see below).
+
+=item *
+
+C<IO::Zlib> is an C<IO::>-style interface to C<Compress::Zlib>.
+
+=item *
+
+C<Archive::Tar> is a module to manipulate C<tar> archives.
+
+=item *
+
+C<Digest::SHA> is a module used to calculate many types of SHA digests,
+has been included for SHA support in the CPAN module.
+
+=item *
+
+C<ExtUtils::CBuilder> and C<ExtUtils::ParseXS> have been added.
+
=back
=head1 Utility Changes
=over 4
-=item *
+=item perl -d
The Perl debugger can now save all debugger commands for sourcing later;
notably, it can now emulate stepping backwards, by restarting and
Perl has a new -dt command-line flag, which enables threads support in the
debugger.
-=item *
+=item ptar
+
+C<ptar> is a pure perl implementation of C<tar>, that comes with
+C<Archive::Tar>.
+
+=item ptardiff
+
+C<ptardiff> is a small script used to generate a diff between the contents
+of a tar archive and a directory tree. Like C<ptar>, it comes with
+C<Archive::Tar>.
+
+=item shasum
+
+C<shasum> is a command-line utility, used to print or to check SHA
+digests. It comes with the new C<Digest::SHA> module.
+
+=item corelist
The C<corelist> utility is now installed with perl (see L</"New modules">
above).
-=item *
+=item h2ph and h2xs
C<h2ph> and C<h2xs> have been made a bit more robust with regard to
"modern" C code.
-=item *
+C<h2xs> implements a new option C<--use-xsloader> to force use of
+C<XSLoader> even in backwards compatible modules.
+
+The handling of authors' names that had apostrophes has been fixed.
+
+Any enums with negative values are now skipped.
+
+=item perlivp
+
+C<perlivp> no longer checks for F<*.ph> files by default. Use the new C<-a>
+option to run I<all> tests.
+
+=item find2perl
C<find2perl> now assumes C<-print> as a default action. Previously, it
needed to be specified explicitly.
=head1 New Documentation
+The new L<perlglossary> manpage is a glossary of terms used in the Perl
+documentation, technical and otherwise, kindly provided by O'Reilly Media,
+Inc.
+
The long-existing feature of C</(?{...})/> regexps setting C<$_> and pos()
is now documented.
=over 4
-=item *
+=item In-place sorting
Sorting arrays in place (C<@a = sort @a>) is now optimized to avoid
making a temporary copy of the array.
Likewise, C<reverse sort ...> is now optimized to sort in reverse,
avoiding the generation of a temporary intermediate list.
-=item *
+=item Lexical array access
Access to elements of lexical arrays via a numeric constant between 0 and
255 is now faster. (This used to be only the case for global arrays.)
-=item *
+=item Trie optimization
The regexp engine now implements the trie optimization : it's able to
factorize common prefixes and suffixes in regular expressions. A new
special variable, ${^RE_TRIE_MAXBUF}, has been added to fine-tune this
optimization.
+=item XS-assisted SWASHGET
+
+Some pure-perl code that perl was using to retrieve Unicode properties and
+transliteration mappings has been reimplemented in XS.
+
+=item Constant subroutines
+
+The interpreter internals now support a far more memory efficient form of
+inlineable constants. Storing a reference to a constant value in a symbol
+table is equivalent to a full typeglob referencing a constant subroutine,
+but using about 400 bytes less memory. This proxy constant subroutine is
+automatically upgraded to a real typeglob with subroutine if necessary.
+The approach taken is analogous to the existing space optimisation for
+subroutine stub declarations, which are stored as plain scalars in place
+of the full typeglob.
+
+Several of the core modules have been converted to use this feature for
+their system dependent constants - as a result C<use POSIX;> now takes about
+200K less memory.
+
+=item C<PERL_DONT_CREATE_GVSV>
+
+The new compilation flag C<PERL_DONT_CREATE_GVSV>, introduced as an option
+in perl 5.8.8, is turned on by default in perl 5.9.3. It prevents perl
+from creating an empty scalar with every new typeglob. See L<perl588delta>
+for details.
+
+=item Weak references are cheaper
+
+Weak reference creation is now I<O(1)> rather than I<O(n)>, courtesy of
+Nicholas Clark. Weak reference deletion remains I<O(n)>, but if deletion only
+happens at program exit, it may be skipped completely.
+
+=item sort() enhancements
+
+Salvador FandiƱo provided improvements to reduce the memory usage of C<sort>
+and to speed up some cases.
+
=back
=head1 Installation and Configuration Improvements
+=head2 Compilation improvements
+
Run-time customization of @INC can be enabled by passing the
C<-Dusesitecustomize> flag to configure. When enabled, this will make perl
run F<$sitelibexp/sitecustomize.pl> before anything else. This script can
There is alpha support for relocatable @INC entries.
+Parallel makes should work properly now, although there may still be problems
+if C<make test> is instructed to run in parallel.
+
+Building with Borland's compilers on Win32 should work more smoothly. In
+particular Steve Hay has worked to side step many warnings emitted by their
+compilers and at least one C compiler internal error.
+
+Perl extensions on Windows now can be statically built into the Perl DLL,
+thanks to a work by Vadim Konovalov.
+
+=head2 New Or Improved Platforms
+
+Perl is being ported to Symbian OS. See L<perlsymbian> for more
+information.
+
+The VMS port has been improved. See L<perlvms>.
+
+DynaLoader::dl_unload_file() now works on Windows.
+
+Portability of Perl on various recent compilers on Windows has been
+improved (Borland C++, Visual C++ 7.0).
+
+=head2 Module auxiliary files
+
+README files and changelogs for CPAN modules bundled with perl are no
+longer installed.
+
=head1 Selected Bug Fixes
+=over 4
+
+=item strictures in regexp-eval blocks
+
C<strict> wasn't in effect in regexp-eval blocks (C</(?{...})/>).
-C<$Foo::_> was wrongly forced as C<$main::_>.
+=item C<defined $$x>
+
+C<use strict "refs"> was ignoring taking a hard reference in an argument
+to defined(), as in :
+
+ use strict "refs";
+ my $x = "foo";
+ if (defined $$x) {...}
+
+This now correctly produces the run-time error C<Can't use string as a
+SCALAR ref while "strict refs" in use>.
+
+=item Calling CORE::require()
+
+CORE::require() and CORE::do() were always parsed as require() and do()
+when they were overridden. This is now fixed.
+
+=item Subscripts of slices
+
+You can now use a non-arrowed form for chained subscripts after a list
+slice, like in:
+
+ ({foo => "bar"})[0]{foo}
+
+This used to be a syntax error; a C<< -> >> was required.
+
+=item C<no warnings 'category'> works correctly with -w
+
+Previously when running with warnings enabled globally via C<-w>, selective
+disabling of specific warning categories would actually turn off all warnings.
+This is now fixed; now C<no warnings 'io';> will only turn off warnings in the
+C<io> class. Previously it would erroneously turn off all warnings.
+
+=item threads and memory usage
+
+Several memory leaks in ithreads were closed. Also, ithreads were made
+less memory-intensive.
+
+=item chr() and negative values
+
+chr() on a negative value now gives C<\x{FFFD}>, the Unicode replacement
+character, unless when the C<bytes> pragma is in effect, where the low
+eight bytes of the value are used.
+
+=back
=head1 New or Changed Diagnostics
+=over 4
+
+=item Deprecated use of my() in false conditional
+
A new deprecation warning, I<Deprecated use of my() in false conditional>,
has been added, to warn against the use of the dubious and deprecated
construct
See L<perldiag>. Use C<state> variables instead.
+=item !=~ should be !~
+
A new warning, C<!=~ should be !~>, is emitted to prevent this misspelling
of the non-matching operator.
+=item Newline in left-justified string
+
The warning I<Newline in left-justified string> has been removed.
+=item Too late for "-T" option
+
The error I<Too late for "-T" option> has been reformulated to be more
descriptive.
+=item "%s" variable %s masks earlier declaration
+
+This warning is now emitted in more consistent cases; in short, when one
+of the declarations involved is a C<my> variable:
+
+ my $x; my $x; # warns
+ my $x; our $x; # warns
+ our $x; my $x; # warns
+
+On the other hand, the following:
+
+ our $x; our $x;
+
+now gives a C<"our" variable %s redeclared> warning.
+
+=item readdir()/closedir()/etc. attempted on invalid dirhandle
+
+These new warnings are now emitted when a dirhandle is used but is
+either closed or not really a dirhandle.
+
+=item perl -V
+
C<perl -V> has several improvements, making it more useable from shell
scripts to get the value of configuration variables. See L<perlrun> for
details.
+=back
+
=head1 Changed Internals
+In general, the source code of perl has been refactored, tied up, and
+optimized in many places. Also, memory management and allocation has been
+improved in a couple of points.
+
=head2 Reordering of SVt_* constants
The relative ordering of constants that define the various types of C<SV>
perl's parser is now generated by bison (it used to be generated by
byacc.) As a result, it seems to be a bit more robust.
+Also, Dave Mitchell improved the lexer debugging output under C<-DT>.
+
+=head2 Use of C<const>
+
+Andy Lester supplied many improvements to determine which function
+parameters and local variables could actually be declared C<const> to the C
+compiler. Steve Peters provided new C<*_set> macros and reworked the core to
+use these rather than assigning to macros in LVALUE context.
+
+=head2 Mathoms
+
+A new file, F<mathoms.c>, has been added. It contains functions that are
+no longer used in the perl core, but that remain available for binary or
+source compatibility reasons. However, those functions will not be
+compiled in if you add C<-DNO_MATHOMS> in the compiler flags.
+
+=head2 C<AvFLAGS> has been removed
+
+The C<AvFLAGS> macro has been removed.
+
+=head2 C<av_*> changes
+
+The C<av_*()> functions, used to manipulate arrays, no longer accept null
+C<AV*> parameters.
+
+=head2 B:: modules inheritance changed
+
+The inheritance hierarchy of C<B::> modules has changed; C<B::NV> now
+inherits from C<B::SV> (it used to inherit from C<B::IV>).
+
=head1 New Tests
=head1 Known Problems