This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Work around an HTML display issue
[perl5.git] / pod / perldelta.pod
index 9408b3b..5ffd912 100644 (file)
 =encoding utf8
 
-=for comment
-This has been completed up to 0aae26c14, except for:
-803e389        rurban  CYG17 utf8 paths
-d9298c1        rurban  mymalloc isn't thread safe
-
 =head1 NAME
 
-[ this is a template for a new perldelta file. Any text flagged as
-XXX needs to be processed before release. ]
-
-perldelta - what is new for perl v5.15.8
+perldelta - what is new for perl v5.15.9
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.15.7 release and
-the 5.15.8 release.
+This document describes differences between the 5.15.8 release and
+the 5.15.9 release.
 
-If you are upgrading from an earlier release such as 5.15.6, first read
-L<perl5157delta>, which describes differences between 5.15.6 and
-5.15.7.
+If you are upgrading from an earlier release such as 5.15.7, first read
+L<perl5158delta>, which describes differences between 5.15.7 and
+5.15.8.
 
 =head1 Notice
 
-XXX Any important notices here
+This space intentionally left blank.
 
 =head1 Core Enhancements
 
-XXX New core language features go here. Summarise user-visible core language
-enhancements. Particularly prominent performance optimisations could go
-here, but most should go in the L</Performance Enhancements> section.
-
-[ List each enhancement as a =head2 entry ]
-
-=head2 Improved ability to mix locales and Unicode, including UTF-8 locales
-
-An optional parameter has been added to C<use locale>
-
- use locale ':not_characters';
-
-which tells Perl to use all but the C<LC_CTYPE> and C<LC_COLLATE>
-portions of the current locale.  Instead, the character set is assumed
-to be Unicode.  This allows locales and Unicode to be seamlessly mixed,
-including the increasingly frequent UTF-8 locales.  When using this
-hybrid form of locales, the C<:locale> layer to the L<open> pragma can
-be used to interface with the file system, and there are CPAN modules
-available for ARGV and environment variable conversions.
-
-Full details are in L<perllocale>.
-
-=head2 New function C<fc> and corresponding escape sequence C<\F> for Unicode foldcase
+=head2 C<< no feature; >> now means reset to default
 
-Unicode foldcase is an extension to lowercase that gives better results
-when comparing two strings case-insensitively.  It has long been used
-internally in regular expression C</i> matching.  Now it is available
-explicitly through the new C<fc> function call (enabled by
-S<C<"use feature 'fc'">>, or C<use v5.16>, or explicitly callable via
-C<CORE::fc>) or through the new C<\F> sequence in double-quotish
-strings.
-
-Full details are in L<perlfunc/fc>.
-
-=head2 C<_> in subroutine prototypes
-
-The C<_> character in subroutine prototypes is now allowed before C<@> or
-C<%>.
+C<< no feature >> now resets to the default feature set.  To disable all
+features (which is likely to be a pretty special-purpose request, since
+it presumably won't match any named set of semantics) you can now  
+write C<< no feature ':all' >>.
 
 =head1 Security
 
-XXX Any security-related notices go here.  In particular, any security
-vulnerabilities closed should be noted here rather than in the
-L</Selected Bug Fixes> section.
+=head2 Malformed UTF-8 input could cause attempts to read beyond the end of the buffer
 
-[ List each security issue as a =head2 entry ]
+Two new XS-accessible functions, C<utf8_to_uvchr_buf()> and
+C<utf8_to_uvuni_buf()> are now available to prevent this, and the Perl
+core has been converted to use them.
+See L</Internal Changes>.
 
 =head1 Incompatible Changes
 
-XXX For a release on a stable branch, this section aspires to be:
-
-    There are no changes intentionally incompatible with 5.XXX.XXX
-    If any exist, they are bugs, and we request that you submit a
-    report.  See L</Reporting Bugs> below.
-
-[ List each incompatible change as a =head2 entry ]
-
-=head2 Special blocks called in void context
-
-Special blocks (C<BEGIN>, C<CHECK>, C<INIT>, C<UNITCHECK>, C<END>) are now
-called in void context.  This avoids wasteful copying of the result of the
-last statement [perl #108794].
-
-=head2 The C<overloading> pragma and regexp objects
-
-With C<no overloading>, regular expression objects returned by C<qr//> are
-now stringified as "Regexp=REGEXP(0xbe600d)" instead of the regular
-expression itself [perl #108780].
+=head2 C<< no feature; >>
 
-=head2 Two XS typemap Entries removed
-
-Two presumably unused XS typemap entries have been removed from the
-core typemap: T_DATAUNIT and T_CALLBACK. If you are, against all odds,
-a user of these, please see the instructions on how to regain them
-in L<perlxstypemap>.
+C<no feature;> now means reset to default.
 
 =head1 Deprecations
 
-XXX Any deprecated features, syntax, modules etc. should be listed here.
-In particular, deprecated modules should be listed here even if they are
-listed as an updated module in the L</Modules and Pragmata> section.
+=head2 Literal C<< "{" >> characters in regular expressions.
 
-[ List each deprecation as a =head2 entry ]
+It has been documented that the current plans include requiring a
+literal C<< "{" >> to be escaped: 5.18 will emit deprecation warnings,
+and it will be required in 5.20.
 
-=head1 Performance Enhancements
+=head2 XS functions C<utf8_to_uvchr()> and C<utf8_to_uvuni()>
 
-XXX Changes which enhance performance without changing behaviour go here. There
-may well be none in a stable release.
+Use C<utf8_to_uvchr_buf()> and C<utf8_to_uvuni_buf()> instead.
+See L</Internal Changes>.
 
-[ List each enhancement as a =item entry ]
+=head1 Performance Enhancements
 
 =over 4
 
 =item *
 
-XXX
+Fix a slowdown in freeing nested hashes. This may speedup the exit of 
+certain programs.
 
 =back
 
 =head1 Modules and Pragmata
 
-XXX All changes to installed files in F<cpan/>, F<dist/>, F<ext/> and F<lib/>
-go here.  If Module::CoreList is updated, generate an initial draft of the
-following sections using F<Porting/corelist-perldelta.pl>, which prints stub
-entries to STDOUT.  Results can be pasted in place of the '=head2' entries
-below.  A paragraph summary for important changes should then be added by hand.
-In an ideal world, dual-life modules would have a F<Changes> file that could be
-cribbed.
-
-[ Within each section, list entries as a =item entry ]
-
-=head2 New Modules and Pragmata
+=head2 Updated Modules and Pragmata
 
 =over 4
 
 =item *
 
-The C<mmap> PerlIO layer is no longer implemented by perl itself, but has
-been moved out into the new L<PerlIO::mmap> module.
+C<attributes> has been upgraded from version 0.17 to 0.18.
 
 =item *
 
-L<IO::Socket::IP>, a drop-in replacement for L<IO::Socket::INET> that
-supports both C<IPv4> and C<IPv6>, has been added as a dual-life module.
-
-=back
-
-=head2 Updated Modules and Pragmata
-
-=over 4
+C<charnames> has been upgraded from version 1.29 to 1.30.
 
 =item *
 
-L<arybase> has been upgraded from version 0.03 to version 0.04.
+C<feature> has been upgraded from version 1.26 to 1.27.
 
-List slices no longer modify items on the stack belonging to outer lists
-[perl #109570].
+C<no feature;> now means reset to default. The code has been refactored
+to reduce duplication.
 
 =item *
 
-L<B> has been upgraded from version 1.33 to version 1.34.
-
-C<B::COP> now has a C<stashflags> method, corresponding to a new internal
-field added in 5.15.4 [perl #108860].
+C<B::Deparse> has been upgraded from version 1.12 to 1.13.
 
 =item *
 
-L<Carp> has been upgraded from version 1.24 to version 1.25.
-
-It now puts a dot after the file and line number, just like errors from
-C<die> [perl #106538].
+C<B::Lint> has been upgraded from version 1.13 to 1.14.
 
 =item *
 
-L<Compress::Raw::Bzip2> has been upgraded from version 2.045 to version 2.048.
+C<CPAN::Meta> has been upgraded from version 2.120351 to 2.120630.
 
 =item *
 
-L<Compress::Raw::Zlib> has been upgraded from version 2.045 to version 2.048.
+C<CPANPLUS> has been upgraded from version 0.9118 to 0.9121.
 
 =item *
 
-L<Compress::Zlib> has been upgraded from version 2.046 to version 2.048.
+C<Data::Dumper> has been upgraded from version 2.135_05 to 2.135_06.
 
 =item *
 
-L<DB_File> has been upgraded from version 1.824 to version 1.826.
+C<Digest::SHA> has been upgraded from version 5.70 to 5.71.
 
 =item *
 
-L<diagnostics> has been upgraded from version 1.27 to version 1.28.
-
-When searching for F<perldiag.pod>, it no longer uses paths that were only
-relevant on Perl 5.004 and earlier.
+C<ExtUtils::CBuilder> has been upgraded from version 0.280205 to 0.280206.
 
 =item *
 
-L<ExtUtils::ParseXS> has been upgraded from version 3.12 to version 3.15.
-
-The new version comes with important tools for sharing typemaps between
-different CPAN distributions.
+C<HTTP::Tiny> has been upgraded from version 0.016 to 0.017.
 
 =item *
 
-L<File::Copy> has been upgraded from version 2.21 to version 2.23.
-
-It no longer emits warnings when copying files with newlines in their names
-[perl #109104].
+C<Module::CoreList> has been upgraded from version 2.60 to 2.65.
 
 =item *
 
-L<IPC::Cmd> has been upgraded from version 0.72 to version 0.76.
+C<Pod::Html> has been upgraded from version 1.14 to 1.1501.
 
 =item *
 
-L<Math::Complex> has been upgraded from version 1.58 to version 1.59.
-
-This avoids a new core warning.
+C<Pod::Perldoc> has been upgraded from version 3.15_15 to 3.17.
 
 =item *
 
-L<Pod::Parser> has been upgraded from version 1.37 to version 1.51.
+C<Pod::Simple> has been upgraded from version 3.19 to 3.20.
 
 =item *
 
-L<Term::ReadLine> has been upgraded from version 1.07 to version 1.08.
-
-Its C<tkRunning> method now supports L<AnyEvent> event loops, and not just
-L<Tk>.  A more general mechanism has been proposed, so this may be reverted
-before Perl 5.16 [perl #108470].
+C<Socket> has been upgraded from version 1.98 to 2.000.
 
 =item *
 
-L<Time::HiRes>  has been upgraded from version 1.9724 to version 1.9725.
+C<Term::ReadLine> has been upgraded from version 1.08 to 1.09.
 
-C<Time::HiRes::stat()> no longer corrupts the Perl stack.
+C<< Term::ReadLine >> now optionally integrates with event loops
+other than C<< Tk >>.
 
 =item *
 
-L<Unicode::UCD> has been upgraded from version 0.39 to 0.40.
+C<Unicode::Collate> has been upgraded from version 0.87 to 0.89.
 
-The only change is to fix a formatting error in the Pod.
+=item *
 
-=back
+C<Unicode::Normalize> has been upgraded from version 1.13 to 1.14.
 
-=head2 Removed Modules and Pragmata
+=item *
 
-=over 4
+C<Unicode::UCD> has been upgraded from version 0.41 to 0.42.
 
 =item *
 
-XXX
+C<XS::APItest> has been upgraded from version 0.36 to 0.37.
 
 =back
 
-=head1 Documentation
-
-XXX Changes to files in F<pod/> go here.  Consider grouping entries by
-file and be sure to link to the appropriate page, e.g. L<perlfunc>.
-
-=head2 New Documentation
 
-XXX Changes which create B<new> files in F<pod/> go here.
-
-=head3 L<perlxstypemap>
-
-The new manual describes the XS typemapping mechanism in unprecedented
-detail and combines new documentation with information extracted from
-L<perlxs> and the previously unofficial list of all core typemaps.
-
-=head3 L<XXX>
-
-XXX Description of the purpose of the new file here
-
-=head2 Changes to Existing Documentation
-
-XXX Changes which significantly change existing files in F<pod/> go here.
-However, any changes to F<pod/perldiag.pod> should go in the L</Diagnostics>
-section.
-
-=head3 L<XXX>
-
-=over 4
-
-=item *
-
-XXX Description of the change here
+=head1 Documentation
 
-=back
+There has been no significant change in the documentation between 
+5.15.8 and 5.15.9.
 
 =head1 Diagnostics
 
@@ -303,287 +175,194 @@ The following additions or changes have been made to diagnostic output,
 including warnings and fatal error messages.  For the complete list of
 diagnostic messages, see L<perldiag>.
 
-XXX New or changed warnings emitted by the core's C<C> code go here. Also
-include any changes in L<perldiag> that reconcile it to the C<C> code.
-
-[ Within each section, list entries as a =item entry that links to perldiag,
-  e.g.
-
-  =item *
-
-  L<Invalid version object|perldiag/"Invalid version object">
-]
-
 =head2 New Diagnostics
 
-XXX Newly added diagnostic messages go here
-
 =head3 New Errors
 
-=over 4
-
-=item *
-
-XXX L<message|perldiag/"message">
-
-=back
+Compared to 5.15.8, 5.15.9 does not introduce new errors.
 
 =head3 New Warnings
 
-=over 4
-
-=item *
-
-XXX L<message|perldiag/"message">
-
-=back
+Compared to 5.15.8, 5.15.9 does not introduce new warnings, but see
+L</Changes to Existing Diagnostics>
 
 =head2 Changes to Existing Diagnostics
 
-XXX Changes (i.e. rewording) of diagnostic messages go here
-
 =over 4
 
 =item *
 
-XXX Describe change here
+L<lvalue attribute %s already-defined subroutine|perldiag/"lvalue attribute %s already-defined subroutine">, which replaces
+C<< lvalue attribute cannot be removed after the subroutine has been defined >>.
 
 =back
 
 =head1 Utility Changes
 
-XXX Changes to installed programs such as F<perlbug> and F<xsubpp> go
-here. Most of these are built within the directories F<utils> and F<x2p>.
-
-[ List utility changes as a =head3 entry for each utility and =item
-entries for each change
-Use L<XXX> with program names to get proper documentation linking. ]
-
-=head3 L<XXX>
-
-=over 4
-
-=item *
-
-XXX
-
-=back
+No utilities changed between 5.15.8 and 5.15.9.
 
 =head1 Configuration and Compilation
 
-XXX Changes to F<Configure>, F<installperl>, F<installman>, and analogous tools
-go here.  Any other changes to the Perl build process should be listed here.
-However, any platform-specific changes should be listed in the
-L</Platform Support> section, instead.
-
-[ List changes as a =item entry ].
-
 =over 4
 
 =item *
 
-XXX
+C<< perlfunc.html >> is now being generated again. [perl #107870]
 
 =back
 
 =head1 Testing
 
-XXX Any significant changes to the testing of a freshly built perl should be
-listed here.  Changes which create B<new> files in F<t/> go here as do any
-large changes to the testing harness (e.g. when parallel testing was added).
-Changes to existing files in F<t/> aren't worth summarising, although the bugs
-that they represent may be covered elsewhere.
-
-[ List each test improvement as a =item entry ]
-
 =over 4
 
 =item *
 
-XXX
-
-=item *
-
-The test suite for typemaps has been extended to cover a larger fraction of
-the core typemaps.
+F<< t/op/require_37033.t >> has been added, to test that C<require>
+always closes the file handle that it opens. Previously, it had been
+leaking the file handle if it happened to have file descriptor 0, which
+would happen if C<require> was called (explicitly or implicitly) when
+C<STDIN> had been closed.
 
 =back
 
 =head1 Platform Support
 
-XXX Any changes to platform support should be listed in the sections below.
-
-[ Within the sections, list each platform as a =item entry with specific
-changes as paragraphs below it. ]
-
-=head2 New Platforms
-
-XXX List any platforms that this version of perl compiles on, that previous
-versions did not. These will either be enabled by new files in the F<hints/>
-directories, or new subdirectories and F<README> files at the top level of the
-source tree.
-
-=over 4
-
-=item XXX-some-platform
-
-XXX
-
-=back
-
-=head2 Discontinued Platforms
-
-XXX List any platforms that this version of perl no longer compiles on.
-
-=over 4
-
-=item XXX-some-platform
-
-XXX
-
-=back
-
-=head2 Platform-Specific Notes
-
-XXX List any changes for specific platforms. This could include configuration
-and compilation changes or changes in portability/compatibility.  However,
-changes within modules for platforms should generally be listed in the
-L</Modules and Pragmata> section.
-
-=over 4
-
-=item XXX-some-platform
-
-XXX
-
-=back
+There have been no changes to Perl's support of various platforms between
+5.15.8 and 5.15.9.
 
 =head1 Internal Changes
 
-XXX Changes which affect the interface available to C<XS> code go here.
-Other significant internal changes for future core maintainers should
-be noted as well.
+=over 4
 
-[ List each change as a =item entry ]
+=item *
 
-=over 4
+Two new functions C<utf8_to_uvchr_buf()> and C<utf8_to_uvuni_buf()> have
+been added.  These are the same as C<utf8_to_uvchr> and
+C<utf8_to_uvuni> (which are now deprecated), but take an extra parameter
+that is used to guard against reading beyond the end of the input
+string.
+See L<perlapi/utf8_to_uvchr_buf> and L<perlapi/utf8_to_uvuni_buf>.
 
 =item *
 
-XXX
+The regular expression engine now does TRIE case insensitive matches
+under Unicode. This may change the output of C<< use re 'debug'; >>,
+and will speed up various things.
 
 =back
 
 =head1 Selected Bug Fixes
 
-XXX Important bug fixes in the core language are summarised here.
-Bug fixes in files in F<ext/> and F<lib/> are best summarised in
-L</Modules and Pragmata>.
-
-[ List each fix as a =item entry ]
-
 =over 4
 
 =item *
 
-C<~~> now correctly handles the precedence of Any~~Object, and is not tricked
-by an overloaded object on the left-hand side.
+I<Takri> now matches two more characters under the C<Script_Extensions>
+property. This corrects a Unicode 6.1 omission.
 
 =item *
 
-C<stat _> no longer warns about unopened filehandles [perl #71002].
+C<< perlfunc.html >> is now being generated again. [perl #107870]
 
 =item *
 
-C<stat> on an unopened filehandle now warns consistently, instead of
-skipping the warning at times.
+C<< $$ >> is no longer tainted. Since this value comes directly from
+C<< getpid() >>, it is always safe.
 
 =item *
 
-A change in an earlier 5.15 release caused warning hints to propagate into
-C<do $file>.  This has been fixed [rt.cpan.org #72767].
+Fix leaking a file handle. [perl #37033]
 
 =item *
 
-Starting with 5.12.0, Perl used to get its internal bookkeeping muddled up
-after assigning C<${ qr// }> to a hash element and locking it with
-L<Hash::Util>.  This could result in double frees, crashes or erratic
-behaviour.
+An off-by-one error caused C<< /[:upper:]/ >> and C<< /[:punct:]/ >> to
+unexpectedly match characters with code points above 255. This has been
+rectified. [perl 111400].
 
 =item *
 
-In 5.15.7, some typeglobs in the CORE namespace were made read-only by
-mistake.  This has been fixed [rt.cpan.org #74289].
+C<< (?foo: ...) >> no longer loses passed in character set.
 
 =item *
 
-C<-t> now works when stacked with other filetest operators [perl #77388].
+Allow attributes to set C<< :lvalue >> on a defined sub. [perl 107366].
 
 =item *
 
-Stacked filetest operators now only call FETCH once on a tied argument.
+C<< die; >> with a non-reference, non-string value in $@ now properly
+propagates that value [perl #111654].
 
-=item *
+=back
 
-C</.*/g> would sometimes refuse to match at the end of a string that ends
-with "\n".  This has been fixed [perl #109206].
+=head1 Known Problems
 
-=item *
+This is a list of some significant unfixed bugs, which need to be
+resolved before 5.16.0
 
-Method calls whose arguments were all surrounded with C<my()> or C<our()>
-(as in C<<$object->method(my($a,$b)) >>) used to force lvalue context on
-the subroutine.  This would prevent lvalue methods from returning certain
-values.  Due to lvalue fixes earlier in the 5.15.x series, it would also
-prevent non-lvalue methods from being called [perl #109264].
+=over 4
 
-=for comment
-This bug I<did> affect earlier stable releases.  It is just the last
-sentence that does not apply to 5.14.
+=item F<< op/sigdispatch.t >> fails alarm test 14 and gets killed [perl #89718]
 
-=item *
+E<32>
 
-The C<SvPVutf8> C function no longer tries to modify its argument,
-resulting in errors [perl #108994].
+=item Perl crash due to wrong delimiter in C<< PATH >> environment [perl #94846]
 
-=item *
+It's possible to crash perl under Win32 if the wrong delimiter is used.
 
-C<SvPVutf8> now works properly with magical variables.
+=item Corrupt UTF8 [perl #79960, #100058]
 
-=item *
+It is possible to read an invalid UTF8 character, but have it marked valid,
+or to incorrectly read UTF8 characters if C<< $/ >> is set to read fixed
+length records.
 
-C<SvPVbyte> now works properly non-PVs.
+=item UTF8 patches for 5.16 [perl #107008]
 
-=back
+Brian Fraser's work on UTF8 needs further integration.
 
-=head1 Known Problems
-
-XXX Descriptions of platform agnostic bugs we know we can't fix go here. Any
-tests that had to be C<TODO>ed for the release would be noted here, unless
-they were specific to a particular platform (see below).
+=item C<eval { 'fork()' }> is broken on Windows [perl #109718]
 
-This is a list of some significant unfixed bugs, which are regressions
-from either 5.XXX.XXX or 5.XXX.XXX.
+This is a known test failure to be fixed before 5.16.0. 
 
-[ List each fix as a =item entry ]
+=item Warnings from cpan/IO-Compress [perl #110736]
 
-=over 4
+Some tests in F<< cpan/IO-Compress/t/cz-03zlib-v1.t >> issues a 
+"isn't numeric" warning in blead, but not in maint.
 
-=item *
+=item C<< Pod-Html >> test failures on Windows.
 
-XXX
+A number of tests for C<< Pod::Html >> fail under Windows, due to an 
+incorrect assumption by the test scripts about capitalization of the
+network drive.
 
 =back
 
-=head1 Obituary
+=head1 Acknowledgements
 
-XXX If any significant core contributor has died, we've added a short obituary
-here.
+Perl 5.15.9 represents approximately 4 weeks of development since Perl 5.15.8
+and contains approximately 79,000 lines of changes across 530 files from 23
+authors.
 
-=head1 Acknowledgements
+Perl continues to flourish into its third decade thanks to a vibrant community
+of users and developers. The following people are known to have contributed the
+improvements that became Perl 5.15.9:
+
+Aaron Crane, Abigail, Chris 'BinGOs' Williams, Craig A. Berry, Dave Rolsky,
+David Cantrell, David Golden, David Mitchell, Eric Brine, Father Chrysostomos,
+Florian Ragwitz, James E Keenan, Jesse Vincent, Karl Williamson, Marc Green,
+Max Maischein, Nicholas Clark, Pau Amma, Reini Urban, Ricardo Signes, Tony
+Cook, Yves Orton, Zefram.
+
+The list above is almost certainly incomplete as it is automatically generated
+from version control history. In particular, it does not include the names of
+the (very much appreciated) contributors who reported issues to the Perl bug
+tracker.
 
-XXX Generate this with:
+Many of the changes included in this version originated in the CPAN modules
+included in Perl's core. We're grateful to the entire CPAN community for
+helping Perl to flourish.
 
-  perl Porting/acknowledgements.pl v5.15.7..HEAD
+For a more complete list of all of Perl's historical contributors, please see
+the F<AUTHORS> file in the Perl source distribution.
 
 =head1 Reporting Bugs