=encoding utf8

=head1 NAME

perl588delta - what is new for perl v5.8.8

=head1 DESCRIPTION

This document describes differences between the 5.8.7 release and
the 5.8.8 release.

=head1 Incompatible Changes

There are no changes intentionally incompatible with 5.8.7. If any exist,
they are bugs and reports are welcome.

=head1 Core Enhancements

=over

=item *

C<chdir>, C<chmod> and C<chown> can now work on filehandles as well as
filenames, if the system supports respectively C<fchdir>, C<fchmod> and
C<fchown>, thanks to a patch provided by Gisle Aas.

=back

=head1 Modules and Pragmata

=over

=item *

C<Attribute::Handlers> upgraded to version 0.78_02

=over

=item *

Documentation typo fix

=back

=item *

C<attrs> upgraded to version 1.02

=over

=item *

Internal cleanup only

=back

=item *

C<autouse> upgraded to version 1.05

=over

=item *

Simplified implementation

=back

=item *

C<B> upgraded to version 1.09_01

=over

=item *

The inheritance hierarchy of the C<B::> modules has been corrected;
C<B::NV> now inherits from C<B::SV> (instead of C<B::IV>).

=back

=item *

C<blib> upgraded to version 1.03

=over

=item *

Documentation typo fix

=back

=item *

C<ByteLoader> upgraded to version 0.06

=over

=item *

Internal cleanup

=back

=item *

C<CGI> upgraded to version 3.15

=over

=item *

Extraneous "?" from C<self_url()> removed

=item *

C<scrolling_list()> select attribute fixed

=item *

C<virtual_port> now works properly with the https protocol

=item *

C<upload_hook()> and C<append()> now works in function-oriented mode

=item *

C<POST_MAX> doesn't cause the client to hang any more

=item *

Automatic tab indexes are now disabled and new C<-tabindex> pragma has
been added to turn automatic indexes back on

=item *

C<end_form()> doesn't emit empty (and non-validating) C<< <div> >>

=item *

C<CGI::Carp> works better in certain mod_perl configurations

=item *

Setting C<$CGI::TMPDIRECTORY> is now effective

=item *

Enhanced documentation

=back

=item *

C<charnames> upgraded to version 1.05

=over

=item *

C<viacode()> now accept hex strings and has been optimized.

=back

=item *

C<CPAN> upgraded to version 1.76_02

=over

=item *

1 minor bug fix for Win32

=back

=item *

C<Cwd> upgraded to version 3.12

=over

=item *

C<canonpath()> on Win32 now collapses F<foo\..> sections correctly.

=item *

Improved behaviour on Symbian OS.

=item *

Enhanced documentation and typo fixes

=item *

Internal cleanup

=back

=item *

C<Data::Dumper> upgraded to version 2.121_08

=over

=item *

A problem where C<Data::Dumper> would sometimes update the iterator state
of hashes has been fixed

=item *

Numeric labels now work

=item *

Internal cleanup

=back

=item *

C<DB> upgraded to version 1.01

=over

=item *

A problem where the state of the regexp engine would sometimes get clobbered when running
under the debugger has been fixed.

=back

=item *

C<DB_File> upgraded to version 1.814

=over

=item *

Adds support for Berkeley DB 4.4.

=back

=item *

C<Devel::DProf> upgraded to version 20050603.00

=over

=item *

Internal cleanup

=back

=item *

C<Devel::Peek> upgraded to version 1.03

=over

=item *

Internal cleanup

=back

=item *

C<Devel::PPPort> upgraded to version 3.06_01

=over

=item *

C<--compat-version> argument checking has been improved

=item *

Files passed on the command line are filtered by default

=item *

C<--nofilter> option to override the filtering has been added

=item *

Enhanced documentation

=back

=item *

C<diagnostics> upgraded to version 1.15

=over

=item *

Documentation typo fix

=back

=item *

C<Digest> upgraded to version 1.14

=over

=item *

The constructor now knows which module implements SHA-224

=item *

Documentation tweaks and typo fixes

=back

=item *

C<Digest::MD5> upgraded to version 2.36

=over

=item *

C<XSLoader> is now used for faster loading

=item *

Enhanced documentation including MD5 weaknesses discovered lately

=back

=item *

C<Dumpvalue> upgraded to version 1.12

=over

=item *

Documentation fix

=back

=item *

C<DynaLoader> upgraded but unfortunately we're not able to increment its version number :-(

=over

=item *

Implements C<dl_unload_file> on Win32

=item *

Internal cleanup

=item *

C<XSLoader> 0.06 incorporated; small optimisation for calling
C<bootstrap_inherit()> and documentation enhancements.

=back

=item *

C<Encode> upgraded to version 2.12

=over

=item *

A coderef is now acceptable for C<CHECK>!

=item *

3 new characters added to the ISO-8859-7 encoding

=item *

New encoding C<MIME-Header-ISO_2022_JP> added

=item *

Problem with partial characters and C<< encoding(utf-8-strict) >> fixed.

=item *

Documentation enhancements and typo fixes

=back

=item *

C<English> upgraded to version 1.02

=over

=item *

the C<< $COMPILING >> variable has been added

=back

=item *

C<ExtUtils::Constant> upgraded to version 0.17

=over

=item *

Improved compatibility with older versions of perl

=back

=item *

C<ExtUtils::MakeMaker> upgraded to version 6.30 (was 6.17)

=over

=item *

Too much to list here;  see L<http://search.cpan.org/dist/ExtUtils-MakeMaker/Changes>

=back

=item *

C<File::Basename> upgraded to version 2.74, with changes contributed by Michael Schwern.

=over

=item *

Documentation clarified and errors corrected.

=item *

C<basename> now strips trailing path separators before processing the name.

=item *

C<basename> now returns C</> for parameter C</>, to make C<basename>
consistent with the shell utility of the same name.

=item *

The suffix is no longer stripped if it is identical to the remaining characters
in the name, again for consistency with the shell utility.

=item *

Some internal code cleanup.

=back

=item *

C<File::Copy> upgraded to version 2.09

=over

=item *

Copying a file onto itself used to fail.

=item *

Moving a file between file systems now preserves the access and
modification time stamps

=back

=item *

C<File::Find> upgraded to version 1.10

=over

=item *

Win32 portability fixes

=item *

Enhanced documentation

=back

=item *

C<File::Glob> upgraded to version 1.05

=over

=item *

Internal cleanup

=back

=item *

C<File::Path> upgraded to version 1.08

=over

=item *

C<mkpath> now preserves C<errno> when C<mkdir> fails

=back

=item *

C<File::Spec> upgraded to version 3.12

=over

=item *

C<File::Spec->rootdir()> now returns C<\> on Win32, instead of C</>

=item *

C<$^O> could sometimes become tainted. This has been fixed.

=item *

C<canonpath> on Win32 now collapses C<foo/..> (or C<foo\..>) sections
correctly, rather than doing the "misguided" work it was previously doing.
Note that C<canonpath> on Unix still does B<not> collapse these sections, as
doing so would be incorrect.

=item *

Some documentation improvements

=item *

Some internal code cleanup

=back

=item *

C<FileCache> upgraded to version 1.06

=over

=item *

POD formatting errors in the documentation fixed

=back

=item *

C<Filter::Simple> upgraded to version 0.82

=item *

C<FindBin> upgraded to version 1.47

=over

=item *

Now works better with directories where access rights are more
restrictive than usual.

=back

=item *

C<GDBM_File> upgraded to version 1.08

=over

=item *

Internal cleanup

=back

=item *

C<Getopt::Long> upgraded to version 2.35

=over

=item *

C<prefix_pattern> has now been complemented by a new configuration
option C<long_prefix_pattern> that allows the user to specify what
prefix patterns should have long option style semantics applied.

=item *

Options can now take multiple values at once (experimental)

=item *

Various bug fixes

=back

=item *

C<if> upgraded to version 0.05

=over

=item *

Give more meaningful error messages from C<if> when invoked with a
condition in list context.

=item *

Restore backwards compatibility with earlier versions of perl

=back

=item *

C<IO> upgraded to version 1.22

=over

=item *

Enhanced documentation

=item *

Internal cleanup

=back

=item *

C<IPC::Open2> upgraded to version 1.02

=over

=item *

Enhanced documentation

=back

=item *

C<IPC::Open3> upgraded to version 1.02

=over

=item *

Enhanced documentation

=back

=item *

C<List::Util> upgraded to version 1.18 (was 1.14)

=over

=item *

Fix pure-perl version of C<refaddr> to avoid blessing an un-blessed reference

=item *

Use C<XSLoader> for faster loading

=item *

Fixed various memory leaks

=item *

Internal cleanup and portability fixes

=back

=item *

C<Math::Complex> upgraded to version 1.35

=over

=item *

C<atan2(0, i)> now works, as do all the (computable) complex argument cases

=item *

Fixes for certain bugs in C<make> and C<emake>

=item *

Support returning the I<k>th root directly

=item *

Support C<[2,-3pi/8]> in C<emake>

=item *

Support C<inf> for C<make>/C<emake>

=item *

Document C<make>/C<emake> more visibly

=back

=item *

C<Math::Trig> upgraded to version 1.03

=over

=item *

Add more great circle routines: C<great_circle_waypoint> and
C<great_circle_destination>

=back

=item *

C<MIME::Base64> upgraded to version 3.07

=over

=item *

Use C<XSLoader> for faster loading

=item *

Enhanced documentation

=item *

Internal cleanup

=back

=item *

C<NDBM_File> upgraded to version 1.06

=over

=item *

Enhanced documentation

=back

=item *

C<ODBM_File> upgraded to version 1.06

=over

=item *

Documentation typo fixed

=item *

Internal cleanup

=back

=item *

C<Opcode> upgraded to version 1.06

=over

=item *

Enhanced documentation

=item *

Internal cleanup

=back

=item *

C<open> upgraded to version 1.05

=over

=item *

Enhanced documentation

=back

=item *

C<overload> upgraded to version 1.04

=over

=item *

Enhanced documentation

=back

=item *

C<PerlIO> upgraded to version 1.04

=over

=item *

C<PerlIO::via> iterate over layers properly now

=item *

C<PerlIO::scalar> understands C<< $/ = "" >> now

=item *

C<encoding(utf-8-strict)> with partial characters now works

=item *

Enhanced documentation

=item *

Internal cleanup

=back

=item *

C<Pod::Functions> upgraded to version 1.03

=over

=item *

Documentation typos fixed

=back

=item *

C<Pod::Html> upgraded to version 1.0504

=over

=item *

HTML output will now correctly link
to C<=item>s on the same page, and should be valid XHTML.

=item *

Variable names are recognized as intended

=item *

Documentation typos fixed

=back

=item *

C<Pod::Parser> upgraded to version 1.32

=over

=item *

Allow files that start with C<=head> on the first line

=item *

Win32 portability fix

=item *

Exit status of C<pod2usage> fixed

=item *

New C<-noperldoc> switch for C<pod2usage>

=item *

Arbitrary URL schemes now allowed

=item *

Documentation typos fixed

=back

=item *

C<POSIX> upgraded to version 1.09

=over

=item *

Documentation typos fixed

=item *

Internal cleanup

=back

=item *

C<re> upgraded to version 0.05

=over

=item *

Documentation typo fixed

=back

=item *

C<Safe> upgraded to version 2.12

=over

=item *

Minor documentation enhancement

=back

=item *

C<SDBM_File> upgraded to version 1.05

=over

=item *

Documentation typo fixed

=item *

Internal cleanup

=back

=item *

C<Socket> upgraded to version 1.78

=over

=item *

Internal cleanup

=back

=item *

C<Storable> upgraded to version 2.15

=over

=item *

This includes the C<STORABLE_attach> hook functionality added by
Adam Kennedy, and more frugal memory requirements when storing under C<ithreads>, by
using the C<ithreads> cloning tracking code.

=back

=item *

C<Switch> upgraded to version 2.10_01

=over

=item *

Documentation typos fixed

=back

=item *

C<Sys::Syslog> upgraded to version 0.13

=over

=item *

Now provides numeric macros and meaningful C<Exporter> tags.

=item *

No longer uses C<Sys::Hostname> as it may provide useless values in
unconfigured network environments, so instead uses C<INADDR_LOOPBACK> directly.

=item *

C<syslog()> now uses local timestamp.

=item *

C<setlogmask()> now behaves like its C counterpart.

=item *

C<setlogsock()> will now C<croak()> as documented.

=item *

Improved error and warnings messages.

=item *

Improved documentation.

=back

=item *

C<Term::ANSIColor> upgraded to version 1.10

=over

=item *

Fixes a bug in C<colored> when C<$EACHLINE> is set that caused it to not color
lines consisting solely of 0 (literal zero).

=item *

Improved tests.

=back

=item *

C<Term::ReadLine> upgraded to version 1.02

=over

=item *

Documentation tweaks

=back

=item *

C<Test::Harness> upgraded to version 2.56 (was 2.48)

=over

=item *

The C<Test::Harness> timer is now off by default.

=item *

Now shows elapsed time in milliseconds.

=item *

Various bug fixes

=back

=item *

C<Test::Simple> upgraded to version 0.62 (was 0.54)

=over

=item *

C<is_deeply()> no longer fails to work for many cases

=item *

Various minor bug fixes

=item *

Documentation enhancements

=back

=item *

C<Text::Tabs> upgraded to version 2005.0824

=over

=item *

Provides a faster implementation of C<expand>

=back

=item *

C<Text::Wrap> upgraded to version 2005.082401

=over

=item *

Adds C<$Text::Wrap::separator2>, which allows you to preserve existing newlines
but add line-breaks with some other string.

=back

=item *

C<threads> upgraded to version 1.07

=over

=item *

C<threads> will now honour C<no warnings 'threads'>

=item *

A thread's interpreter is now freed after C<< $t->join() >> rather than after
C<undef $t>, which should fix some C<ithreads> memory leaks. (Fixed by Dave
Mitchell)

=item *

Some documentation typo fixes.

=back

=item *

C<threads::shared> upgraded to version 0.94

=over

=item *

Documentation changes only

=item *

Note: An improved implementation of C<threads::shared> is available on
CPAN - this will be merged into 5.8.9 if it proves stable.

=back

=item *

C<Tie::Hash> upgraded to version 1.02

=over

=item *

Documentation typo fixed

=back

=item *

C<Time::HiRes> upgraded to version 1.86 (was 1.66)

=over

=item *

C<clock_nanosleep()> and C<clock()> functions added

=item *

Support for the POSIX C<clock_gettime()> and C<clock_getres()> has been added

=item *

Return C<undef> or an empty list if the C C<gettimeofday()> function fails

=item *

Improved C<nanosleep> detection

=item *

Internal cleanup

=item *

Enhanced documentation

=back

=item *

C<Unicode::Collate> upgraded to version 0.52

=over

=item *

Now implements UCA Revision 14 (based on Unicode 4.1.0).

=item *

C<Unicode::Collate->new> method no longer overwrites user's C<$_>

=item *

Enhanced documentation

=back

=item *

C<Unicode::UCD> upgraded to version 0.24

=over

=item *

Documentation typos fixed

=back

=item *

C<User::grent> upgraded to version 1.01

=over

=item *

Documentation typo fixed

=back

=item *

C<utf8> upgraded to version 1.06

=over

=item *

Documentation typos fixed

=back

=item *

C<vmsish> upgraded to version 1.02

=over

=item *

Documentation typos fixed

=back

=item *

C<warnings> upgraded to version 1.05

=over

=item *

Gentler messing with C<Carp::> internals

=item *

Internal cleanup

=item *

Documentation update

=back

=item *

C<Win32> upgraded to version 0.2601

=for cynics And how many perl 5.8.x versions can I release ahead of Vista?

=over

=item *

Provides Windows Vista support to C<Win32::GetOSName>

=item *

Documentation enhancements

=back

=item *

C<XS::Typemap> upgraded to version 0.02

=over

=item *

Internal cleanup

=back

=back

=head1 Utility Changes

=head2 C<h2xs> enhancements

C<h2xs> implements 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.

=head2 C<perlivp> enhancements

C<perlivp> implements new option C<-a> and will not check for F<*.ph>
files by default any more.  Use the C<-a> option to run I<all> tests.

=head1 New Documentation

The L<perlglossary> manpage is a glossary of terms used in the Perl
documentation, technical and otherwise, kindly provided by O'Reilly Media,
inc.

=head1 Performance Enhancements

=over 4

=item *

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 *

Salvador Fandiño provided improvements to reduce the memory usage of C<sort>
and to speed up some cases.

=item *

Jarkko Hietaniemi and Andy Lester worked to mark as much data as possible in
the C source files as C<static>, to increase the proportion of the executable
file that the operating system can share between process, and thus reduce
real memory usage on multi-user systems.

=back

=head1 Installation and Configuration Improvements

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.

C<Configure> will now detect C<clearenv> and C<unsetenv>, thanks to a patch
from Alan Burlison. It will also probe for C<futimes> and whether C<sprintf>
correctly returns the length of the formatted string, which will both be used
in perl 5.8.9.

There are improved hints for next-3.0, vmesa, IX, Darwin, Solaris, Linux,
DEC/OSF, HP-UX and MPE/iX

Perl extensions on Windows now can be statically built into the Perl DLL,
thanks to a work by Vadim Konovalov. (This improvement was actually in 5.8.7,
but was accidentally omitted from L<perl587delta>).

=head1 Selected Bug Fixes

=head2 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.

This bug fix may cause some programs to start correctly issuing warnings.

=head2 Remove over-optimisation

Perl 5.8.4 introduced a change so that assignments of C<undef> to a
scalar, or of an empty list to an array or a hash, were optimised away. As
this could cause problems when C<goto> jumps were involved, this change
has been backed out.

=head2 sprintf() fixes

Using the sprintf() function with some formats could lead to a buffer
overflow in some specific cases. This has been fixed, along with several
other bugs, notably in bounds checking.

In related fixes, it was possible for badly written code that did not follow
the documentation of C<Sys::Syslog> to have formatting vulnerabilities.
C<Sys::Syslog> has been changed to protect people from poor quality third
party code.

=head2 Debugger and Unicode slowdown

It had been reported that running under perl's debugger when processing
Unicode data could cause unexpectedly large slowdowns. The most likely cause
of this was identified and fixed by Nicholas Clark.

=head2 Smaller fixes

=over 4

=item *

C<FindBin> now works better with directories where access rights are more
restrictive than usual.

=item *

Several memory leaks in ithreads were closed. An improved implementation of
C<threads::shared> is available on CPAN - this will be merged into 5.8.9 if
it proves stable.

=item *

Trailing spaces are now trimmed from C<$!> and C<$^E>.

=item *

Operations that require perl to read a process's list of groups, such as reads
of C<$(> and C<$)>, now dynamically allocate memory rather than using a
fixed sized array. The fixed size array could cause C stack exhaustion on
systems configured to use large numbers of groups.

=item *

C<PerlIO::scalar> now works better with non-default C<$/> settings.

=item *

You can now use the C<x> operator to repeat a C<qw//> list. This used
to raise a syntax error.

=item *

The debugger now traces correctly execution in eval("")uated code that
contains #line directives.

=item *

The value of the C<open> pragma is no longer ignored for three-argument
opens.

=item *

The optimisation of C<for (reverse @a)> introduced in perl 5.8.6 could
misbehave when the array had undefined elements and was used in LVALUE
context. Dave Mitchell provided a fix.

=item *

Some case insensitive matches between UTF-8 encoded data and 8 bit regexps,
and vice versa, could give malformed character warnings. These have been
fixed by Dave Mitchell and Yves Orton.

=item *

C<lcfirst> and C<ucfirst> could corrupt the string for certain cases where
the length UTF-8 encoding of the string in lower case, upper case or title
case differed. This was fixed by Nicholas Clark.

=item *

Perl will now use the C library calls C<unsetenv> and C<clearenv> if present
to delete keys from C<%ENV> and delete C<%ENV> entirely, thanks to a patch
from Alan Burlison.

=back

=head1 New or Changed Diagnostics

=head2 Attempt to set length of freed array

This is a new warning, produced in situations such as this:

    $r = do {my @a; \$#a};
    $$r = 503;

=head2 Non-string passed as bitmask

This is a new warning, produced when number has been passed as a argument to
select(), instead of a bitmask.

    # Wrong, will now warn
    $rin = fileno(STDIN);
    ($nfound,$timeleft) = select($rout=$rin, undef, undef, $timeout);
    
    # Should be
    $rin = '';
    vec($rin,fileno(STDIN),1) = 1;
    ($nfound,$timeleft) = select($rout=$rin, undef, undef, $timeout);

=head2 Search pattern not terminated or ternary operator parsed as search pattern

This syntax error indicates that the lexer couldn't find the final
delimiter of a C<?PATTERN?> construct. Mentioning the ternary operator in
this error message makes it easier to diagnose syntax errors.

=head1 Changed Internals

There has been a fair amount of refactoring of the C<C> source code, partly to
make it tidier and more maintainable. The resulting object code and the
C<perl> binary may well be smaller than 5.8.7, in particular due to a change
contributed by Dave Mitchell which reworked the warnings code to be
significantly smaller. Apart from being smaller and possibly faster, there
should be no user-detectable changes.

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.

Dave Mitchell improved the lexer debugging output under C<-DT>

Nicholas Clark changed the string buffer allocation so that it is now rounded
up to the next multiple of 4 (or 8 on platforms with 64 bit pointers). This
should reduce the number of calls to C<realloc> without actually using any
extra memory.

The C<HV>'s array of C<HE*>s is now allocated at the correct (minimal) size,
thanks to another change by Nicholas Clark. Compile with
C<-DPERL_USE_LARGE_HV_ALLOC> to use the old, sloppier, default.

For XS or embedding debugging purposes, if perl is compiled with
C<-DDEBUG_LEAKING_SCALARS_FORK_DUMP> in addition to
C<-DDEBUG_LEAKING_SCALARS> then a child process is C<fork>ed just before
global destruction, which is used to display the values of any scalars
found to have leaked at the end of global destruction. Without this, the
scalars have already been freed sufficiently at the point of detection that
it is impossible to produce any meaningful dump of their contents.  This
feature was implemented by the indefatigable Nicholas Clark, based on an idea
by Mike Giroux.

=head1 Platform Specific Problems

The optimiser on HP-UX 11.23 (Itanium 2) is currently partly disabled (scaled
down to +O1) when using HP C-ANSI-C; the cause of problems at higher
optimisation levels is still unclear.

There are a handful of remaining test failures on VMS, mostly due to
test fixes and minor module tweaks with too many dependencies to
integrate into this release from the development stream, where they have
all been corrected.  The following is a list of expected failures with
the patch number of the fix where that is known:

    ext/Devel/PPPort/t/ppphtest.t  #26913
    ext/List/Util/t/p_tainted.t    #26912
    lib/ExtUtils/t/PL_FILES.t      #26813
    lib/ExtUtils/t/basic.t         #26813
    t/io/fs.t
    t/op/cmp.t

=head1 Reporting Bugs

If you find what you think is a bug, you might check the articles
recently posted to the comp.lang.perl.misc newsgroup and the perl
bug database at http://bugs.perl.org.  There may also be
information at http://www.perl.org, the Perl Home Page.

If you believe you have an unreported bug, please run the B<perlbug>
program included with your release.  Be 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 perlbug@perl.org to be
analysed by the Perl porting team.  You can browse and search
the Perl 5 bugs at http://bugs.perl.org/

=head1 SEE ALSO

The F<Changes> file for exhaustive details on what changed.

The F<INSTALL> file for how to build Perl.

The F<README> file for general stuff.

The F<Artistic> and F<Copying> files for copyright information.

=cut
