=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
=head1 DESCRIPTION
-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
5.15.5.
-=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 numerical 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 for it now describes how to use it
+safely.
=head2 Other C<is_utf8_foo()> functions, as well as C<utf8_to_foo()>, etc.
functions C<is_utf8_string()>, C<is_utf8_string_loc()>, and
C<is_utf8_string_loclen()>.
-=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;
# 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.
+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'>.
=head2 C<UNIVERSAL::VERSION>
-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:
$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 *
=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 *
=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, but just once.
=back
-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. 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].
=head2 Anonymous handles
=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
+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:
my $foo = *STDOUT; # $foo is a glob copy
$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 unset 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), 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:
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
+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.
=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.
=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
-
-=over 4
-
-=item *
-
-XXX
-
-=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 *
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:
=over
Special characters, such as quotation marks, were not being escaped
properly.
-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
+a 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({})>
=item Keywords that do not follow the llafr
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 llafr, 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>.
=back
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<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 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.
=item *
=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 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.
=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.
+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.
=item *
=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.
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.
=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<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
=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].
=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<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.
=back
=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 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.
=item *
=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.
=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 *
-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.
=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.
-
=head3 VMS
=over 4
=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 *
=back
-=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 *
-
-XXX
-
-=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))?/) {
=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> redefine and existing
+subroutine:
use warnings;
BEGIN {
=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};
=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
+a typeglob.
=item *
=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 it 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 longers 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 *
=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.
+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 *
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
+a crash with Perl's own malloc, and possibly with other malloc
implementations, too [perl #104034].
=item *
=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 release 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
-in 5.15.3. This is now fixed.
+The debugger prompt did not display the current line in. 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 *
=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 *
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].
+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
-
-=item *
-
-XXX
+=head1 Acknowledgements
-=back
+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.
-=head1 Obituary
+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/acknowledgements.pl 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 http://rt.perl.org/perlbug/ . There may also be
+recently posted to the comp.lang.perl.misc newsgroup and the perl bug
+database at http://rt.perl.org/perlbug/ . 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 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 perlbug@perl.org 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 perlbug@perl.org 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 perl5-security-report@perl.org. 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 perl5-security-report@perl.org. 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.