This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Build failed in Jenkins: perl5 #80
[perl5.git] / pod / perldelta.pod
index 98d56fb..4ecffe4 100644 (file)
@@ -1,24 +1,32 @@
 =encoding utf8
 
 =for comment
-This has been completed up to 84c2f6fdcb.
-
+This has been completed up to c19fd8b40, except for:
+d9018cbe5b480ba29cc6151aba8f5102a7e009c4 (Eric Brine)
+    -- while I (use git blame to find out who) see how this change within
+       lex_read_unichar is correct, I cannot tell at a glance what visible
+       effects this bug has at the Perl level or through the lexer API.
+a04eb69c733e84250299f12df200f10b76b0a45c (David Golden)
+7a799f6bb3cac2e1bf9bede83579324cffa59c16 (David Golden)
+be48bbe8d671b6841c3ec7cb734b98071afe3cd9 (Chip)
+b64f48ffd8bf2c857b777e167188f0434333cc7b (Steffen Müller)
+1d2615b4c7e80af2a76441add35092ec4d81724f (Steffen Müller)
 
 =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.3
+perldelta - what is new for perl v5.15.4
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.15.2 release and
-the 5.15.3 release.
+This document describes differences between the 5.15.3 release and
+the 5.15.4 release.
 
-If you are upgrading from an earlier release such as 5.15.1, first read
-L<perl5152delta>, which describes differences between 5.15.1 and
-5.15.2.
+If you are upgrading from an earlier release such as 5.15.3, first read
+L<perl5153delta>, which describes differences between 5.15.3 and
+5.15.4.
 
 =head1 Notice
 
@@ -26,362 +34,273 @@ 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 More CORE subs are callable through references
+=head2 $^X converted to an absolute path on FreeBSD, OS X and Solaris
 
-Perl 5.15.2 introduced subroutines in the CORE namespace.  Most of them
-could only be called as barewords; i.e., they could be aliased at compile
-time and then inlined under new names.
+C<$^X> is now converted to an absolute path on OS X, FreeBSD (without
+needing F</proc> mounted) and Solaris 10 and 11. This augments the
+previous approach of using F</proc> on Linux, FreeBSD and NetBSD
+(in all cases, where mounted).
 
-Almost all of these functions can now be called through references and via
-C<&foo()> syntax, bypassing the prototype.  See L<CORE> for a list of the
-exceptions.
+This makes relocatable perl installations more useful on these platforms.
+(See "Relocatable @INC" in F<INSTALL>)
 
-=head2 New debugger commands
+=head2 Unicode Symbol Names
 
-The debugger now has C<disable> and C<enable> commands for disabling
-existing breakpoints and reënabling them.  See L<perldebug>.
+Perl now has proper support for Unicode in symbol names.  It used to be
+that C<*{$foo}> would ignore the internal UTF8 flag and use the bytes of
+the underlying representation to look up the symbol.  That meant that
+C<*{"\x{100}"}> and C<*{"\xc4\x80"}> would return the same thing.  All
+these parts of Perl have been fixed to account for Unicode:
 
-=head1 Security
+=over
 
-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.
+=item *
 
-[ List each security issue as a =head2 entry ]
+Method names (including those passed to C<use overload>)
 
-=head2 C<File::Glob::bsd_glob()> memory error with GLOB_ALTDIRFUNC (CVE-2011-2728).
+=item *
 
-Calling C<File::Glob::bsd_glob> with the unsupported flag GLOB_ALTDIRFUNC would 
-cause an access violation / segfault.  A Perl program that accepts a flags value from
-an external source could expose itself to denial of service or arbitrary code
-execution attacks.  There are no known exploits in the wild.  The problem has been
-corrected by explicitly disabling all unsupported flags and setting unused function
-pointers to null.  Bug reported by Clément Lecigne.
+Typeglob names (including names of variables, subroutines and filehandles)
 
-=head1 Incompatible Changes
+=item *
 
-=head2 $[ has been removed
+Package names
 
-The array/string index offsetting mechanism, controlled by the C<$[> magic
-variable, has been removed.  C<$[> now always reads as zero.  Writing a
-zero to it is still permitted, but writing a non-zero value causes an
-exception.  Those hopelessly addicted to FORTRAN-style 1-based indexing
-may wish to use the module L<Array::Base>, which provides an independent
-implementation of the index offsetting concept, or L<Classic::Perl>,
-which allows L<Array::Base> to be controlled through assignment to C<$[>.
+=item *
 
-=head2 User-defined case changing operations.
+Constant subroutine names (not null-clean yet)
 
-This feature was deprecated in Perl 5.14, and has now been removed.
-The CPAN module L<Unicode::Casing> provides better functionality without
-the drawbacks that this feature had, as are detailed in the 5.14
-documentation:
-L<http://perldoc.perl.org/5.14.0/perlunicode.html#User-Defined-Case-Mappings-%28for-serious-hackers-only%29>
+=item *
 
-=head2 XSUBs are now 'static'
+C<goto>
 
-XSUB C functions are now 'static', that is, they are not visible from
-outside the compilation unit. Users can use the new C<XS_EXTERNAL(name)>
-and C<XS_INTERNAL(name)> macros to pick the desired linking behaviour.
-The ordinary C<XS(name)> declaration for XSUBs will continue to declare
-non-'static' XSUBs for compatibility, but the XS compiler,
-C<ExtUtils::ParseXS> (C<xsubpp>) will emit 'static' XSUBs by default.
-C<ExtUtils::ParseXS>'s behaviour can be reconfigured from XS using the
-C<EXPORT_XSUB_SYMBOLS> keyword, see L<perlxs> for details.
+=item *
 
-=head2 Borland compiler
+Symbolic dereferencing
 
-All support for the Borland compiler has been dropped.  The code had not
-worked for a long time anyway.
+=item *
 
-=head2 Weakening read-only references
+Second argument to C<bless()> and C<tie()>
 
-Weakening read-only references is no longer permitted.  It should never
-hove worked anyway, and in some cases could result in crashes.
+=item *
 
-=head1 Deprecations
+Return value of C<ref()>
 
-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.
+=item *
 
-[ List each deprecation as a =head2 entry ]
+Package names returned by C<caller()>
 
-=head1 Performance Enhancements
+=item *
 
-XXX Changes which enhance performance without changing behaviour go here. There
-may well be none in a stable release.
+Subroutine prototypes
 
-[ List each enhancement as a =item entry ]
+=item *
 
-=over 4
+Attributes
 
 =item *
 
-XXX
+Various warnings and error messages that mention variable names or values,
+methods, etc.
 
 =back
 
-=head1 Modules and Pragmata
+In addition, a parsing bug has been fixed that prevented C<*{é}> from
+implicitly quoting the name, but instead interpreted it as C<*{+é}>, which
+would cause a strict violation.
 
-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.
+C<*{"*a::b"}> automatically strips off the * if it is followed by an ASCII
+letter.  That has been extended to all Unicode identifier characters.
 
-[ Within each section, list entries as a =item entry ]
+C<$é> is now subject to "Used only once" warnings.  It used to be exempt,
+as it was treated as a punctuation variable.
 
-=head2 New Modules and Pragmata
+Also, single-character Unicode punctuation variables (like $‰) are now
+supported [perl #69032].  They are also supported with C<our> and C<my>,
+but that is a mistake that will be fixed before 5.16.
 
-=over 4
+=head2 Support for Embedded Nulls
 
-=item *
-
-XXX
+Some parts of Perl did not work correctly with nulls (C<chr 0>) embedded in
+strings.  That meant that, for instance, C<< $m = "a\0b"; foo->$m >> would
+call the "a" method, instead of the actual method name contained in $m.
+These parts of perl have been fixed to support nulls:
 
-=back
-
-=head2 Updated Modules and Pragmata
-
-=over 4
+=over
 
 =item *
 
-L<AnyDBM_File> has been upgraded from version 1.00 to version 1.01.
-
-This is only a minor documentation update.
+Method names
 
 =item *
 
-L<Archive::Extract> has been upgraded from version 0.52 to version 0.56.
-
-Resolved an issue where C<unzip> executable was present in C<PATH> on MSWin32
+Typeglob names (including filehandle names)
 
 =item *
 
-L<Archive::Tar> has been upgraded from version 1.76 to version 1.78.
+Package names
 
 =item *
 
-L<B::Deparse> has been upgraded from version 1.07 to 1.08.
-
-It now correctly deparses C<$#{/}> and C<qq(${#}a)>.
+Autoloading
 
 =item *
 
-L<CPAN::Meta> has been upgraded from version 2.112150 to version 2.112580.
+Return value of C<ref()>
 
 =item *
 
-L<CPAN::Meta::YAML> has been upgraded from version 0.003 to version 0.004.
+Package names returned by C<caller()>
 
 =item *
 
-L<CPANPLUS> has been upgraded from version 0.9109 to version 0.9111.
+Filehandle warnings
 
 =item *
 
-L<CPANPLUS::Dist::Build> has been upgraded from version 0.56 to version 0.58.
+Typeglob elements (C<*foo{"THING\0stuff"}>)
 
 =item *
 
-L<Devel::PPPort> has been upgraded from version 3.19 to version 3.20.
+Signal names
 
 =item *
 
-L<diagnostics> has been upgraded from version 1.24 to version 1.25.
+Various warnings and error messages that mention variable names or values,
+methods, etc.
 
-It now strips out C<SZ<><...>> formatting codes before displaying
-descriptions [perl #94488].
+=back
 
-=item *
+One side effect of these changes is that blessing into "\0" no longer
+causes C<ref()> to return false.
 
-L<Data::Dumper> has been upgraded from version 2.133 to version 2.134.
+=head2 Autoloaded sort subroutines
 
-The XS code for sorting hash keys has been simplified slightly.
+Custom sort subroutines can now be autoloaded [perl #30661]:
 
-=item *
+    sub AUTOLOAD { ... }
+    @sorted = sort foo @list; # uses AUTOLOAD
 
-L<Exporter> has been upgraded from version 5.64_03 to version 5.65.
+=head1 Security
 
-=item *
+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.
 
-L<ExtUtils::ParseXS> has been upgraded from version 3.03_01 to version 3.04_04.
+[ List each security issue as a =head2 entry ]
 
-The handling of C<dVAR> in the generated XS code has been simplified.
+=head1 Incompatible Changes
 
-The previously broken "INCLUDE: ... |" functionality has been repaired
-(CPAN RT #70213).
+XXX For a release on a stable branch, this section aspires to be:
 
-A compatibility-workaround for modules that cannot
-live with the new XSUB staticness (see I<XSUBs are now static> above)
-has been implemented with the C<PERL_EUPXS_ALWAYS_EXPORT> and
-C<PERL_EUPXS_NEVER_EXPORT> preprocessor defines.
+    There are no changes intentionally incompatible with 5.XXX.XXX
+    If any exist, they are bugs and reports are welcome.
 
-The compiler warnings when -except option is used with F<xsubpp>
-have been fixed.
+[ List each incompatible change as a =head2 entry ]
 
-The XSUB.h changes to make C<XS(name)> use C<XS_INTERNAL(name)>
-by default (which were in the 5.15.2 dev release of perl)
-have been reverted since too many CPAN modules expect to
-be able to refer to XSUBs declared with C<XS(name)>.
-Instead, C<ExtUtils::ParseXS> will define a copy of the
-C<XS_INTERNAL>/C<XS_EXTERNAL> macros as necessary going back to
-perl 5.10.0. By default, ExtUtils::ParseXS will use
-C<XS_INTERNAL(name)> instead of C<XS(name)>.
+=head1 Deprecations
 
-Fixed regression for input-typemap override in XS argument
-list (CPAN RT #70448).
+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.
 
-C<ExtUtils::Typemaps> now properly strips trailing semicolons
-from inputmaps. These could previously trigger warnings (errors
-in strict C89 compilers) due to additional semicolons being
-interpreted as empty statements.
+[ List each deprecation as a =head2 entry ]
 
-Now detects and throws a warning if there is a C<CODE> section using
-C<RETVAL>, but no C<OUTPUT> section (CPAN RT #69536).
+=head1 Performance Enhancements
 
-=item *
+XXX Changes which enhance performance without changing behaviour go here. There
+may well be none in a stable release.
 
-L<Locale::Codes> has been upgraded from version 3.17 to version 3.18.
+[ List each enhancement as a =item entry ]
 
-The CIA world added non-standard values, so this is no longer used as a source
-of data.
+=over 4
 
 =item *
 
-L<File::Glob> has been upgraded from version 1.12 to version 1.13.
+C<substr> no longer calculates a value to return when called in void
+context.
 
-On Windows, tilde (~) expansion now checks the C<USERPROFILE> environment
-variable, after checking C<HOME>.
+=back
 
-See also L</Security>.
+=head1 Modules and Pragmata
 
-=item *
+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.
 
-L<Filter::Simple> has been upgrade from version 0.87 to 0.88.
+[ Within each section, list entries as a =item entry ]
 
-It is now better at detecting the end of a pod section.  It always checks
-for =cut, instead of checking for =end (if the pod begins with =begin) or
-the end of the paragraph (if the pod begins with =for) [perl #92436].
+=head2 New Modules and Pragmata
 
-It is also better at detecting variables.  A method call on a variable is
-no longer considered part of the variable name, so strings passed to a
-method are now hidden from filters that do not want to deal with strings
-[perl #92436].
+=over 4
 
 =item *
 
-L<IO> has been upgraded from version 1.25_05 to 1.25_06, and L<IO::Handle>
-from version 1.32 to 1.33.
-
-Together, these upgrades fix a problem with IO::Handle's C<getline> and
-C<getlines> methods.  When these methods are called on the special ARGV
-handle, the next file is automatically opened, as happens with the built-in
-C<< <> >> and C<readline> functions.  But, unlike the built-ins, these
-methods were not respecting the caller's use of the L<open> pragma and
-applying the approprate I/O layers to the newly-opened file
-[rt.cpan.org #66474].
+XXX
 
-=item *
+=back
 
-L<Math::BigRat> has been upgraded from version 0.2602 to version 0.2603.
+=head2 Updated Modules and Pragmata
 
-C<int()> on a Math::BigRat object containing -1/2 now creates a
-Math::BigInt containing 0, rather than -0.  L<Math::BigInt> does not even
-support negative zero, so the resulting object was actually malformed
-[perl #95530].
+=over 4
 
 =item *
 
-L<Module::CoreList> has been upgraded from version 2.55 to 2.56.
-
-It was missing a few entries: L<DB_File> in 5.8.2, L<Errno> in 5.6.0 and
-5.6.1, and L<VMS::Filespec> in 5.12.3.
+L<Archive::Tar> has been upgraded from version 1.78 to version 1.80.
 
 =item *
 
-L<Module::Metadata> has been upgraded from version 1.000005_01 to version 1.000007.
+L<base> has been upgraded from version 2.17 to version 2.18.
 
-=item *
+C<base> no longer sets a module's C<$VERSION> to "-1" when a module it loads
+does not define a C<$VERSION>.  This change has been made because "-1" is not
+a valid version number under the new "lax" criteria used internally by
+C<UNIVERSAL::VERSION>.  (See L<version> for more on "lax" version criteria.)
 
-L<Module::Load::Conditional> has been upgraded from version 0.44 to version 0.46.
+C<base> no longer internally skips loading modules it has already loaded and
+instead relies on C<require> to inspect C<%INC>.  This fixes a bug when C<base>
+is used with code that clear C<%INC> to force a module to be reloaded.
 
 =item *
 
-L<ODBM_File> has been upgraded from version 1.11 to version 1.12.
-
-This is only a minor refactoring of the XS code to bring it closer to the
-other C<?DBM_File> modules.
+L<Digest> has been upgraded from version 1.16 to version 1.17.
 
 =item *
 
-L<open> has been upgraded from version 1.08 to 1.09.
-
-It no longer turns of layers on standard handles when invoked without the
-":std" directive.  Similarly, when invoked I<with> the ":std" directive, it
-now clears layers on STDERR before applying the new ones, and not just on
-STDIN and STDOUT [perl #92728].
-
-=item *
+L<DynaLoader> has been upgraded from version 1.13 to 1.14.
 
-L<perlfaq> has been upgraded from version 5.01500302 to version 5.0150034.
+It stopped exporting its symbols with the ExtUtils::ParseXS changes in
+5.15.2.  Now it exports them once more.
 
 =item *
 
-L<Pod::Perldoc> has been upgraded from version 3.15_06 to 3.15_07.
-
-When rendering a file specified as an HTTP URL, it now use a manpage name
-based on the URL, instead of the name of the temporary file.
+L<ExtUtils::MakeMaker> has been upgraded from version 6.59 to version 6.61_01.
 
 =item *
 
-L<Pod::Simple> has been upgraded from version 3.18 to version 3.19.
+L<ExtUtils::ParseXS> has been upgraded from version 3.04_04 to version 3.05.
 
 =item *
 
-L<POSIX> has been upgraded from version 1.24 to version 1.25.
-
-L<POSIX> no longer uses L<AutoLoader>. Any code which was relying on this
-implementation detail was buggy, and may fail as a result of this change.
-The module's Perl code has been considerably simplified, roughly halving
-the number of lines, with no change in functionality. The XS code has
-been refactored to reduce the size of the shared object by about 12%,
-with no change in functionality. More POSIX functions now have tests.
+L<Module::Load> has been upgraded from version 0.20 to version 0.22.
 
-C<POSIX::Termios::setattr> now defaults the third argument to C<TCSANOW>,
-instead of 0. On most platforms C<TCSANOW> is defined as 0, but on some
-0 is not a valid parameter, which caused a call with defaults to fail.
+Resolve possible security problem [http://goo.gl/YzHRU] where a '::' prefixed
+module can 'jump' out of @INC
 
 =item *
 
-L<Storable> has been upgraded from version 2.31 to version 2.32.
-
-XS code which duplicates functionality of F<ppport.h> has been removed.
-Tests should now pass on older versions of L<Test::More>. Storable now
-builds and passes tests back to perl 5.004.
+L<perlfaq> has been upgraded from version 5.0150034 to version 5.0150035.
 
 =item *
 
-L<threads::shared> has been upgraded from version 1.38 to 1.40.
-
-Destructors on shared objects used to be ignored sometimes if the objects
-were referenced only by shared data structures.  This has been mostly
-fixed, but destructors may still be ignored if the objects still exist at
-global destruction time [perl #98204].
-
-=item *
+L<Unicode::Collate> has been upgraded from version 0.78 to version 0.80.
 
-L<XSLoader> has been upgraded from version 0.15 to version 0.16.
+Locales updated to CLDR 2.0: ar, be, bg, ha, hr, kk, lt.
+Newly supported locales: as, fi__phonebook, gu, hi, kn, kok and ln.
 
 =back
 
@@ -402,46 +321,53 @@ file and be sure to link to the appropriate page, e.g. L<perlfunc>.
 
 =head2 New Documentation
 
-=head3 L<perlootut>
+XXX Changes which create B<new> files in F<pod/> go here.
+
+=head3 L<XXX>
 
-This a new OO tutorial. It focuses on basic OO concepts, and then recommends
-that readers choose an OO framework from CPAN.
+XXX Description of the purpose of the new file here
 
 =head2 Changes to Existing Documentation
 
-=head3 L<perlobj>
+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<perlfunc>, L<open>
 
 =over 4
 
 =item *
 
-This document has been rewritten from scratch, and its coverage of various OO
-concepts has been expanded.
+As an accident of history, C<open $fh, "<:", ...> applies the default
+layers for the platform (C<:raw> on Unix, C<:crlf> on Windows), ignoring
+whatever is declared by L<open.pm|open>.  This seems such a useful feature
+it has been documented in L<perlfunc|perlfunc/open> and L<open>.
 
 =back
 
-=head3 L<perlpragma>
+=head3 L<perlapi>
 
 =over 4
 
 =item *
 
-There is now a standard convention for naming keys in the C<%^H>,
-documented under L<Key naming|perlpragma/Key naming>.
+The HV API has long accepted negative lengths to indicate that the key is
+in UTF8.  Now this is documented.
 
 =back
 
-=head2 Removed Documentation
+=head3 L<perlguts>
 
-=head3 Old OO Documentation
+=over 4
 
-All the old OO tutorials, perltoot, perltooc, and perlboot, have been
-removed.  The perlbot (bag of object tricks) document has been removed as well.
+=item *
 
-=head3 Development Deltas
+A new section, L<Autoloading with XSUBs|perlguts/Autoloading with XSUBs>,
+has been added, which explains the two APIs for accessing the name of the
+autoloaded sub.
 
-The old perldelta files for development cycles prior to 5.15 have been
-removed.
+=back
 
 =head1 Diagnostics
 
@@ -492,7 +418,11 @@ XXX Changes (i.e. rewording) of diagnostic messages go here
 
 =item *
 
-XXX Describe change here
+The message,
+"Code point 0x%X is not Unicode, no properties match it; all inverse
+prop erties do" has been changed to "Code point 0x%X is not Unicode, all
+\p{} matches fail; all \P{} matches succeed"
+
 
 =back
 
@@ -505,21 +435,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<h2ph>
+=head3 L<XXX>
 
 =over 4
 
 =item *
 
-L<h2ph> used to generate code of the form
-
-    unless(defined(&FOO)) {
-       sub FOO () {42;}
-    }
-
-But the subroutine is a compile-time declaration, and is hence unaffected
-by the condition.  It has now been corrected to emit a string C<eval>
-around the subroutine [perl #99368].
+XXX
 
 =back
 
@@ -536,15 +458,7 @@ L</Platform Support> section, instead.
 
 =item *
 
-The file F<global.sym> is no longer needed, and has been removed. It
-contained a list of all exported functions, one of the files generated by
-F<regen/embed.pl> from data in F<embed.fnc> and F<regen/opcodes>. The code
-has been refactored so that the only user of F<global.sym>, F<makedef.pl>,
-now reads F<embed.fnc> and F<regen/opcodes> directly, removing the need to
-store the list of exported functions in an intermediate file.
-
-As F<global.sym> was never installed, this change will not be visible
-outside the build process.
+XXX
 
 =back
 
@@ -562,14 +476,9 @@ that they represent may be covered elsewhere.
 
 =item *
 
-F<t/porting/globvar.t> has been added, to run a sanity check on F<globar.sym>.
-F<globar.sym> is not needed on most *nix platforms, but is for Win32, hence
-previously was it was possible to inadvertently commit changes that worked
-perfectly locally, but broke the build on Win32.
-
-=item *
-
-F<t/op/unlink.t> has been added to test the C<unlink> function.
+F<t/porting/checkcfgvar.t> now tests that all config.sh-style files are
+complete. These are used by the various non-*nix to generate their
+F<config.h>, and an incomplete input file will generate invalid output.
 
 =back
 
@@ -634,239 +543,187 @@ be noted as well.
 
 =item *
 
-The C<is_gv_magical_sv> function has been eliminated and merged with
-C<gv_fetchpvn_flags>.  It used to be called to determine whether a GV
-should be autovivified in rvalue context.  Now it has been replaced with a
-new C<GV_ADDMG> flag (not part of the API).
+These new functions have been added as part of the work on Unicode symbols:
 
-=item *
+    HvNAMELEN
+    HvNAMEUTF8
+    HvENAMELEN
+    HvENAMEUTF8
+    gv_init_pv
+    gv_init_pvn
+    gv_init_pvsv
+    gv_fetchmeth_pv
+    gv_fetchmeth_pvn
+    gv_fetchmeth_sv
+    gv_fetchmeth_pv_autoload
+    gv_fetchmeth_pvn_autoload
+    gv_fetchmeth_sv_autoload
+    gv_fetchmethod_pv_flags
+    gv_fetchmethod_pvn_flags
+    gv_fetchmethod_sv_flags
+    gv_autoload_pv
+    gv_autoload_pvn
+    gv_autoload_sv
+    newGVgen_flags
+    sv_derived_from_pv
+    sv_derived_from_pvn
+    sv_derived_from_sv
+    sv_does_pv
+    sv_does_pvn
+    sv_does_sv
+    whichsig_pv
+    whichsig_pvn
+    whichsig_sv
 
-Padlists are now marked C<AvREAL>; i.e., reference-counted.  They have
-always been reference-counted, but were not marked real, because F<pad.c>
-did its own clean-up, instead of using the usual clean-up code in F<sv.c>.
-That caused problems in thread cloning, so now the C<AvREAL> flag is on,
-but is turned off in F<pad.c> right before the padlist is freed (after
-F<pad.c> has done its custom freeing of the pads).
+The gv_fetchmethod_*_flags functions, like gv_fetchmethod_flags, are
+experimental and may change in a future release.
 
 =item *
 
-All the C files that make up the Perl core have been converted to UTF-8.
+The following functions were added.  These are I<not> part of the API:
 
-=back
+    GvNAMEUTF8
+    GvENAMELEN
+    GvENAME_HEK
+    CopSTASH_flags
+    CopSTASH_flags_set
+    PmopSTASH_flags
+    PmopSTASH_flags_set
+    sv_sethek
+    HEKfARG
 
-=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 *
-
-In Perl 5.15.0 C<defined(${'$'})> stopped returning true if the C<$$>
-variable had not been used yet.  This has been fixed.
-
-=item *
-
-C<defined(${"..."})>, C<defined(*{"..."})>, etc., used to
-return true for most, but not all built-in variables, if
-they had not been used yet.  Many times that new built-in
-variables were added in past versions, this construct was
-not taken into account, so this affected C<${^GLOBAL_PHASE}> and
-C<${^UTF8CACHE}>, among others.  It also used to return false if the
-package name was given as well (C<${"::!"}>) and for subroutines in the
-CORE package [perl #97978] [perl #97492] [perl #97484].
+There is also a C<HEKf> macro corresponding to C<SVf>, for
+interpolating HEKs in formatted strings.
 
 =item *
 
-Perl 5.10.0 introduced a similar bug: C<defined(*{"foo"})> where "foo"
-represents the name of a built-in global variable used to return false if
-the variable had never been used before, but only on the I<first> call.
-This, too, has been fixed.
+C<sv_catpvn_flags> takes a couple of new internal-only flags,
+C<SV_CATBYTES> and C<SV_CATUTF8>, which tell it whether the char array to
+be concatenated is UTF8.  This allows for more efficient concatenation than
+creating temporary SVs to pass to C<sv_catsv>.
 
 =item *
 
-Various functions that take a filehandle argument in rvalue context
-(C<close>, C<readline>, etc.) used to call C<FETCH> multiple times, if it
-was a tied variable, and warn twice, if it was C<undef> [perl #97482].
+For XS AUTOLOAD subs, $AUTOLOAD is set once more, as it was in 5.6.0.  This
+is in addition to setting C<SvPVX(cv)>, for compatibility with 5.8 to 5.14.
+See L<perlguts/Autoloading with XSUBs>.
 
 =item *
 
-C<close> and similar filehandle functions, when called on built-in global
-variables (like C<$+>), used to die if the variable happened to hold the
-undefined value, instead of producing the usual "Use of uninitialized
-value" warning.
+Perl now checks whether the array (the linearised isa) returned by a MRO
+plugin begins with the name of the class itself, for which the array was
+created, instead of assuming that it does.  This prevents the first element
+from being skipped during method lookup.  It also means that
+C<mro::get_linear_isa> may return an array with one more element than the
+MRO plugin provided [perl #94306].
 
-=item *
-
-When autovivified file handles were introduced in Perl 5.6.0, C<readline>
-was inadvertently made to autovivify when called as C<readline($foo)> (but
-not as C<< <$foo> >>).  It has now been fixed never to autovivify.
-
-=item *
-
-C<defined ${ $tied_variable }> used to call C<FETCH> multiple times, but
-now calls it just once.
-
-=item *
-
-Some cases of dereferencing a complex expression, such as
-C<${ (), $tied } = 1>, used to call C<FETCH> multiple times, but now call
-it once.
-
-=item *
-
-For a tied variable returning a package name, C<< $tied->method >> used to
-call C<FETCH> multiple times (even up to six!), and sometimes would
-fail to call the method, due to memory corruption.
-
-=item *
-
-Calling an undefined anonymous subroutine (e.g., what $x holds after
-C<undef &{$x = sub{}}>) used to cause a "Not a CODE reference" error, which
-has been corrected to "Undefined subroutine called" [perl #71154].
-
-=item *
-
-Causing C<@DB::args> to be freed between uses of C<caller> no longer
-results in a crash [perl #93320].
-
-=item *
-
-Since 5.6.0, C<*{ ... }> has been inconsistent in how it treats undefined
-values.  It would die in strict mode or lvalue context for most undefined
-values, but would be treated as the empty string (with a warning) for the
-specific scalar return by C<undef()> (C<&PL_sv_undef> internally).  This
-has been corrected.  C<undef()> is now treated like other undefined
-scalars, as in Perl 5.005.
+=back
 
-=item *
+=head1 Selected Bug Fixes
 
-It used to be possible to free the typeglob of a localised array or hash
-(e.g., C<local @{"x"}; delete $::{x}>), resulting in a crash on scope exit.
+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>.
 
-=item *
+[ List each fix as a =item entry ]
 
-C<setpgrp($foo)> used to be equivalent to C<($foo, setpgrp)>, because
-C<setpgrp> was ignoring its argument if there was just one.  Now it is
-equivalent to C<setpgrp($foo,0)>.
+=over 4
 
 =item *
 
-Assignments like C<*$tied = \&{"..."}> and C<*glob = $tied> now call FETCH
-only once.
+In Perl 5.14.0, C<$tainted ~~ @array> stopped working properly.  Sometimes
+it would erroneously fail (when C<$tainted> contained a string that occurs
+in the array I<after> the first element) or erroneously succeed (when
+C<undef> occurred after the first element) [perl #93590].
 
 =item *
 
-C<chdir>, C<chmod>, C<chown>, C<utime>, C<truncate>, C<stat>, C<lstat> and the filetest ops (C<-r>, C<-x>, etc.)
-now always call FETCH if passed a tied
-variable as the last argument.  They used to ignore tiedness if the last
-thing return from or assigned to the variable was a typeglob or reference
-to a typeglob.
+Perl 5.15.0 introduced a minor regression, in that an object referenced by
+a deleted hash element would be able to access the freed element from its
+DESTROY method, causing panic errors [perl #99660].
 
 =item *
 
-Perl 5.15.1 inadvertently stopped C<*foo =~ s/\*//r> from working, as it
-would try to force the *foo glob into a string.  This has been fixed
-[perl #97954].
+Functions in the CORE package can now be called as methods.  That used to
+work only when they had been called or referenced already.  So
+C<< "foo"->CORE::ucfirst >> returns Foo.
 
 =item *
 
-If things were arranged in memory the right way, it was possible for
-thread joining to emit "Attempt to free unreferenced scalar" warnings if
-C<caller> had been used from the C<DB> package prior to thread creation,
-due to the way pads were reference-counted and cloned [perl #98092].
+C<use> and C<require> are no longer affected by the I/O layers active in
+the caller's scope (enabled by L<open.pm|open>) [perl #96008].
 
 =item *
 
-CORE:: subs were introduced in the previous development release, but
-C<defined &{"CORE::..."}> did not return true.  That has been rectified
-[perl #97484].
+Errors that occur when methods cannot be found during overloading now
+mention the correct package name, as they did in 5.8.x, instead of
+erroneously mentioning the "overload" package, as they have since 5.10.0.
 
 =item *
 
-Lvalue subroutines were made to autovivify in 5.15.0, but it did not work
-in some cases involving an intervening list operator between the
-dereference operator and the subroutine call (C<${(), lvsub()}>)
-[perl #98184].
+Undefining C<%overload::> no longer causes a crash.
 
 =item *
 
-A bug has been fixed that occurs when a tied variable is used as a
-subroutine reference:  if the last thing assigned to or returned from the
-variable was a reference or typeglob, the C<\&$tied> could either crash or
-return the wrong subroutine.  The reference case is a regression introduced
-in Perl 5.10.0.  For typeglobs, it has probably never worked till now.
+C<our $::é; $é> (which is invalid) no longer produces the "Compilation
+error at lib/utf8_heavy.pl..." error message, which it started emitting in
+5.10.0 [perl #99984].
 
 =item *
 
-C<given> was not scoping its implicit $_ properly, resulting in memory
-leaks or "Variable is not available" warnings [perl #94682].
+A minor regression, introduced Perl 5.15.0, has been fixed in which some
+regular expression Unicode property matches (C<\p{...}>) matched
+non-Unicode code points.
 
 =item *
 
-C<-l> followed by a bareword no longer "eats" the previous argument to
-the list operator in whose argument list it resides.  In less convoluted
-English: C<print "bar", -l foo> now actually prints "bar", because C<-l>
-on longer eats it.
+In case-insensitive regular expression pattern matching, no longer on
+UTF-8 encoded strings does the scan for the start of match only look at
+the first possible position.  This caused matches such as
+C<"f\x{FB00}" =~ /ff/i> to fail.
 
 =item *
 
-In 5.14.0, filetest ops (C<-r>, C<-x>, etc.) started calling FETCH on a
-tied argument belonging to the previous argument to a list operator, if
-called with a bareword argument or no argument at all.  This has been
-fixed, so C<push @foo, $tied, -r> no longer calls FETCH on C<$tied>.
+On 64-bit systems, C<read()> now understands large string offsets beyond
+the 32-bit range.
 
 =item *
 
-C<shmread> was not setting the scalar flags correctly when reading from
-shared memory, causing the existing cached numeric representation in the
-scalar to persist [perl #98480].
+Errors that occur when processing subroutine attributes no longer cause the
+subroutine's op tree to leak.
 
 =item *
 
-Weakening the first argument to an automatically-invoked C<DESTROY> method
-could result in erroneous "DESTROY created new reference" errors or
-crashes.  Now it is an error to weaken a read-only reference.
+C<sort> now works once more with custom sort routines that are XSUBs.  It
+stopped working in 5.10.0.
 
 =item *
 
-Under miniperl (used to configure modules when perl itself is built),
-C<glob> now clears %ENV before calling csh, since the latter croaks on some
-systems if it does not like the contents of the LS_COLORS enviroment
-variable [perl #98662].
+C<sort> with a constant for a custom sort routine, although it produces
+unsorted results, no longer crashes.  It started crashing in 5.10.0.
 
 =item *
 
-C<++> and C<--> now work on copies of globs, instead of dying.
+Warnings produced when a custom sort routine returns a non-numeric value
+now contain "in sort"; e.g., "Use of uninitialized value in sort".
 
 =item *
 
-The subroutines in the CORE:: namespace that were introduced in the
-previous development release run with the lexical hints (strict, warnings)
-of the caller, just as though the built-in function had been called.  But
-this was not the case for C<goto &CORE::sub>.  The CORE sub would end up
-running with the lexical hints of the subroutine it replaced, instead of
-that subroutine's caller.  This has been fixed.
+C<< sort { $a <=> $b } >>, which is optimised internally, now produces
+"uninitialized" warnings for NaNs (not-a-number values), since C<< <=> >>
+returns C<undef> for those.  This brings it in line with
+S<C<< sort { 1; $a <=> $b } >>> and other more complex cases, which are not
+optimised [perl #94390].
 
 =item *
 
-Stacked C<-l> (followed immediately by other filetest operators) did not
-work previously; now it does.  It is only permitted when the rightmost
-filetest op has the special "_" handle for its argument and the most
-recent C<stat>/C<lstat> call was an C<lstat>.
+C<..> and C<...> in list context now call FETCH only once on tied
+arguments, instead of three or four times [perl #53554].
 
 =item *
 
-In Perl 5.6, C<-l> followed by anything other than a bareword would treat
-its argument as a file name.  That was changed in 5.8 for glob references
-(C<\*foo>), but not for globs themselves (C<*foo>).  Glob references
-started being treated as file handles, but only if warnings were turned on.
-In other words, it was simply buggy and inconsistent.  Now the 5.6
-behaviour has been restored.
+C<..> and C<...> in list context now mention the name of the variable in
+"uninitialized" warnings for string (as opposed to numeric) ranges.
 
 =back
 
@@ -885,7 +742,8 @@ from either 5.XXX.XXX or 5.XXX.XXX.
 
 =item *
 
-XXX
+XXX A couple of modules were broken by stdbool.h changes, or was that in
+5.15.3?
 
 =back
 
@@ -898,7 +756,7 @@ here.
 
 XXX Generate this with:
 
-  perl Porting/acknowledgements.pl v5.15.2..HEAD
+  perl Porting/acknowledgements.pl v5.15.3..HEAD
 
 =head1 Reporting Bugs