This is a live mirror of the Perl 5 development currently hosted at
Merge branch 'drolsky/release-5.15.6' into blead
authorDave Rolsky <>
Tue, 20 Dec 2011 18:04:39 +0000 (12:04 -0600)
committerDave Rolsky <>
Tue, 20 Dec 2011 18:04:39 +0000 (12:04 -0600)
1  2 

diff --combined pod/perldelta.pod
@@@ -1,69 -1,48 +1,48 @@@
  =encoding utf8
- =for comment
- This has been completed up to 8d0b139, except for
- b0f2e9e nwclark     Fix two bugs related to pod files outside of pod/ (important enough?)
- 43d9ecf jpeacock    Set all version object math ops to noop
- f300909 smueller    EU::ParseXS: Silence warning (probably unnecessary)
  =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.6
- This document describes differences between the 5.15.5 release and
the 5.15.6 release.
+ This document describes differences between the 5.15.5 release and the
+ 5.15.6 release.
  If you are upgrading from an earlier release such as 5.15.4, first read
  L<perl5155delta>, which describes differences between 5.15.4 and
- =head1 Notice
- XXX Any important notices here
  =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 C<__SUB__>
- The new C<__SUB__> token, available under the "current_sub" feature (see
- L<feature>) or C<use v5.15>, returns a reference to the current subroutine,
- making it easier to write recursive closures.
+ The new C<__SUB__> token, available under the "current_sub" feature
+ (see L<feature>) or C<use v5.15>, returns a reference to the current
subroutine, making it easier to write recursive closures.
  =head2 New option for the debugger's B<t> command
- The B<t> command in the debugger, which toggles tracing mode, now accepts a
- numerical argument that determines how many levels of subroutine calls to
- trace.
+ The B<t> command in the debugger, which toggles tracing mode, now
+ accepts a numeric argument that determines how many levels of
subroutine calls to trace.
  =head2 Return value of C<tied>
- The value returned by C<tied> on a tied variable is now the actual scalar
- that holds the object to which the variable is tied.  This allows ties to
- be weakened with C<Scalar::Util::weaken(tied $tied_variable)>.
+ The value returned by C<tied> on a tied variable is now the actual
+ scalar that holds the object to which the variable is tied.  This
+ allows ties to be weakened with C<Scalar::Util::weaken(tied
+ $tied_variable)>.
  =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 C<is_utf8_char()>
- The XS-callable function C<is_utf8_char()> when presented with malformed
- UTF-8 input can read up to 12 bytes beyond the end of the string.  This
- cannot be fixed without changing its API.  It is not called from CPAN.
- The documentation for it now describes how to use it safely.
+ The XS-callable function C<is_utf8_char()>, when presented with
+ malformed UTF-8 input, can read up to 12 bytes beyond the end of the
+ string.  This cannot be fixed without changing its API.  It is not
+ called from CPAN.  The documentation now describes how to use it
+ safely.
  =head2 Other C<is_utf8_foo()> functions, as well as C<utf8_to_foo()>, etc.
@@@ -75,64 -54,56 +54,56 @@@ UTF-8.  This can be safely done for a w
  functions C<is_utf8_string()>, C<is_utf8_string_loc()>, and
- =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 reports are welcome.
- [ List each incompatible change as a =head2 entry ]
  =head2 C<use I<VERSION>>
- As of this release, version declarations like C<use v5.16> now disable all
- features before enabling the new feature bundle.  This means that the
- following holds true:
+ As of this release, version declarations like C<use v5.16> now disable
+ all features before enabling the new feature bundle.  This means that
the following holds true:
      use 5.016;
      # 5.16 features enabled here
      use 5.014;
      # 5.16 features disabled here
- C<use v5.12> and higher continue to enable strict, but explicit
C<use strict> and C<no strict> now override the version declaration, even
+ C<use v5.12> and higher continue to enable strict, but explicit C<use
+ strict> and C<no strict> now override the version declaration, even
  when they come first:
      no strict;
      use 5.012;
      # no strict here
- There is a new ":default" feature bundle, that represents the set of
- features enabled before any version declaration or C<use feature> has been
- seen.  Version declarations below 5.10 now enable the ":default" feature
set.  This does not actually change the behaviour of C<use v5.8>, because
- features added to the ":default" set are those that were traditionally
- enabled by default, before they could be turned off.
+ There is a new ":default" feature bundle that represents the set of
+ features enabled before any version declaration or C<use feature> has
+ been seen.  Version declarations below 5.10 now enable the ":default"
feature set.  This does not actually change the behaviour of C<use
+ v5.8>, because features added to the ":default" set are those that were
traditionally enabled by default, before they could be turned off.
  C<$[> is now disabled under C<use v5.16>.  It is part of the default
- feature set and can be turned on or off explicitly
with C<use feature 'array_base'>.
+ feature set and can be turned on or off explicitly with C<use feature
+ 'array_base'>.
- The change to C<UNIVERSAL::VERSION> in 5.15.2 has been reverted.  It now
- returns a stringified version object once more.
+ The change to C<UNIVERSAL::VERSION> in 5.15.2 has been reverted.  It
now returns a stringified version object once more.
  =head2 C<substr> lvalue revamp
- When C<substr> is called in lvalue or potential lvalue context with two or
- three arguments, a special lvalue scalar is returned that modifies the
- original string (the first argument) when assigned to.
+ When C<substr> is called in lvalue or potential lvalue context with two
+ or three arguments, a special lvalue scalar is returned that modifies
the original string (the first argument) when assigned to.
  Previously, the offsets (the second and third arguments) passed to
  C<substr> would be converted immediately to match the string, negative
  offsets being translated to positive and offsets beyond the end of the
  string being truncated.
- Now, the offsets are recorded without modification in the special lvalue
- scalar that is returned, and the original string is not even looked at by
- C<substr> itself, but only when the returned lvalue is read or modified.
+ Now, the offsets are recorded without modification in the special
+ lvalue scalar that is returned, and the original string is not even
+ looked at by C<substr> itself, but only when the returned lvalue is
+ read or modified.
  These changes result in several incompatible changes and bug fixes:
@@@ -150,20 -121,20 +121,20 @@@ their position from the end of the stri
      $string = "bailing twine";
      print $lvalue, "\n"; # prints "wi"; used to print "il"
- The same thing happens with an omitted third argument.  The returned lvalue
- will always extend to the end of the string, even if the string becomes
- longer.
+ The same thing happens with an omitted third argument.  The returned
+ lvalue will always extend to the end of the string, even if the string
becomes longer.
  =item *
  Tied (and otherwise magical) variables are no longer exempt from the
- "Attempt ot use reference as lvalue in substr" warning.
+ "Attempt to use reference as lvalue in substr" warning.
  =item *
- That warning now occurs when the returned lvalue is assigned to, not when
- C<substr> itself is called.  This only makes a difference if the return
- value of C<substr> is referenced and assigned to later.
+ That warning now occurs when the returned lvalue is assigned to, not
+ when C<substr> itself is called.  This only makes a difference if the
return value of C<substr> is referenced and assigned to later.
  =item *
@@@ -172,31 -143,33 +143,33 @@@ C<substr> has changed
  =item *
- Passing a substring of a read-only value or a typeglob to a function (potential lvalue context) no longer causes an immediate "Can't coerce" or "Modification of a read-only value" error.  That error only occurs if and
- when the value passed is assigned to.
+ Passing a substring of a read-only value or a typeglob to a function
+ (potential lvalue context) no longer causes an immediate "Can't coerce"
+ or "Modification of a read-only value" error.  That error only occurs
+ if and when the value passed is assigned to.
- The same thing happens with the "substr outside of string" error.  If the
- lvalue is only read, not written to, it is now just a warning, as with
- rvalue C<substr>.
+ The same thing happens with the "substr outside of string" error.  If
+ the lvalue is only read, not written to, it is now just a warning, as
with rvalue C<substr>.
  =item *
- C<substr> assignments no longer call FETCH twice if the first argument is a
tied variable, but just once.
+ C<substr> assignments no longer call FETCH twice if the first argument
is a tied variable, just once.
- It was impossible to fix all the bugs without an incompatible change, and
- the behaviour of negative offsets was never specified, so the change was
- deemed acceptable.
+ It was impossible to fix all the bugs without an incompatible change,
+ and the behaviour of negative offsets was never specified, so the
change was deemed acceptable.
  =head2 Return value of C<eval>
- C<eval> returns C<undef> in scalar context or an empty list in list context
- when there is a run-time error.  For syntax errors (when C<eval> is passed
- a string), in list context it used to return a list containing a single
- undefined element.  Now it returns an empty list in list context for all
- errors [perl #80630].
+ C<eval> returns C<undef> in scalar context or an empty list in list
+ context when there is a run-time error.  When C<eval> was passed a
+ string in list context and a syntax error occurred, it used to return a
+ list containing a single undefined element.  Now it returns an empty
list in list context for all errors [perl #80630].
  =head2 Anonymous handles
@@@ -206,92 -179,64 +179,64 @@@ variable name cannot be determined, rat
  =head2 Last-accessed filehandle
  Perl has an internal variable that stores the last filehandle to be
- accessed.  It is used by C<$.> and by C<tell> and C<eof> without arguments.
+ accessed.  It is used by C<$.> and by C<tell> and C<eof> without
+ arguments.
- It used to be possible to set it to a glob copy and then modify that glob
- copy to be something other than a glob, and still have it as the
- last-accessed filehandle after assigning a glob to it again:
+ It used to be possible to set this internal variable to a glob copy and
+ then modify that glob copy to be something other than a glob, and still
+ have the last-accessed filehandle associated with the variable after
+ assigning a glob to it again:
      my $foo = *STDOUT;  # $foo is a glob copy
      <$foo>;             # $foo is now the last-accessed handle
      $foo = 3;           # no longer a glob
      $foo = *STDERR;     # still the last-accessed handle
- Now the C<$foo = 3> assignment unset that internal variable, so there is no
- last-accessed filehandle, just as if C<< <$foo> >> had never happened.
+ Now the C<$foo = 3> assignment unsets that internal variable, so there
+ is no last-accessed filehandle, just as if C<< <$foo> >> had never
+ happened.
  =head2 XS API tweak
  The C<newCONSTSUB_flags> C-level function, added in 5.15.4, now has a
  C<len> parameter.
- =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.
- [ List each deprecation as a =head2 entry ]
  =head1 Performance Enhancements
- XXX Changes which enhance performance without changing behaviour go here. There
- may well be none in a stable release.
- [ List each enhancement as a =item entry ]
  =over 4
  =item *
- Perl 5.12.0 sped up the destruction of objects whose classes define empty
- C<DESTROY> methods (to prevent autoloading), simply by not calling such
- empty methods.  This release takes this optimisation a step further, by not
- calling any C<DESTROY> method that begins with a C<return> statement.
- This can be useful for destructors that are only used for debugging:
+ Perl 5.12.0 sped up the destruction of objects whose classes define
+ empty C<DESTROY> methods (to prevent autoloading), by simply not
+ calling such empty methods.  This release takes this optimisation a
+ step further, by not calling any C<DESTROY> method that begins with a
+ C<return> statement.  This can be useful for destructors that are only
+ used for debugging:
      use constant DEBUG => 1;
      sub DESTROY { return unless DEBUG; ... }
- Constant-folding will reduce the first statement to C<return;> if DEBUG is
- set to 0, triggering this optimisation.
+ Constant-folding will reduce the first statement to C<return;> if DEBUG
is set to 0, triggering this optimisation.
  =item *
- Assign to a variable that holds a typeglob or copy-on-write scalar is now
- much faster.  Previously the typeglob would be stringified or the
- copy-on-write scalar would be copied before being clobbered.
+ Assigning to a variable that holds a typeglob or copy-on-write scalar
+ is now much faster.  Previously the typeglob would be stringified or
the copy-on-write scalar would be copied before being clobbered.
  =item *
  Assignment to C<substr> in void context is now more than twice its
- previous speed.  Instead of creating and returning a special lvalue scalar
- that is then assigned to, C<substr> modifies the original string itself.
+ previous speed.  Instead of creating and returning a special lvalue
+ scalar that is then assigned to, C<substr> modifies the original string
+ itself.
  =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/>, 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
- =over 4
- =item *
- =back
  =head2 Updated Modules and Pragmata
  =over 4
  L<Archive::Tar> has been upgraded from version 1.80 to version 1.82.
- Adjustments to handle files >8gb (>0777777777777 octal) and a feature to
- return the MD5SUM of files in the archive.
+ Adjustments to handle files >8gb (>0777777777777 octal) and a feature
to return the MD5SUM of files in the archive.
  =item *
@@@ -315,14 -260,15 +260,15 @@@ L<B::Debug> has been upgraded from vers
  L<B::Deparse> has been upgraded from version 1.09 to version 1.10.
- Various constructs that used to be deparsed incorrectly have been fixed:
+ Various constructs that used to be deparsed incorrectly have been
+ fixed:
  =item C<sort(foo(bar))>
- C<sort foo(bar)>, how it used to deparse, makes foo the sort routine,
- rather than a regular function call.
+ It used to deparse as C<sort foo(bar)>, which makes foo the sort
+ routine, rather than a regular function call.
  =item Keys and values in C<%^H>
@@@ -333,54 -279,54 +279,54 @@@ unmodified, were being printed
  Special characters, such as quotation marks, were not being escaped
- Some values used to be omitted if, for instance, a key was the same as a
- previous value and vice versa.
+ Some values used to be omitted if, for instance, a key was the same as
previous value and vice versa.
  =item "method BLOCK" syntax
- C<method { $expr }> used to be deparsed as something like
- C<< do{ $expr }->method >>, but the latter puts the $expr in scalar
context, whereas the former puts in list context.
+ C<method { $expr }> used to be deparsed as something like C<< do{ $expr
+ }->method >>, but the latter puts the $expr in scalar context, whereas
+ the former puts in list context.
  =item C<do +{}> and C<do({})>
  These are both variants of do-file syntax, but were being deparsed as
- =item Keywords that do not follow the llafr
+ =item Keywords that do not follow the llaf rule
  Keywords like C<return> and C<last> that do not follow the
- looks-like-a-function rule are now deparsed correctly with parentheses in
- the right place.
+ looks-like-a-function rule are now deparsed correctly with parentheses
in the right place.
- Similarly, C<not>, which I<does> follow the llafr, was being deparsed as
- though it does not.
+ Similarly, C<not>, which I<does> follow the llaf rule, was being
deparsed as though it does not.
  =item C<=~>
- In various cases, B::Deparse started adding a spurious C<$_ =~> before the
- right-hand side in Perl 5.14; e.g., C<< "" =~ <$a> >> would become
+ In various cases, B::Deparse started adding a spurious C<$_ =~> before
the right-hand side in Perl 5.14; e.g., C<< "" =~ <$a> >> would become
  C<< "" =~ ($_ =~ <$a>) >>.
  =item C<open local *FH>
- C<open>, C<pipe> and other functions that autovivify handles used to omit
- C<local *> from C<local *FH>.
+ C<open>, C<pipe> and other functions that autovivify handles used to
omit C<local *> from C<local *FH>.
  =item Negated single-letter subroutine calls
- Negated subroutine calls like C<- f()> and C<-(f())> were being deparsed
- as file test operators.
+ Negated subroutine calls like C<- f()> and C<-(f())> were being
deparsed as file test operators.
  =item C<&{&}>
- C<&{&}> and C<& &>, which are calls to the subroutine named "&", believe it
- or not, were being deparsed as C<&&>.
+ C<&{&}> and C<& &>, which are calls to the subroutine named "&",
believe it or not, were being deparsed as C<&&>.
  =item C<require $this + $that>
- In Perl 5.14, C<require> followed by any binary operator started deparsing
- as C<no>.
+ In Perl 5.14, C<require> followed by any binary operator started
deparsing as C<no>.
  L<Carp> has been upgraded from version 1.23 to version 1.24.
- It now tacks the last-accessed filehandle and line number on to the end of
- the error message, just like C<die> [perl #96672].
+ It now tacks the last-accessed filehandle and line number on to the end
of the error message, just like C<die> [perl #96672].
  =item *
- L<Compress::Raw::Zlib> has been upgraded from version 2.042 to version 2.045.
+ L<Compress::Raw::Zlib> has been upgraded from version 2.042 to version
+ 2.045.
  =item *
- L<Compress::Raw::Bzip2> has been upgraded from version 2.042 to version 2.045.
+ L<Compress::Raw::Bzip2> has been upgraded from version 2.042 to version
+ 2.045.
  =item *
- L<CPAN::Meta::YAML> has been upgraded from version 0.004 to version 0.005.
+ L<CPAN::Meta::YAML> has been upgraded from version 0.004 to version
+ 0.005.
  =item *
 -L<CPANPLUS> has been upgraded from version 0.9112 to version 0.9113.
 +L<CPANPLUS> has been upgraded from version 0.9112 to version 0.9114.
  =item *
  L<Data::Dumper> has been upgraded from version 2.134 to version 2.135.
- The XS implementation has been updated to account for the Unicode symbol
changes in Perl 5.15.4.  It also knows how to output typeglobs with nulls
- in their names.
+ The XS implementation has been updated to account for the Unicode
symbol changes in Perl 5.15.4.  It also knows how to output typeglobs
with nulls in their names.
  =item *
  L<diagnostics> has been upgraded from version 1.25 to version 1.26.
- It now understands the "%X" format code, which some error messages started
- using in Perl 5.14.0.
+ It now understands the "%X" format code, which some error messages
started using in Perl 5.14.0.
  =item *
  L<Digest::SHA> has been upgraded from version 5.63 to version 5.70.
- Added BITS mode to addfile method and shasum which makes partial-byte inputs
- now possible via files/STDIN and allows shasum to check all 8074 NIST Msg vectors,
- where previously special programming was required to do this.
+ Added BITS mode to the addfile method and shasum.  This makes
+ partial-byte inputs possible via files/STDIN and allows shasum to check
+ all 8074 NIST Msg vectors, where previously special programming was
+ required to do this.
  =item *
@@@ -438,11 -388,13 +388,13 @@@ It no longer tries to localise C<$_> un
  =item *
- L<ExtUtils::ParseXS> has been upgraded from version 3.05 to version 3.07.
+ L<ExtUtils::ParseXS> has been upgraded from version 3.05 to version
+ 3.07.
  =item *
- L<IO::Compress::Base> has been upgraded from version 2.042 to version 2.046.
+ L<IO::Compress::Base> has been upgraded from version 2.042 to version
+ 2.046.
  Added zipdetails utility.
  L<Locale::Codes> has been upgraded from version 3.18 to version 3.20.
- The code2XXX, XXX2code, all_XXX_codes, and all_XXX_names functions now support retired codes.
- All codesets may be specified by a constant or by their name now. Previously,
- they were specified only by a constant.
- The alias_code function exists for backward compatibility. It has been replaced by rename_country_code.
- The alias_code function will be removed sometime after September, 2013.
- All work is now done in the central module (Locale::Codes). Previously, some was still done in the
- wrapper modules (Locale::Codes::*) but that is gone now.
- Added Language Family codes (langfam) as defined in ISO 639-5.
+ The code2XXX, XXX2code, all_XXX_codes, and all_XXX_names functions now
+ support retired codes.  All codesets may be specified by a constant or
+ by their name now.  Previously, they were specified only by a constant.
+ The alias_code function exists for backward compatibility.  It has been
+ replaced by rename_country_code.  The alias_code function will be
+ removed some time after September, 2013.
+ All work is now done in the central module (Locale::Codes). 
+ Previously, some was still done in the wrapper modules
+ (Locale::Codes::*).  Added Language Family codes (langfam) as defined
+ in ISO 639-5.
  =item *
- L<Module::Loaded> has been uprgaded from version 0.06 to version 0.08.
+ L<Module::CoreList> has been upgraded from version 2.58 to version
+ 2.59.
+ =item *
+ L<Module::Loaded> has been upgraded from version 0.06 to version 0.08.
  =item *
@@@ -470,18 -431,17 +431,17 @@@ L<Pod::LaTeX> has been upgraded from ve
  Added another LaTeX escape: --- => -{}-{}-
  Pod::LaTeX doesn't handle -- in PODs specially, passing it directly to
- LaTeX, which then proceeds to replace it with a single -. This patch
+ LaTeX, which then proceeds to replace it with a single -.  This patch
  replaces ----- with -{}-{}-{}-{}-
  =item *
  L<POSIX> has been upgraded from version 1.26 to version 1.27.
- It no longer produces a "Constant subroutine TCSANOW redefined" warning on
- Windows.
+ It no longer produces a "Constant subroutine TCSANOW redefined" warning
on Windows.
- XXX When did it start producing that warning?  Was it post-5.15.5?  Even if
- it was not, adding a note will help whoever compiles perl5160delta.
+ This bug was introduced in Perl 5.15.3.
  =item *
@@@ -493,12 -453,13 +453,13 @@@ L<threads> has been upgraded from versi
  =item *
- L<Unicode::Collate> has been upgraded from version 0.85 to version 0.87.
+ L<Unicode::Collate> has been upgraded from version 0.85 to version
+ 0.87.
- Tailored compatibility ideographs as well as unified ideographs for
the locales: ja, ko, zh__big5han, zh__gb2312han, zh__pinyin, zh__stroke.
+ Tailored compatibility ideographs as well as unified ideographs for the
+ locales: ja, ko, zh__big5han, zh__gb2312han, zh__pinyin, zh__stroke.
Now Locale/*.pl files are searched in @INC.
Locale/*.pl files are now searched for in @INC.
  =item *
@@@ -516,33 -477,18 +477,18 @@@ Documentation change clarifies return v
  Changing the case of a UTF-8 encoded string under C<use locale> now
  gives better, but still imperfect, results.  Previously, such a string
- would entirely lose locale semantics and silently be treated as Unicode.
- Now, the code points that are less than 256 are treated with locale
- rules, while those above 255 are, of course, treated as Unicode.  See
- L<perlfunc/lc> for more details, including the deficiencies of this
- scheme.
+ would entirely lose locale semantics and silently be treated as
+ Unicode.  Now, the code points that are less than 256 are treated with
+ locale rules, while those above 255 are, of course, treated as Unicode.
+  See L<perlfunc/lc> for more details, including the deficiencies of
this scheme.
  =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<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<perlsec/Laundering and Detecting Tainted Data>
  =over 4
  The example function for checking for taintedness contained a subtle
  error.  C<$@> needs to be localized to prevent its changing this
  global's value outside the function.  The preferred method to check for
- this, though, remains to use L<Scalar::Util/tainted>.
+ this remains L<Scalar::Util/tainted>.
  =head1 Diagnostics
- 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
- =head3 New Warnings
- =over 4
- =item *
- XXX L<message|perldiag/"message">
- =back
  =head2 Changes to Existing Diagnostics
- XXX Changes (i.e. rewording) of diagnostic messages go here
  =over 4
  =item *
- Redefinition warnings for constant subroutines used to be mandatory, even
- occurring under C<no warnings>.  Now they respect the L<warnings> pragma.
+ Redefinition warnings for constant subroutines used to be mandatory,
+ even occurring under C<no warnings>.  Now they respect the L<warnings>
+ pragma.
  =item *
- The "Attempt to free non-existent shared string" has had the spelling of
- "non-existent" corrected to "nonexistent".  It was already listed with the
- correct spelling in L<perldiag>.
+ The "Attempt to free non-existent shared string" has had the spelling
+ of "non-existent" corrected to "nonexistent".  It was already listed
with the correct spelling in L<perldiag>.
  =item *
  The 'Use of "foo" without parentheses is ambiguous' warning has been
- extended to apply also to user-defined subroutines with a (;$) prototype,
- and not just to built-in functions.
+ extended to apply also to user-defined subroutines with a (;$)
prototype, and not just to built-in functions.
  =item *
  The error messages for using C<default> and C<when> outside of a
- topicalizer have been standardised to match the messages for C<continue>
- and loop controls.  They now read 'Can't "default" outside a topicalizer'
- and 'Can't "when" outside a topicalizer'.  They both used to be 'Can't use
- when() outside a topicalizer' [perl #91514].
+ topicalizer have been standardised to match the messages for
+ C<continue> and loop controls.  They now read 'Can't "default" outside
+ a topicalizer' and 'Can't "when" outside a topicalizer'.  They both
used to be 'Can't use when() outside a topicalizer' [perl #91514].
  =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<zipdetails>
  =over 4
  =item *
- L<zipdetails> displays information about the internal record structure of the zip file.
- It is not concerned with displaying any details of the compressed data stored in the zip file.
+ L<zipdetails> displays information about the internal record structure
+ of the zip file.  It is not concerned with displaying any details of
+ the compressed data stored in the zip file.
  =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 *
- F<pod/roffitall> is now build by F<pod/buildtoc>, instead of being shipped
- with the distribution. Its list of manpages is now generated (and therefore
- current). See also RT #103202 for an unresolved related issue.
+ F<pod/roffitall> is now built by F<pod/buildtoc>, instead of being
+ shipped with the distribution.  Its list of manpages is now generated
+ (and therefore current).  See also RT #103202 for an unresolved related
+ issue.
  =item *
  Perl 5.15.5 had a bug in its installation script, which did not install
  F<unicore/>.  This has been corrected [perl #104226].
- XXX Is that Perl version correct?  Is the file path correct?
  =item *
- The man page for C<XS::Typemap> is no longer installed. C<XS::Typemap> is
- a test module which is not installed, hence installing its documentation
- makes no sense.
+ The man page for C<XS::Typemap> is no longer installed.  C<XS::Typemap>
+ is a test module which is not installed, hence installing its
documentation makes no sense.
  =for 5.16.0 Merge this with the entry for "Stop installing XS::APItest*"
  =item *
- The man pages for the perl FAQ, L<perlxs>, L<perlxstut> and L<perldoc> are
- once again correctly installed in F<man1>, not F<man3>
+ The man pages for the perl FAQ, L<perlxs>, L<perlxstut> and L<perldoc>
are once again correctly installed in F<man1>, not F<man3>
  =for 5.16.0 This isn't a regression from 5.14.x, so don't mention this.
  =item *
- The -Dusesitecustomize and -Duserelocatableinc options now work together
- properly.
+ The -Dusesitecustomize and -Duserelocatableinc options now work
together properly.
  =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 *
- The F<substr.t> and F<substr_thr.t> scripts for testing C<substr> have been
- moved under F<t/op/>, where they were originally.  They had been moved
- under F<t/re/> along with the substitution tests when that directory was
- created.
+ The F<substr.t> and F<substr_thr.t> scripts for testing C<substr> have
+ been moved under F<t/op/>, where they were originally.  They had been
+ moved under F<t/re/> along with the substitution tests when that
directory was created.
  =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
- =back
- =head2 Discontinued Platforms
- XXX List any platforms that this version of perl no longer compiles on.
- =over 4
- =item XXX-some-platform
- =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.
  =head3 VMS
  =over 4
@@@ -769,125 -616,106 +616,106 @@@ introduced in 5.15.1, but has now been 
  =item *
- Explicit support for VMS versions prior to v7.0 and DEC C versions prior
- to v6.0 has been removed.
+ Explicit support for VMS versions prior to v7.0 and DEC C versions
prior to v6.0 has been removed.
  =item *
  Since Perl 5.10.1, the home-grown C<stat> wrapper has been unable to
  distinguish between a directory name containing an underscore and an
  otherwise-identical filename containing a dot in the same position
- (e.g., t/test_pl as a directory and t/ as a file). This problem
+ (e.g., t/test_pl as a directory and t/ as a file).  This problem
  has been corrected.
- =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.
- [ List each change as a =item entry ]
- =over 4
- =item *
- =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 *
  RT #78266: The regex engine has been leaking memory when accessing
  named captures that weren't matched as part of a regex ever since 5.10
- when they were introduced, e.g. this would consume over a hundred MB
of memory:
+ when they were introduced, e.g. this would consume over a hundred MB of
+ memory:
      for (1..10_000_000) {
-       if ("foo" =~ /(foo|(?<capture>bar))?/) {
-           my $capture = $+{capture}
-       }
+         if ("foo" =~ /(foo|(?<capture>bar))?/) {
+             my $capture = $+{capture}
+         }
      system "ps -o rss $$"'
  =item *
- A constant subroutine assigned to a glob whose name contains a null will no
- longer cause extra globs to pop into existence when the constant is
- referenced under its new name.
+ A constant subroutine assigned to a glob whose name contains a null
+ will no longer cause extra globs to pop into existence when the
constant is referenced under its new name.
  =item *
- C<sort> was not treating C<sub {}> and C<sub {()}> as equivalent when such
- a sub was provided as the comparison routine.  It used to croak on
+ C<sort> was not treating C<sub {}> and C<sub {()}> as equivalent when
such a sub was provided as the comparison routine.  It used to croak on
  C<sub {()}>.
  =item *
  Subroutines from the C<autouse> namespace are once more exempt from
- redefinition warnings.  This used to work in 5.005, but was broken in 5.6
- for most subroutines.  For subs created via XS that redefine subroutines
- from the C<autouse> package, this stopped working in 5.10.
+ redefinition warnings.  This used to work in 5.005, but was broken in
+ 5.6 for most subroutines.  For subs created via XS that redefine
subroutines from the C<autouse> package, this stopped working in 5.10.
  =item *
  New XSUBs now produce redefinition warnings if they overwrite existing
- subs, as they did in 5.8.x.  (The C<autouse> logic was reversed in 5.10-14.
- Only subroutines from the C<autouse> namespace would warn when clobbered.)
+ subs, as they did in 5.8.x.  (The C<autouse> logic was reversed in
+ 5.10-14.  Only subroutines from the C<autouse> namespace would warn
+ when clobbered.)
  =item *
  Redefinition warnings triggered by the creation of XSUBs now respect
- Unicode glob names, instead of using the internal representation.  This was
- missed in 5.15.4, partly because this warning was so hard to trigger.  (See
- the previous item.)
+ Unicode glob names, instead of using the internal representation.  This
+ was missed in 5.15.4, partly because this warning was so hard to
+ trigger.  (See the previous item.)
  =item *
- C<newCONSTSUB> used to use compile-time warning hints, instead of run-time
- hints.  The following code should never produce a redefinition warning, but
- it used to, if C<newCONSTSUB> redefine and existing subroutine:
+ C<newCONSTSUB> used to use compile-time warning hints, instead of
+ run-time hints.  The following code should never produce a redefinition
+ warning, but it used to, if C<newCONSTSUB> redefined an existing
+ subroutine:
      use warnings;
      BEGIN {
-       no warnings;
-       some_XS_function_that_calls_new_CONSTSUB();
+         no warnings;
+         some_XS_function_that_calls_new_CONSTSUB();
  =item *
- Redefinition warnings for constant subroutines are on by default (what are
- known as severe warnings in L<perldiag>).  This was only the case when it
- was a glob assignment or declaration of a Perl subroutine that caused the
- warning.  If the creation of XSUBs triggered the warning, it was not a
- default warning.  This has been corrected.
+ Redefinition warnings for constant subroutines are on by default (what
+ are known as severe warnings in L<perldiag>).  This was only the case
+ when it was a glob assignment or declaration of a Perl subroutine that
+ caused the warning.  If the creation of XSUBs triggered the warning, it
was not a default warning.  This has been corrected.
  =item *
- The internal check to see whether a redefinition warning should occur used
- to emit "uninitialized" warnings in cases like this:
+ The internal check to see whether a redefinition warning should occur
used to emit "uninitialized" warnings in cases like this:
      use warnings "uninitialized";
-     use constant {u=>undef,v=>undef};
-     sub foo(){u} sub foo(){v}
+     use constant {u => undef, v => undef};
+     sub foo(){u}
+     sub foo(){v}
  =item *
  A bug fix in Perl 5.14 introduced a new bug, causing "uninitialized"
- warnings to report the wrong variable if the operator in question has
- two operands and one is C<%{...}> or C<@{...}>.  This has been fixed
+ warnings to report the wrong variable if the operator in question had
+ two operands and one was C<%{...}> or C<@{...}>.  This has been fixed
  [perl #103766].
  =item *
@@@ -897,14 -725,14 +725,14 @@@ crash [perl #102586]
  =item *
- C<$tied =~ y/a/b/>, C<chop $tied> and C<chomp $tied> now call FETCH just
- once when $tied holds a reference.
+ C<$tied =~ y/a/b/>, C<chop $tied> and C<chomp $tied> now call FETCH
just once when $tied holds a reference.
  =item *
- Four-argument C<select> now always calls FETCH on tied arguments.  It used
- to skip the call if the tied argument happened to hold C<undef> or a
- typeglob.
+ Four-argument C<select> now always calls FETCH on tied arguments.  It
+ used to skip the call if the tied argument happened to hold C<undef> or
  =item *
@@@ -913,31 -741,33 +741,33 @@@ bitmask" warning on tied or tainted var
  =item *
- C<sysread> now always calls FETCH on the buffer passed to it if it is tied.
- It used to skip the call if the tied variable happened to hold a typeglob.
+ C<sysread> now always calls FETCH on the buffer passed to it if the
+ buffer is tied.  It used to skip the call if the tied variable happened
+ to hold a typeglob.
  =item *
- C<< $tied .= <> >> now calls FETCH once on C<$tied>.  It used to call it
- multiple times if the last value assigned to or returned from the tied
- variable was anything other than a string or typeglob.
+ C<< $tied .= <> >> now calls FETCH once on C<$tied>.  It used to call
+ it multiple times if the last value assigned to or returned from the
tied variable was anything other than a string or typeglob.
  =item *
  The C<evalbytes> keyword added in 5.15.5 was respecting C<use utf8>
- declarations from the outer scope, when it should have been ignoring them.
+ declarations from the outer scope, when it should have been ignoring
+ them.
  =item *
- C<goto &func> no longers crashes, but produces an error message, when the
- unwinding of the current subroutine's scope fires a destructor that
+ C<goto &func> no longer crashes, but produces an error message, when
the unwinding of the current subroutine's scope fires a destructor that
  undefines the subroutine being "goneto" [perl #99850].
  =item *
- Arithmetic assignment (C<$left += $right>) involving overloaded objects that
rely on the 'nomethod' override no longer segfault when the left operand is not
- overloaded.
+ Arithmetic assignment (C<$left += $right>) involving overloaded objects
that rely on the 'nomethod' override no longer segfault when the left
+ operand is not overloaded.
  =item *
@@@ -947,14 -777,14 +777,14 @@@ results of such assignments are still u
  =item *
- Creating a C<UNIVERSAL::AUTOLOAD> sub no longer stops C<%+>, C<%-> and
- C<%!> from working some of the time [perl #105024].
+ Assigning C<__PACKAGE__> or another shared hash key string to a
+ variable no longer stops that variable from being tied if it happens to
+ be a PVMG or PVLV internally.
  =item *
- Assigning C<__PACKAGE__> or another shared hash key string to a variable no
- longer stops that variable from being tied if it happens to be a PVMG or
- PVLV internally.
+ Creating a C<UNIVERSAL::AUTOLOAD> sub no longer stops C<%+>, C<%-> and
+ C<%!> from working some of the time [perl #105024].
  =item *
@@@ -962,47 -792,47 +792,47 @@@ When presented with malformed UTF-8 inp
  C<is_utf8_string()>, C<is_utf8_string_loc()>, and
  C<is_utf8_string_loclen()> could read beyond the end of the input
  string by up to 12 bytes.  This no longer happens.  [perl #32080].
- However, currently, C<is_utf8_char()> still has this defect,
see L</is_utf8_char()> above.
+ However, currently, C<is_utf8_char()> still has this defect, see
+ L</is_utf8_char()> above.
  =item *
- Doing a substitution on a tied variable returning a copy-on-write scalar
- used to cause an assertion failure or an "Attempt to free nonexistent
- shared string" warning.
+ Doing a substitution on a tied variable returning a copy-on-write
+ scalar used to cause an assertion failure or an "Attempt to free
nonexistent shared string" warning.
  =item *
- A change in perl 5.15.4 caused C<caller()> to produce malloc errors and a
- crash with Perl's own malloc, and possibly with other malloc
+ A change in perl 5.15.4 caused C<caller()> to produce malloc errors and
crash with Perl's own malloc, and possibly with other malloc
  implementations, too [perl #104034].
  =item *
  A bug fix in 5.15.5 could sometimes result in assertion failures under
  debugging builds of perl for certain syntax errors in C<eval>, such as
- C<eval(q|""!=!~//|);>
+ C<eval q|""!=!~//|>
  =item *
- The "c [line num]" debugger command was broken by other debugger changes
release in 5.15.3.  This is now fixed.
+ The "c [line num]" debugger command was broken by other debugger
changes released in 5.15.3.  This is now fixed.
  =item *
- Breakpoints were not properly restored after a debugger restart using the
- "R" command.  This was broken in 5.15.3.  This is now fixed.
+ Breakpoints were not properly restored after a debugger restart using
the "R" command.  This was broken in 5.15.3.  This is now fixed.
  =item *
- The debugger prompt did not display the current line in.  This was broken
+ The debugger prompt did not display the current line.  This was broken
  in 5.15.3.  This is now fixed.
  =item *
- Class method calls still suffered from the Unicode bug with Latin-1 package
- names.  This was missed in the Unicode package name cleanup in 5.15.4
- [perl #105922].
+ Class method calls still suffered from the Unicode bug with Latin-1
+ package names.  This was missed in the Unicode package name cleanup in
5.15.4 [perl #105922].
  =item *
@@@ -1011,12 -841,12 +841,12 @@@ structures
  =item *
- Calling C<readline($fh)> where $fh is a glob copy (e.g., after
C<$fh = *STDOUT>), assigning something other than a glob to $fh, and then
+ Calling C<readline($fh)> where $fh is a glob copy (e.g., after C<$fh =
+ *STDOUT>), assigning something other than a glob to $fh, and then
  freeing $fh (e.g., by leaving the scope where it is defined) no longer
- causes the internal variable used by C<$.> (C<PL_last_in_gv>) to point to
- a freed scalar, that could be reused for some other glob, causing C<$.> to
- use some unrelated filehandle [perl #97988].
+ causes the internal variable used by C<$.> (C<PL_last_in_gv>) to point
+ to a freed scalar, that could be reused for some other glob, causing
C<$.> to use some unrelated filehandle [perl #97988].
  =item *
@@@ -1032,74 -862,80 +862,80 @@@ variable that holds the handle used by 
      seek     *$fh, 0,0;
      readline *$fh;
- This is now fixed, but C<tell *{ *$fh }> still has the problem, and it is
- not clear how to fix it [perl #106536].
+ This is now fixed, but C<tell *{ *$fh }> still has the problem, and it
is not clear how to fix it [perl #106536].
  =item *
- Version comparisons, such as those that happen implicitly with
- C<use v5.43>, no longer cause locale settings to change [perl #105784].
- =back
- =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).
- This is a list of some significant unfixed bugs, which are regressions
- from either 5.XXX.XXX or 5.XXX.XXX.
- [ List each fix as a =item entry ]
- =over 4
+ Version comparisons, such as those that happen implicitly with C<use
+ v5.43>, no longer cause locale settings to change [perl #105784].
  =item *
+ F<pod/buildtoc>, which generates L<perltoc>, put path names in the
+ L<perltoc> file.  This bug was introduced in 5.15.1.
- =head1 Obituary
+ =head1 Acknowledgments
+ Perl 5.15.6 represents approximately 2 months of development since Perl
+ 5.15.5 and contains approximately 48,000 lines of changes across 560
+ files from 36 authors.
+ 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.6:
- XXX If any significant core contributor has died, we've added a short obituary
- here.
+ Aaron Crane, Abhijit Menon-Sen, Alexandr Ciornii, Brian Fraser, Carl
+ Hayter, Chris 'BinGOs' Williams, Craig A. Berry, Dave Rolsky, David
+ Golden, David Mitchell, Dominic Hargreaves, Father Chrysostomos, James
+ E Keenan, Johannes Plunien, John Peacock, Karl Williamson, Marc Green,
+ Mark Dootson, Matthew Horsfall, Nicholas Clark, Paul Evans, Peter
+ Martini, Peter Scott, Rafael Garcia-Suarez, Reini Urban, Ricardo
+ Signes, Rodolfo Carvalho, Shlomi Fish, Steffen Müller, Steve Hay,
+ Steve Peters, Thomas Sibley, Timothe Litt, Tony Cook, Vadim Konovalov,
+ Ævar Arnfjörð Bjarmason.
- =head1 Acknowledgements
+ 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/ v5.15.5..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
  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 .  There may also be
+ recently posted to the comp.lang.perl.misc newsgroup and the perl bug
+ database at .  There may also be
  information at , the Perl Home Page.
  If you believe you have an unreported bug, please run the L<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 to be
analysed by the Perl porting team.
+ 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 to be analysed by
+ the Perl porting team.
  If the bug you are reporting has security implications, which make it
- inappropriate to send to a publicly archived mailing list, then please send
- it to This points to a closed subscription
- unarchived mailing list, which includes
- all the core committers, who will be able
- to help assess the impact of issues, figure out a resolution, and help
- co-ordinate the release of patches to mitigate or fix the problem across all
- platforms on which Perl is supported. Please only use this address for
- security issues in the Perl core, not for modules independently
- distributed on CPAN.
+ inappropriate to send to a publicly archived mailing list, then please
+ send it to  This points to a closed
+ subscription unarchived mailing list, which includes all the core
+ committers, who will be able to help assess the impact of issues,
+ figure out a resolution, and help co-ordinate the release of patches to
+ mitigate or fix the problem across all platforms on which Perl is
+ supported.  Please only use this address for security issues in the
+ Perl core, not for modules independently distributed on CPAN.
  =head1 SEE ALSO
- The F<Changes> file for an explanation of how to view exhaustive details
- on what changed.
+ The F<Changes> file for an explanation of how to view exhaustive
details on what changed.
  The F<INSTALL> file for how to build Perl.