This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Merge branch 'drolsky/release-5.15.6' into blead
[perl5.git] / pod / perldelta.pod
index 30c9242..a57f041 100644 (file)
 
 =head1 NAME
 
-perldelta - what is new for perl v5.15.5
+perldelta - what is new for perl v5.15.6
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.15.4 release and
-the 5.15.5 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.3, first read
-L<perl5154delta>, which describes differences between 5.15.3 and
-5.15.4.
+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 Core Enhancements
 
-=head2 More consistent C<eval>
+=head2 C<__SUB__>
 
-The C<eval> operator sometimes treats a string argument as a sequence of
-characters and sometimes as a sequence of bytes, depending on the internal
-encoding.  The internal encoding is not supposed to make any difference,
-but there is code that relies on this inconsistency.
+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.
 
-Under C<use v5.15> and higher, the C<unicode_eval> and C<evalbytes>
-features resolve this.  The C<unicode_eval> feature causes C<eval $string>
-to treat the string always as Unicode.  The C<evalbytes> features provides
-a function, itself called C<evalbytes>, which evaluates its argument always
-as a string of bytes.
+=head2 New option for the debugger's B<t> command
 
-These features also fix oddities with source filters leaking to outer
-dynamic scopes.
+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.
 
-See L<feature> for more detail.
+=head2 Return value of C<tied>
 
-=head2 C<$[> is back
+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 C<$[> variable is back again, but is now implemented as a module, so
-programs that do not mention it (i.e., most of them), will not incur any
-run-time penalty.  In a later release in the 5.15 branch it might be
-disabled in the scope of C<use v5.16>.
+=head1 Security
 
-The new implementation has some bug fixes.  See L<arybase>.
+=head2 C<is_utf8_char()>
 
-=head1 Security
+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 Privileges are now set correctly when assigning to C<$(>
+=head2 Other C<is_utf8_foo()> functions, as well as C<utf8_to_foo()>, etc.
 
-A hypothetical bug (probably non-exploitable in practice) due to the
-incorrect setting of the effective group ID while setting C<$(> has been
-fixed. The bug would only have affected systems that have C<setresgid()>
-but not C<setregid()>, but no such systems are known of.
+Most of the other XS-callable functions that take UTF-8 encoded input
+implicitly assume that the UTF-8 is valid (not malformed) in regards to
+buffer length.  Do not do things such as change a character's case or
+see if it is alphanumeric without first being sure that it is valid
+UTF-8.  This can be safely done for a whole string by using one of the
+functions C<is_utf8_string()>, C<is_utf8_string_loc()>, and
+C<is_utf8_string_loclen()>.
 
-=head1 Incompatible Changes
+=head2 C<use I<VERSION>>
 
-=head2 Certain deprecated Unicode properties are no longer supported by default
+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:
 
-Perl should never have exposed certain Unicode properties that are used
-by Unicode internally and not meant to be publicly available.  Use of
-these has generated deprecated warning messages since Perl 5.12.  The
-removed properties are Other_Alphabetic,
-Other_Default_Ignorable_Code_Point, Other_Grapheme_Extend,
-Other_ID_Continue, Other_ID_Start, Other_Lowercase, Other_Math, and
-Other_Uppercase.
+    use 5.016;
+    # 5.16 features enabled here
+    use 5.014;
+    # 5.16 features disabled here
 
-Perl may be recompiled to include any or all of them; instructions are
-given in
-L<perluniprops/Unicode character properties that are NOT accepted by Perl>.
+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:
 
-=head2 Dereferencing IO thingies as typeglobs
+    no strict;
+    use 5.012;
+    # no strict here
 
-The C<*{...}> operator, when passed a reference to an IO thingy (as in
-C<*{*STDIN{IO}}>), creates a new typeglob containing just that IO object.
+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.
 
-Previously, it would stringify as an empty string, but some operators would
-treat it as undefined, producing an "uninitialized" warning.
+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'>.
 
-Having a typeglob appear as an empty string is a side effect of the
-implementation that has caused various bugs over the years.
+=head2 C<UNIVERSAL::VERSION>
 
-The solution was to make it stringify like a normal anonymous typeglob,
-like those produced by C<< open($foo->{bar}, ...) >> [perl #96326].
+The change to C<UNIVERSAL::VERSION> in 5.15.2 has been reverted.  It
+now returns a stringified version object once more.
 
-=head1 Deprecations
+=head2 C<substr> lvalue revamp
 
-=head2 Don't read the Unicode data base files in F<lib/unicore>
+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.
 
-It is now deprecated to directly read the Unicode data base files.
-These are stored in the F<lib/unicore> directory.  Instead, you should
-use the new functions in L<Unicode::UCD>.  These provide a stable API,
-and give complete information.  (This API is, however, subject to change
-somewhat during the 5.15 development cycle, as we gain experience and
-get feedback from using it.)
+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.
 
-Perl may at some point in the future change or remove the files.  The
-file most likely for applications to have used is F<lib/unicore/ToDigit.pl>.
-L<Unicode::UCD/prop_invmap()> can be used to get at its data instead.
+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.
 
-=head1 Performance Enhancements
+These changes result in several incompatible changes and bug fixes:
 
-=over 4
+=over
+
+=item *
+
+If the original string changes length after the call to C<substr> but
+before assignment to its return value, negative offsets will remember
+their position from the end of the string, affecting code like this:
+
+    my $string = "string";
+    my $lvalue = \substr $string, -4, 2;
+    print $lvalue, "\n"; # prints "ri"
+    $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.
 
 =item *
 
-Due to changes in L<File::Glob>, Perl's C<glob> function and its
-C<< <...> >> equivalent are now much faster.  The splitting of the pattern
-into words has been rewritten in C, resulting in speed-ups of 20% in some
-cases.
+Tied (and otherwise magical) variables are no longer exempt from the
+"Attempt to use reference as lvalue in substr" warning.
 
-This does not affect VMS, as it does not use File::Glob.
+=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.
+
+=item *
+
+The order in which "uninitialized" warnings occur for arguments to
+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.
+
+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, just once.
 
 =back
 
-=head1 Modules and Pragmata
+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.  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
+
+Automatically generated file handles are now named __ANONIO__ when the
+variable name cannot be determined, rather than $__ANONIO__.
+
+=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.
 
-=head2 New Modules and Pragmata
+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 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 Performance Enhancements
 
 =over 4
 
 =item *
 
-L<arybase> -- this new module implements the C<$[> variable.
+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.
+
+=item *
+
+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.
 
 =back
 
+=head1 Modules and Pragmata
+
 =head2 Updated Modules and Pragmata
 
 =over 4
 
 =item *
 
-L<Archive::Extract> has been upgraded from version 0.56 to version 0.58.
+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.
+
+=item *
+
+L<AutoLoader> has been upgraded from version 5.71 to version 5.72.
 
 =item *
 
-L<B::Concise> has been upgraded from version 0.86 to version 0.87.
+L<B::Debug> has been upgraded from version 1.16 to version 1.17.
 
 =item *
 
-L<B::Deparse> has been upgraded from version 1.08 to version 1.09.
+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:
+
+=over
+
+=item C<sort(foo(bar))>
+
+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>
+
+Undefined values in the hint hash were being deparsed as empty strings.
+Whenever the hint hash changed, all undefined values, even those
+unmodified, were being printed.
+
+Special characters, such as quotation marks, were not being escaped
+properly.
 
-It now correctly deparses C<CORE::do>, C<CORE::glob> and slices of empty
-lists.
+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.
+
+=item C<do +{}> and C<do({})>
+
+These are both variants of do-file syntax, but were being deparsed as
+do-blocks.
+
+=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.
+
+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
+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>.
+
+=item Negated single-letter subroutine calls
+
+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<&&>.
+
+=item C<require $this + $that>
+
+In Perl 5.14, C<require> followed by any binary operator started
+deparsing as C<no>.
+
+=back
 
 =item *
 
-L<CGI> has been upgraded from version 3.55 to version 3.58.
+L<Carp> has been upgraded from version 1.23 to version 1.24.
 
-Use public and documented FCGI.pm API in CGI::Fast
-CGI::Fast was using an FCGI API that was deprecated and removed from
-documentation more than ten years ago. Usage of this deprecated API with
-FCGI E<gt>= 0.70 or FCGI E<lt>= 0.73 introduces a security issue.
-L<https://rt.cpan.org/Public/Bug/Display.html?id=68380>
-L<http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2011-2766>
+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<charnames> has been upgraded from version 1.23 to version 1.24.
+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.037 to version 2.042.
+L<Compress::Raw::Bzip2> has been upgraded from version 2.042 to version
+2.045.
 
 =item *
 
-L<Compress::Raw::Zlib> has been upgraded from version 2.037 to version 2.042.
+L<CPAN::Meta::YAML> has been upgraded from version 0.004 to version
+0.005.
 
 =item *
 
-L<Compress::Zlib> has been upgraded from version 2.037 to version 2.042.
+L<CPANPLUS> has been upgraded from version 0.9112 to version 0.9114.
 
 =item *
 
-L<CPANPLUS> has been upgraded from version 0.9111 to version 0.9112.
+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.
 
 =item *
 
-L<CPANPLUS::Dist::Build> has been upgraded from version 0.58 to version 0.60.
+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.
 
 =item *
 
-L<Digest::SHA> has been upgraded from version 5.62 to version 5.63.
+L<Digest::SHA> has been upgraded from version 5.63 to version 5.70.
 
-Added code to allow very large data inputs all at once, which had previously been
-limited to several hundred megabytes at a time
+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 *
 
-L<Errno> has been upgraded from version 1.14 to version 1.15.
+L<Exporter> has been upgraded from version 5.65 to version 5.66.
 
-Choosing an archname containing a @, $ or % character no longer results in
-unintended interpolation in Errno's architecture check.
+It no longer tries to localise C<$_> unnecessarily.
 
 =item *
 
-L<ExtUtils::MakeMaker> has been upgraded from version 6.61_01 to version 6.63_02.
+L<ExtUtils::ParseXS> has been upgraded from version 3.05 to version
+3.07.
 
 =item *
 
-L<feature> has been upgraded from version 1.22 to version 1.23.
+L<IO::Compress::Base> has been upgraded from version 2.042 to version
+2.046.
+
+Added zipdetails utility.
 
 =item *
 
-L<File::DosGlob> has been upgraded from version 1.05 to version 1.06.
+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 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<File::Glob> has been upgraded from version 1.13 to version 1.14.
+L<Module::CoreList> has been upgraded from version 2.58 to version
+2.59.
 
-It has a new C<:bsd_glob> export tag, intended to replace C<:glob>.  Like
-C<:glob> it overrides C<glob> with a function that does not split the glob
-pattern into words, but, unlike C<:glob>, it iterates properly in scalar
-context, instead of returning the last file.
+=item *
 
-There are other changes affecting Perl's own C<glob> operator (which uses
-File::Glob internally, except on VMS).  See L</Performance Enhancements>
-and L</Selected Bug Fixes>.
+L<Module::Loaded> has been upgraded from version 0.06 to version 0.08.
 
 =item *
 
-L<HTTP::Tiny> has been upgraded from version 0.013 to version 0.016.
+L<Pod::LaTeX> has been upgraded from version 0.59 to version 0.60.
+
+Added another LaTeX escape: --- => -{}-{}-
 
-Adds additional shorthand methods for all common HTTP verbs,
-a C<post_form()> method for POST-ing x-www-form-urlencoded data and
-a C<www_form_urlencode()> utility method.
+Pod::LaTeX doesn't handle -- in PODs specially, passing it directly to
+LaTeX, which then proceeds to replace it with a single -.  This patch
+replaces ----- with -{}-{}-{}-{}-
 
 =item *
 
-L<Module::CoreList> has been upgraded from version 2.57 to version 2.58.
+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.
+
+This bug was introduced in Perl 5.15.3.
 
 =item *
 
-L<Opcode> has been upgraded from version 1.20 to version 1.21.
+L<Socket> has been upgraded from version 1.94_02 to version 1.97.
 
 =item *
 
-L<perlfaq> has been upgraded from version 5.0150035 to version 5.0150036.
+L<threads> has been upgraded from version 1.85 to version 1.86.
 
 =item *
 
-L<Socket> as been upgraded from version 1.94_01 to 1.94_02.
+L<Unicode::Collate> has been upgraded from version 0.85 to version
+0.87.
 
-It has new functions and constants for handling IPv6 sockets:
+Tailored compatibility ideographs as well as unified ideographs for the
+locales: ja, ko, zh__big5han, zh__gb2312han, zh__pinyin, zh__stroke.
 
-    pack_ipv6_mreq
-    unpack_ipv6_mreq
-    IPV6_ADD_MEMBERSHIP
-    IPV6_DROP_MEMBERSHIP
-    IPV6_MTU
-    IPV6_MTU_DISCOVER
-    IPV6_MULTICAST_HOPS
-    IPV6_MULTICAST_IF
-    IPV6_MULTICAST_LOOP
-    IPV6_UNICAST_HOPS
-    IPV6_V6ONLY
+Locale/*.pl files are now searched for in @INC.
 
 =item *
 
-L<Storable> has been upgraded from version 2.32 to 2.33.
+L<UNIVERSAL> has been upgraded from version 1.10 to version 1.11.
 
-The ability to add a fake entry to %INC to prevent Log::Agent from loading
-has been restored.  In version 2.27 (included with perl 5.14.0), Storable
-starting producing an error instead.
+Documentation change clarifies return values from UNIVERSAL::VERSION.
 
-=item *
+=back
 
-L<strict> has been upgraded from version 1.04 to version 1.05.
+=head2 Removed Modules and Pragmata
+
+=over 4
 
 =item *
 
-L<Unicode::Collate> has been upgraded from version 0.80 to version 0.85.
+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.
+
+=back
 
-Locales updated to CLDR 2.0: mk, mt, nb, nn, ro, ru, sk, sr, sv, uk,
-zh__pinyin, zh__stroke
-Newly supported locales: bn, fa, ml, mr, or, pa, sa, si, si__dictionary,
-sr_Latn, sv__reformed, ta, te, th, ur, wae.
+=head1 Documentation
 
-=item *
+=head2 Changes to Existing Documentation
 
-L<Unicode::UCD> has been upgraded from version 0.36 to version 0.37.
+=head3 L<perlsec/Laundering and Detecting Tainted Data>
 
-This adds four new functions:  C<prop_aliases()>, and
-C<prop_value_aliases()> which are used to find all the Unicode-approved
-synonyms for property names, or to convert from one name to another;
-C<prop_invlist> which returns all the code points matching a given
-Unicode binary property; and C<prop_invmap> which returns the complete
-specification of a given Unicode property.
+=over 4
 
 =item *
 
-L<UNIVERSAL> has been upgraded from version 1.09 to version 1.10.
+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 remains L<Scalar::Util/tainted>.
 
 =back
 
 =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>.
-
-=head2 New Diagnostics
-
-=head3 New Errors
+=head2 Changes to Existing Diagnostics
 
 =over 4
 
 =item *
 
-L<Source filters apply only to byte streams|perldiag/"Source filters apply only to byte streams">
+Redefinition warnings for constant subroutines used to be mandatory,
+even occurring under C<no warnings>.  Now they respect the L<warnings>
+pragma.
 
-This new error occurs when you try to activate a source filter (usually by
-loading a source filter module) within a string passed to C<eval> under the
-C<unicode_eval> feature.
+=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>.
 
 =item *
 
-L<That use of $[ is unsupported|perldiag/"That use of $[ is unsupported">
+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.
+
+=item *
 
-This previously removed error has been restored with the re-implementation
-of C<$[> as a module.
+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].
 
 =back
 
-=head3 New Warnings
+=head1 Utility Changes
+
+=head3 L<zipdetails>
 
 =over 4
 
 =item *
 
-L<length() used on %s|perldiag/length() used on %s>
+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.
 
-This new warning occurs when C<length> is used on an array or hash, instead
-of C<scalar(@array)> or C<scalar(keys %hash)>.
-
-=item *
+=back
 
-L<$[ used in %s (did you mean $] ?)|perldiag/"$[ used in %s (did you mean $] ?)">
+=head1 Configuration and Compilation
 
-This new warning exists to catch the mistaken use of C<$[> in version
-checks.  C<$]>, not C<$[>, contains the version number.  C<$[> in a numeric
-comparison is almost always wrong.
+=over 4
 
 =item *
 
-L<Use of assignment to $[ is deprecated|perldiag/"Use of assignment to $[ is deprecated">
+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.
 
-This previously removed warning has been restored with the re-implementation
-of C<$[> as a module.
+=item *
 
-=back
+Perl 5.15.5 had a bug in its installation script, which did not install
+F<unicore/Name.pm>.  This has been corrected [perl #104226].
 
-=head2 Changes to Existing Diagnostics
+=item *
 
-=over 4
+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 uninitialized warning for C<y///r> when C<$_> is implicit and undefined
-now mentions the variable name, just like the non-/r variation of the
-operator.
+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 "Applying pattern match..." or similar warning produced when an array
-or hash is on the left-hand side of the C<=~> operator now mentions the
-name of the variable.
+The -Dusesitecustomize and -Duserelocatableinc options now work
+together properly.
 
 =back
 
-=head1 Configuration and Compilation
+=head1 Testing
 
 =over 4
 
 =item *
 
-F<pod/buildtoc>, used by the build process to build L<perltoc>, has been
-refactored and simplified. It now only contains code to build L<perltoc>;
-the code to regenerate Makefiles has been moved to F<Porting/pod_rules.pl>.
-It's a bug if this change has any material effect on the build process.
+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
 
@@ -384,271 +605,337 @@ It's a bug if this change has any material effect on the build process.
 
 =head2 Platform-Specific Notes
 
+=head3 VMS
+
 =over 4
 
-=item GNU/Hurd
+=item *
 
-Numerous build and test failures on GNU/Hurd have been resolved with hints
-for building DBM modules, detection of the library search path, and enabling
-of large file support.
+A link-time error on VMS versions without C<symlink> support was
+introduced in 5.15.1, but has now been corrected.
 
-=item OpenVOS
+=item *
 
-Perl is now built with dynamic linking on OpenVOS, the minimum supported
-version of which is now Release 17.1.0.
+Explicit support for VMS versions prior to v7.0 and DEC C versions
+prior to v6.0 has been removed.
 
-=item SunOS
+=item *
 
-The CC workshop C++ compiler is now detected and used on systems that ship
-without cc.
+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/test.pl as a file).  This problem
+has been corrected.
 
 =back
 
-=head1 Internal Changes
+=head1 Selected Bug Fixes
 
 =over 4
 
 =item *
 
-C<PL_curstash> is now reference-counted.
+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:
 
-=back
+    for (1..10_000_000) {
+        if ("foo" =~ /(foo|(?<capture>bar))?/) {
+            my $capture = $+{capture}
+        }
+    }
+    system "ps -o rss $$"'
 
-=head1 Selected Bug Fixes
+=item *
 
-=over 4
+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<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.
+
+=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.)
+
+=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.)
+
+=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> redefined an existing
+subroutine:
+
+    use warnings;
+    BEGIN {
+        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.
 
 =item *
 
-Perl now holds an extra reference count on the package that code is
-currently compiling in.  This means that the following code no longer crashes [perl #101486]:
+The internal check to see whether a redefinition warning should occur
+used to emit "uninitialized" warnings in cases like this:
 
-    package Foo;
-    BEGIN {*Foo:: = *Bar::}
-    sub foo;
+    use warnings "uninitialized";
+    use constant {u => undef, v => undef};
+    sub foo(){u}
+    sub foo(){v}
 
 =item *
 
-F<dumpvar.pl>, and consequently the C<x> command in the debugger, have been
-fixed to handle objects blessed into classes whose names contain "=".  The
-contents of such objects used not to be dumped [perl #101814].
+A bug fix in Perl 5.14 introduced a new bug, causing "uninitialized"
+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 *
 
-The C<x> repetition operator no longer crashes on 64-bit builds with large
-repeat counts [perl #94560].
+C<< version->new("version") >> and C<printf "%vd", "version"> no longer
+crash [perl #102586].
 
 =item *
 
-A fix to C<glob> under miniperl (used to configure modules when perl itself
-is built) in Perl 5.15.3 stopped C<< <~> >> from returning the home
-directory, because it cleared %ENV before calling csh.  Now C<$ENV{HOME}>
-is preserved.  This fix probably does not affect anything.  If
-L<File::Glob> fails to load for some reason, Perl reverts to using csh.
-So it would apply in that case.
+C<$tied =~ y/a/b/>, C<chop $tied> and C<chomp $tied> now call FETCH
+just once when $tied holds a reference.
 
 =item *
 
-On OSes other than VMS, Perl's C<glob> operator (and the C<< <...> >> form)
-use L<File::Glob> underneath.  L<File::Glob> splits the pattern into words,
-before feeding each word to its C<bsd_glob> function.
+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.
 
-There were several inconsistencies in the way the split was done.  Now
-quotation marks (' and ") are always treated as shell-style word delimiters
-(that allow whitespace as part of a word) and backslashes are always
-preserved, unless they exist to escape quotation marks.  Before, those
-would only sometimes be the case, depending on whether the pattern
-contained whitespace.  Also, escaped whitespace at the end of the pattern
-is no longer stripped [perl #40470].
+=item *
+
+Four-argument C<select> no longer produces its "Non-string passed as
+bitmask" warning on tied or tainted variables that are strings.
 
 =item *
 
-C<CORE::glob> now works as a way to call the default globbing function.  It
-used to respect overrides, despite the C<CORE::> prefix.
+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 *
 
-In 5.14, C</[[:lower:]]/i> and C</[[:upper:]]/i> no longer matched the
-opposite case.  This has been fixed [perl #101970].
+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 *
 
-A regular expression match with an overloaded object on the right-hand side
-would in some cases stringify the object too many times.
+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.
 
 =item *
 
-The C-level C<pregcomp> function could become confused as to whether the
-pattern was in UTF8 if the pattern was an overloaded, tied, or otherwise
-magical scalar [perl #101940].
+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 *
 
-A regression has been fixed that was introduced in 5.14, in C</i>
-regular expression matching, in which a match improperly fails if the
-pattern is in UTF-8, the target string is not, and a Latin-1 character
-precedes a character in the string that should match the pattern.  [perl
-#101710]
+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 *
 
-C<@{"..."} = reverse ...> started crashing in 5.15.3.  This has been fixed.
+Assigning C<__PACKAGE__> or any other shared hash key scalar to a stash
+element no longer causes a double free.  Regardless of this change, the
+results of such assignments are still undefined.
 
 =item *
 
-C<ref> in a tainted expression started producing an "sv_upgrade" error in
-5.15.4.  This has been fixed.
+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 *
 
-Weak references to lexical hashes going out of scope were not going stale
-(becoming undefined), but continued to point to the hash.
+Creating a C<UNIVERSAL::AUTOLOAD> sub no longer stops C<%+>, C<%-> and
+C<%!> from working some of the time [perl #105024].
 
 =item *
 
-Weak references to lexical variables going out of scope are now broken
-before any magical methods (e.g., DESTROY on a tie object) are called.
-This prevents such methods from modifying the variable that will be seen
-the next time the scope is entered.
+When presented with malformed UTF-8 input, the XS-callable functions
+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.
 
 =item *
 
-A C<keys> optimisation in Perl 5.12.0 to make it faster on empty hashes
-caused C<each> not to reset the iterator if called after the last element
-was deleted.  This has been fixed.
+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 *
 
-The C<#line 42 foo> directive used not to update the arrays of lines used
-by the debugger if it occurred in a string eval.  This was partially fixed
-in 5.14, but it only worked for a single C<#line 42 foo> in each eval.  Now
-it works for multiple.
+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 *
 
-String eval used not to localise C<%^H> when compiling its argument if it
-was empty at the time the C<eval> call itself was compiled.  This could
-lead to scary side effects, like C<use re "/m"> enabling other flags that
-the surrounding code was trying to enable for its caller [perl #68750].
+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|""!=!~//|>
 
 =item *
 
-Creating a BEGIN block from XS code (via C<newXS> or C<newATTRSUB>) would,
-on completion, make the hints of the current compiling code the current
-hints.  This could cause warnings to occur in a non-warning scope.
+The "c [line num]" debugger command was broken by other debugger
+changes released in 5.15.3.  This is now fixed.
 
 =item *
 
-C<eval $string> and C<require> no longer localise hints (C<$^H> and C<%^H>)
-at run time, but only during compilation of the $string or required file.
-This makes C<BEGIN { $^H{foo}=7 }> equivalent to
-C<BEGIN { eval '$^H{foo}=7' }> [perl #70151].
+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 *
 
-When subroutine calls are intercepted by the debugger, the name of the
-subroutine or a reference to it is stored in C<$DB::sub>, for the debugger
-to access.  In some cases (such as C<$foo = *bar; undef *bar; &$foo>)
-C<$DB::sub> would be set to a name that could not be used to find the
-subroutine, and so the debugger's attempt to call it would fail.  Now the
-check to see whether a reference is needed is more robust, so those
-problems should not happen anymore [rt.cpan.org #69862].
+The debugger prompt did not display the current line.  This was broken
+in 5.15.3.  This is now fixed.
 
 =item *
 
-Localising a tied scalar that returns a typeglob no longer stops it from
-being tied till the end of the scope.
+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 *
 
-When C<open> is called with three arguments, the third being a file handle
-(as in C<< open $fh, ">&", $fh2 >>), if the third argument is tied or a
-reference to a tied variable, FETCH is now called exactly once, instead of
-0, 2, or 3 times (all of which could occur in various circumstances).
+The debugger no longer tries to do C<local $_> when dumping data
+structures.
 
 =item *
 
-C<sort> no longer ignores FETCH when passed a reference to a tied glob for
-the comparison routine.
+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].
 
 =item *
 
-Warnings emitted by C<sort> when a custom comparison routine returns a
-non-numeric value now show the line number of the C<sort> operator, rather
-than the last line of the comparison routine.  The warnings also occur now
-only if warnings are enabled in the scope where C<sort> occurs.  Previously
-the warnings would occur if enabled in the comparison routine's scope.
+A regression in 5.14 caused these statements not to set the internal
+variable that holds the handle used by C<$.>:
+
+    my $fh = *STDOUT;
+    tell $fh;
+    eof  $fh;
+    seek $fh, 0,0;
+    tell     *$fh;
+    eof      *$fh;
+    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].
 
 =item *
 
-C<Internals::SvREFCNT> now behaves consistently in 'get' and 'set' scenarios
-[perl #103222] and also treats the reference count as unsigned.
+Version comparisons, such as those that happen implicitly with C<use
+v5.43>, no longer cause locale settings to change [perl #105784].
 
 =item *
 
-Calling C<require> on an implicit C<$_> when C<*CORE::GLOBAL::require> has
-been overridden does not segfault anymore, and C<$_> is now passed to the
-overriding subroutine [perl #78260].
+F<pod/buildtoc>, which generates L<perltoc>, put path names in the
+L<perltoc> file.  This bug was introduced in 5.15.1.
 
 =back
 
-=head1 Acknowledgements
+=head1 Acknowledgments
 
-Perl 5.15.5 represents approximately 1 month of development since Perl 5.15.4
-and contains approximately 28,000 lines of changes across 440 files from 29
-authors.
+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.5:
+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:
 
-Brian Fraser, Chris 'BinGOs' Williams, chromatic, Craig A. Berry, David Golden,
-Father Chrysostomos, Florian Ragwitz, H.Merijn Brand, Jilles Tjoelker, Jim
-Meyering, Karl Williamson, Laurent Dami, Leon Timmermans, Mark A. Stratman,
-Matthew Horsfall, Michael G Schwern, Moritz Lenz, Nicholas Clark, Paul Evans,
-Paul Green, Paul Johnson, Perlover, Pino Toscano, Reini Urban, Steve Hay, Tom
-Christiansen, Tony Cook, Vincent Pit, Zefram.
+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.
 
-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.
+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.
 
-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.
+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.
 
-For a more complete list of all of Perl's historical contributors, please see
-the F<AUTHORS> file in the Perl source distribution.
+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.