This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
mktables: Don't add exact duplicate to tables
[perl5.git] / pod / perldelta.pod
index e01b799..07a684a 100644 (file)
@@ -1,26 +1,25 @@
 =encoding utf8
 
 =for comment
-This has been completed up to 8d0b139, except for
-b0f2e9e nwclark     Fix two bugs related to pod files outside of pod/ (important enough?)
-43d9ecf jpeacock    Set all version object math ops to noop
-f300909 smueller    EU::ParseXS: Silence warning (probably unnecessary)
+This has been completed up to 0aae26c14, except for:
+803e389        rurban  CYG17 utf8 paths
+d9298c1        rurban  mymalloc isn't thread safe
 
 =head1 NAME
 
 [ this is a template for a new perldelta file. Any text flagged as
 XXX needs to be processed before release. ]
 
-perldelta - what is new for perl v5.15.6
+perldelta - what is new for perl v5.15.8
 
 =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.7 release and
+the 5.15.8 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.
+If you are upgrading from an earlier release such as 5.15.6, first read
+L<perl5157delta>, which describes differences between 5.15.6 and
+5.15.7.
 
 =head1 Notice
 
@@ -34,23 +33,108 @@ 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.
-
-=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.
-
-=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)>.
+=head2 Improved ability to mix locales and Unicode, including UTF-8 locales
+
+An optional parameter has been added to C<use locale>
+
+ use locale ':not_characters';
+
+which tells Perl to use all but the C<LC_CTYPE> and C<LC_COLLATE>
+portions of the current locale.  Instead, the character set is assumed
+to be Unicode.  This allows locales and Unicode to be seamlessly mixed,
+including the increasingly frequent UTF-8 locales.  When using this
+hybrid form of locales, the C<:locale> layer to the L<open> pragma can
+be used to interface with the file system, and there are CPAN modules
+available for ARGV and environment variable conversions.
+
+Full details are in L<perllocale>.
+
+=head2 New function C<fc> and corresponding escape sequence C<\F> for Unicode foldcase
+
+Unicode foldcase is an extension to lowercase that gives better results
+when comparing two strings case-insensitively.  It has long been used
+internally in regular expression C</i> matching.  Now it is available
+explicitly through the new C<fc> function call (enabled by
+S<C<"use feature 'fc'">>, or C<use v5.16>, or explicitly callable via
+C<CORE::fc>) or through the new C<\F> sequence in double-quotish
+strings.
+
+Full details are in L<perlfunc/fc>.
+
+=head2 C<_> in subroutine prototypes
+
+The C<_> character in subroutine prototypes is now allowed before C<@> or
+C<%>.
+
+=head2 Supports (I<almost>) Unicode 6.1
+
+Besides the addition of whole new scripts, and new characters in
+existing scripts, this new version of Unicode, as always, makes some
+changes to existing characters.  One change that may trip up some
+applications is that the General Category of two characters in the
+Latin-1 range, PILCROW SIGN and SECTION SIGN, has been changed from
+Other_Symbol to Other_Punctuation.  The same change has been made for
+a character in each of Tibetan, Ethiopic, and Aegean.
+The code points U+3248..U+324F (CIRCLED NUMBER TEN ON BLACK SQUARE
+through CIRCLED NUMBER EIGHTY ON BLACK SQUARE) have had their General
+Category changed from Other_Symbol to Other_Numeric.  The Line Break
+property has changes for Hebrew and Japanese; and as a consequence of
+other changes in 6.1, the Perl regular expression construct C<\X> now
+works differently for some characters in Thai and Lao.
+
+New aliases (synonyms) have been defined for many property values;
+these, along with the previously existing ones, are all cross indexed in
+L<perluniprops>.
+
+The return value of C<charnames::viacode> is affected by other changes.
+One of these is that the preferred name (which is what C<viacode>
+returns) for the character at U+2118 has been changed from SCRIPT CAPITAL P
+to WEIERSTRASS ELLIPTIC FUNCTION.  But most of these changes are the
+fallout of the mistake Unicode 6.0 made in naming a character used in
+Japanese cell phones to be "BELL", which conflicts with the long
+standing industry use of (and Unicode's recommendation to use) that name
+to mean the ASCII control character at U+0007.  As a result, that name
+has been deprecated in Perl since v5.14; and any use of it will raise a
+warning message (unless turned off).  The name "ALERT" is now the
+preferred name for this code point, with "BEL" being an acceptable short
+form.  The name for the new cell phone character, at code point U+1F514,
+remains undefined in this version of Perl (hence we don't quite
+implement all of Unicode 6.1), but starting in v5.18, BELL will mean
+this character, and not U+0007.
+
+Unicode has taken steps to make sure that this sort of mistake does not
+happen again.  The Standard now includes all the generally accepted
+names and abbreviations for control characters, whereas previously it
+didn't.  This means that all the names that Perl had previously
+deprecated (except BELL) are no longer deprecated, such as FILE
+SEPARATOR.  Also, the names for four rarely used characters are subtly
+different (a hyphen instead of a space) than before:
+
+ Code point    Old Name         New Name
+   U+008E    SINGLE-SHIFT 2   SINGLE-SHIFT-2
+   U+008F    SINGLE-SHIFT 3   SINGLE-SHIFT-3
+   U+0091    PRIVATE USE 1    PRIVATE USE-1
+   U+0092    PRIVATE USE 2    PRIVATE USE-2
+
+Perl will accept either name as input, but C<charnames::viacode> now
+returns the new name.
+
+Additional name abbreviations are accepted:
+SP for SPACE;
+TAB for CHARACTER TABULATION;
+NEW LINE, END OF LINE, NL, and EOL for LINE FEED;
+LOCKING-SHIFT ONE for SHIFT OUT;
+LOCKING-SHIFT ZERO for SHIFT IN;
+and ZWNBSP for ZERO WIDTH NO-BREAK SPACE.
+
+More details on this version of Unicode are provided in
+L<http://www.unicode.org/versions/Unicode6.1.0/>.
+
+=head2 Added C<is_utf8_char_buf()>
+
+This function is designed to replace the deprecated L</is_utf8_char()>
+function.  It includes an extra parameter to make sure it doesn't read
+past the end of the input buffer.
 
 =head1 Security
 
@@ -58,172 +142,58 @@ 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.
+[ List each security issue as a =head2 entry ]
 
-=head2 Other C<is_utf8_foo()> functions, as well as C<utf8_to_foo()>, etc.
+=head2 Use C<is_utf8_char_buf()> and not C<is_utf8_char()>
 
-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()>.
+The latter function is now deprecated because its API is insufficient to
+guarantee that it doesn't read (up to 12 bytes in the worst case) beyond
+the end of its input string.  See
+L<is_utf8_char_buf()|/Added is_utf8_char_buf()>.
 
 =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.
+    If any exist, they are bugs, and we request that you submit a
+    report.  See L</Reporting Bugs> below.
 
 [ List each incompatible change as a =head2 entry ]
 
-=head2 C<use I<VERSION>>
+=head2 Special blocks called in void context
 
-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:
+Special blocks (C<BEGIN>, C<CHECK>, C<INIT>, C<UNITCHECK>, C<END>) are now
+called in void context.  This avoids wasteful copying of the result of the
+last statement [perl #108794].
 
-    use 5.016;
-    # 5.16 features enabled here
-    use 5.014;
-    # 5.16 features disabled here
+=head2 The C<overloading> pragma and regexp objects
 
-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:
+With C<no overloading>, regular expression objects returned by C<qr//> are
+now stringified as "Regexp=REGEXP(0xbe600d)" instead of the regular
+expression itself [perl #108780].
 
-    no strict;
-    use 5.012;
-    # no strict here
+=head2 Two XS typemap Entries removed
 
-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.
+Two presumably unused XS typemap entries have been removed from the
+core typemap: T_DATAUNIT and T_CALLBACK. If you are, against all odds,
+a user of these, please see the instructions on how to regain them
+in L<perlxstypemap>.
 
-C<$[> 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'>.
+=head2 Unicode 6.1 has incompatibilities with Unicode 6.0
 
-=head2 C<UNIVERSAL::VERSION>
+These are detailed in L</Supports (almost) Unicode 6.1> above.
 
-The change to C<UNIVERSAL::VERSION> in 5.15.2 has been reverted.  It now
-returns a stringified version object once more.
+=head2 Changed returns for some properties in C<Unicode::UCD::prop_invmap()>
 
-=head2 C<substr> lvalue revamp
+The return values for C<prop_invmap> have been changed for some
+properties to make the returned lists significantly smaller.  This
+allows those lists to be searched faster.
 
-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.
-
-These changes result in several incompatible changes and bug fixes:
-
-=over
-
-=item *
+This function was introduced earlier in the v5.15 series of releases,
+and the API will not be considered stable until v5.16.
 
-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 *
-
-Tied (and otherwise magical) variables are no longer exempt from the
-"Attempt ot use reference as lvalue in substr" warning.
-
-=item *
-
-That warning now occurs when the returned lvalue is assigned to, not when
-C<substr> itself is called.  This only makes a difference if the return
-value of C<substr> is referenced and assigned to later.
-
-=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, 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.
-
-=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].
-
-=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.
-
-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>;             # $foo is now the last-accessed handle
-    $foo = 3;           # no longer a glob
-    $foo = *STDERR;     # still the last-accessed handle
-
-Now the C<$foo = 3> assignment unset that internal variable, so there is no
-last-accessed filehandle, just as if C<< <$foo> >> had never happened.
-
-=head2 XS API tweak
-
-The C<newCONSTSUB_flags> C-level function, added in 5.15.4, now has a
-C<len> parameter.
+See L<Unicode::UCD/prop_invmap()> for details on the new interface.
 
 =head1 Deprecations
 
@@ -233,6 +203,12 @@ listed as an updated module in the L</Modules and Pragmata> section.
 
 [ List each deprecation as a =head2 entry ]
 
+=head2 C<is_utf8_char()>
+
+This function is deprecated because it could read beyond the end of the
+input string.  Use the new L<is_utf8_char_buf()|/Added is_utf8_char_buf()>
+instead.
+
 =head1 Performance Enhancements
 
 XXX Changes which enhance performance without changing behaviour go here. There
@@ -244,29 +220,7 @@ may well be none in a stable release.
 
 =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:
-
-    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 *
-
-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.
+XXX
 
 =back
 
@@ -288,7 +242,8 @@ cribbed.
 
 =item *
 
-XXX
+The C<mmap> PerlIO layer is no longer implemented by perl itself, but has
+been moved out into the new L<PerlIO::mmap> module.
 
 =back
 
@@ -298,213 +253,128 @@ XXX
 
 =item *
 
-L<Archive::Tar> has been upgraded from version 1.80 to version 1.82.
+L<arybase> has been upgraded from version 0.03 to version 0.04.
 
-Adjustments to handle files >8gb (>0777777777777 octal) and a feature to
-return the MD5SUM of files in the archive.
+List slices no longer modify items on the stack belonging to outer lists
+[perl #109570].
 
 =item *
 
-L<AutoLoader> has been upgraded from version 5.71 to version 5.72.
-
-=item *
+L<B> has been upgraded from version 1.33 to version 1.34.
 
-L<B::Debug> has been upgraded from version 1.16 to version 1.17.
+C<B::COP> now has a C<stashflags> method, corresponding to a new internal
+field added in 5.15.4 [perl #108860].
 
 =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:
-
-=over
-
-=item C<sort(foo(bar))>
-
-C<sort foo(bar)>, how it used to deparse, makes foo the sort routine,
-rather than a regular function call.
-
-=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.
-
-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 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.
+L<Carp> has been upgraded from version 1.24 to version 1.25.
 
-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
-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
+It now puts a dot after the file and line number, just like errors from
+C<die> [perl #106538].
 
 =item *
 
-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].
+L<Compress::Raw::Bzip2> has been upgraded from version 2.045 to version 2.048.
 
 =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.045 to version 2.048.
 
 =item *
 
-L<Compress::Raw::Bzip2> has been upgraded from version 2.042 to version 2.045.
+L<Compress::Zlib> has been upgraded from version 2.046 to version 2.048.
 
 =item *
 
-L<CPAN::Meta::YAML> has been upgraded from version 0.004 to version 0.005.
+L<CPAN::Meta> has been upgraded from version 2.113640 to version 2.120351.
+
+Work around a memory leak bug involving version objects in boolean context.
 
 =item *
 
-L<CPANPLUS> has been upgraded from version 0.9112 to version 0.9113.
+L<CPAN::Meta::YAML> has been upgraded from version 0.005 to version 0.007.
 
 =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.
+L<DB_File> has been upgraded from version 1.824 to version 1.826.
 
 =item *
 
-L<diagnostics> has been upgraded from version 1.25 to version 1.26.
+L<diagnostics> has been upgraded from version 1.27 to version 1.28.
 
-It now understands the "%X" format code, which some error messages started
-using in Perl 5.14.0.
+When searching for F<perldiag.pod>, it no longer uses paths that were only
+relevant on Perl 5.004 and earlier.
 
 =item *
 
-L<Digest::SHA> has been upgraded from version 5.63 to version 5.70.
+L<ExtUtils::ParseXS> has been upgraded from version 3.12 to version 3.15.
 
-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.
+The new version comes with important tools for sharing typemaps between
+different CPAN distributions.
 
 =item *
 
-L<Exporter> has been upgraded from version 5.65 to version 5.66.
+L<File::Copy> has been upgraded from version 2.21 to version 2.23.
 
-It no longer tries to localise C<$_> unnecessarily.
+It no longer emits warnings when copying files with newlines in their names
+[perl #109104].
 
 =item *
 
-L<ExtUtils::ParseXS> has been upgraded from version 3.05 to version 3.07.
+L<IPC::Cmd> has been upgraded from version 0.72 to version 0.76.
 
 =item *
 
-L<IO::Compress::Base> has been upgraded from version 2.042 to version 2.046.
+L<Math::Complex> has been upgraded from version 1.58 to version 1.59.
 
-Added zipdetails utility.
+This avoids a new core warning.
 
 =item *
 
-L<Locale::Codes> has been upgraded from version 3.18 to version 3.20.
+L<Module::Metadata> has been upgraded from version 1.000007 to version 1.000009.
 
-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.
+Adds C<provides> method to generate a CPAN META provides data structure
+correctly; use of C<package_versions_from_directory> is discouraged.
 
 =item *
 
-L<Module::Loaded> has been uprgaded from version 0.06 to version 0.08.
+L<Parse::CPAN::Meta> has been upgraded from version 1.4401 to version 1.4402.
 
 =item *
 
-L<Pod::LaTeX> has been upgraded from version 0.59 to version 0.60.
-
-Added another LaTeX escape: --- => -{}-{}-
-
-Pod::LaTeX doesn't handle -- in PODs specially, passing it directly to
-LaTeX, which then proceeds to replace it with a single -. This patch
-replaces ----- with -{}-{}-{}-{}-
+L<Pod::Parser> has been upgraded from version 1.37 to version 1.51.
 
 =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.
+L<Term::ReadLine> has been upgraded from version 1.07 to version 1.08.
 
-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.
+Its C<tkRunning> method now supports L<AnyEvent> event loops, and not just
+L<Tk>.  A more general mechanism has been proposed, so this may be reverted
+before Perl 5.16 [perl #108470].
 
 =item *
 
-L<Socket> has been upgraded from version 1.94_02 to version 1.97.
+L<Time::HiRes>  has been upgraded from version 1.9724 to version 1.9725.
 
-=item *
-
-L<threads> has been upgraded from version 1.85 to version 1.86.
+C<Time::HiRes::stat()> no longer corrupts the Perl stack.
 
 =item *
 
-L<Unicode::Collate> has been upgraded from version 0.85 to version 0.87.
+L<Unicode::UCD> has been upgraded from version 0.39 to 0.40.
+
+The only change is to fix a formatting error in the Pod.
 
-Tailored compatibility ideographs as well as unified ideographs for
-the locales: ja, ko, zh__big5han, zh__gb2312han, zh__pinyin, zh__stroke.
+=item *
 
-Now Locale/*.pl files are searched in @INC.
+L<Version::Requirements> has been upgraded from version 0.101021 to version 0.101022.
 
 =item *
 
-L<UNIVERSAL> has been upgraded from version 1.10 to version 1.11.
+L<POSIX> has been upgraded from version 1.28 to version 1.29..
 
-Documentation change clarifies return values from UNIVERSAL::VERSION.
+It now has a wrapper for the C<strptime(3)> function, it's not
+exported on C<use POSIX;> due to backwards compatibility concerns, it
+has to be explicitly requested with C<use POSIX qw(strptime)>.
 
 =back
 
@@ -514,13 +384,7 @@ Documentation change clarifies return values from UNIVERSAL::VERSION.
 
 =item *
 
-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.
+XXX
 
 =back
 
@@ -533,6 +397,12 @@ file and be sure to link to the appropriate page, e.g. L<perlfunc>.
 
 XXX Changes which create B<new> files in F<pod/> go here.
 
+=head3 L<perlxstypemap>
+
+The new manual describes the XS typemapping mechanism in unprecedented
+detail and combines new documentation with information extracted from
+L<perlxs> and the previously unofficial list of all core typemaps.
+
 =head3 L<XXX>
 
 XXX Description of the purpose of the new file here
@@ -543,16 +413,13 @@ 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>
+=head3 L<XXX>
 
 =over 4
 
 =item *
 
-The example function for checking for taintedness contained a subtle
-error.  C<$@> needs to be localized to prevent its changing this
-global's value outside the function.  The preferred method to check for
-this, though, remains to use L<Scalar::Util/tainted>.
+XXX Description of the change here
 
 =back
 
@@ -605,28 +472,7 @@ XXX Changes (i.e. rewording) of diagnostic messages go here
 
 =item *
 
-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>.
-
-=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.
-
-=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].
+XXX Describe change here
 
 =back
 
@@ -639,14 +485,13 @@ here. Most of these are built within the directories F<utils> and F<x2p>.
 entries for each change
 Use L<XXX> with program names to get proper documentation linking. ]
 
-=head3 L<zipdetails>
+=head3 L<XXX>
 
 =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.
+XXX
 
 =back
 
@@ -663,21 +508,7 @@ L</Platform Support> section, instead.
 
 =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.
-
-=item *
-
-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].
-
-XXX Is that Perl version correct?  Is the file path correct?
-
-=item *
-
-The -Dusesitecustomize and -Duserelocatableinc options now work together
-properly.
+XXX
 
 =back
 
@@ -695,10 +526,12 @@ that they represent may be covered elsewhere.
 
 =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.
+XXX
+
+=item *
+
+The test suite for typemaps has been extended to cover a larger fraction of
+the core typemaps.
 
 =back
 
@@ -743,27 +576,11 @@ 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 *
-
-A link-time error on VMS versions without C<symlink> support was
-introduced in 5.15.1, but has now been corrected.
-
-=item *
-
-Explicit support for VMS versions prior to v7.0 and DEC C versions prior
-to v6.0 has been removed.
-
-=item *
+=item XXX-some-platform
 
-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.
+XXX
 
 =back
 
@@ -795,235 +612,85 @@ L</Modules and Pragmata>.
 
 =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:
-
-    for (1..10_000_000) {
-       if ("foo" =~ /(foo|(?<capture>bar))?/) {
-           my $capture = $+{capture}
-       }
-    }
-    system "ps -o rss $$"'
-
-=item *
-
-A constant subroutine assigned to a glob whose name contains a null will no
-longer cause extra globs to pop into existence when the constant is
-referenced under its new name.
-
-=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.
+C<~~> now correctly handles the precedence of Any~~Object, and is not tricked
+by an overloaded object on the left-hand side.
 
 =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.)
+C<stat _> no longer warns about unopened filehandles [perl #71002].
 
 =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.)
+C<stat> on an unopened filehandle now warns consistently, instead of
+skipping the warning at times.
 
 =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:
-
-    use warnings;
-    BEGIN {
-       no warnings;
-       some_XS_function_that_calls_new_CONSTSUB();
-    }
+A change in an earlier 5.15 release caused warning hints to propagate into
+C<do $file>.  This has been fixed [rt.cpan.org #72767].
 
 =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.
+Starting with 5.12.0, Perl used to get its internal bookkeeping muddled up
+after assigning C<${ qr// }> to a hash element and locking it with
+L<Hash::Util>.  This could result in double frees, crashes or erratic
+behaviour.
 
 =item *
 
-The internal check to see whether a redefinition warning should occur used
-to emit "uninitialized" warnings in cases like this:
-
-    use warnings "uninitialized";
-    use constant {u=>undef,v=>undef};
-    sub foo(){u} sub foo(){v}
+In 5.15.7, some typeglobs in the CORE namespace were made read-only by
+mistake.  This has been fixed [rt.cpan.org #74289].
 
 =item *
 
-A bug fix in Perl 5.14 introduced a new bug, causing "uninitialized"
-warnings to report the wrong variable if the operator in question has
-two operands and one is C<%{...}> or C<@{...}>.  This has been fixed
-[perl #103766].
+C<-t> now works when stacked with other filetest operators [perl #77388].
 
 =item *
 
-C<< version->new("version") >> and C<printf "%vd", "version"> no longer
-crash [perl #102586].
+Stacked filetest operators now only call FETCH once on a tied argument.
 
 =item *
 
-C<$tied =~ y/a/b/>, C<chop $tied> and C<chomp $tied> now call FETCH just
-once when $tied holds a reference.
+C</.*/g> would sometimes refuse to match at the end of a string that ends
+with "\n".  This has been fixed [perl #109206].
 
 =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.
+C<m/[[:ascii:]]/i> and C</\p{ASCII}/i> now match identically (when not
+under a differing locale).  This fixes a regression introduced in 5.14
+in which the first expression could match characters outside of ASCII,
+such as the KELVIN SIGN.
 
 =item *
 
-Four-argument C<select> no longer produces its "Non-string passed as
-bitmask" warning on tied or tainted variables that are strings.
-
-=item *
+Method calls whose arguments were all surrounded with C<my()> or C<our()>
+(as in C<<$object->method(my($a,$b)) >>) used to force lvalue context on
+the subroutine.  This would prevent lvalue methods from returning certain
+values.  Due to lvalue fixes earlier in the 5.15.x series, it would also
+prevent non-lvalue methods from being called [perl #109264].
 
-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.
-
-=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.
-
-=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
-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.
-
-=item *
-
-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 *
-
-Creating a C<UNIVERSAL::AUTOLOAD> sub no longer stops C<%+>, C<%-> and
-C<%!> from working some of the time [perl #105024].
-
-=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.
-
-=item *
-
-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 *
-
-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
-implementations, too [perl #104034].
-
-=item *
-
-A bug fix in 5.15.5 could sometimes result in assertion failures under
-debugging builds of perl for certain syntax errors in C<eval>, such as
-C<eval(q|""!=!~//|);>
-
-=item *
-
-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.
-
-=item *
-
-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].
+=for comment
+This bug I<did> affect earlier stable releases.  It is just the last
+sentence that does not apply to 5.14.
 
 =item *
 
-The debugger no longer tries to do C<local $_> when dumping data
-structures.
+The C<SvPVutf8> C function no longer tries to modify its argument,
+resulting in errors [perl #108994].
 
 =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
-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].
+C<SvPVutf8> now works properly with magical variables.
 
 =item *
 
-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].
+C<SvPVbyte> now works properly non-PVs.
 
 =item *
 
-Version comparisons, such as those that happen implicitly with
-C<use v5.43>, no longer cause locale settings to change [perl #105784].
+C</[[:ascii:]]/> and C</[[:blank:]]/> now use locale rules under
+C<use locale> when the platform supports that.  Previously, they used
+the platform's native character set.
 
 =back
 
@@ -1055,7 +722,7 @@ here.
 
 XXX Generate this with:
 
-  perl Porting/acknowledgements.pl v5.15.5..HEAD
+  perl Porting/acknowledgements.pl v5.15.7..HEAD
 
 =head1 Reporting Bugs