This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
expand documentation of the \cK change
[perl5.git] / pod / perldelta.pod
index 8712693..8edaa8d 100644 (file)
@@ -6,11 +6,11 @@ perldelta - what is new for perl v5.18.0
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.16.0 release and the 5.18.0
+This document describes differences between the v5.16.0 release and the v5.18.0
 release.
 
-If you are upgrading from an earlier release such as 5.14.0, first read
-L<perl5160delta>, which describes differences between 5.14.0 and 5.16.0.
+If you are upgrading from an earlier release such as v5.14.0, first read
+L<perl5160delta>, which describes differences between v5.14.0 and v5.16.0.
 
 =head1 Core Enhancements
 
@@ -37,18 +37,26 @@ By saying
 you are taking responsibility for any breakage that future changes to, or
 removal of, the feature may cause.
 
+Since some features (like C<~~> or C<my $_>) now emit experimental warnings,
+and you may want to disable them in code that is also run on perls that do not
+recognize these warning categories, consider using the C<if> pragma like this:
+
+    no if $] >= 5.018, 'warnings', "experimental::feature_name";
+
 Existing experimental features may begin emitting these warnings, too.  Please
 consult L<perlexperiment> for information on which features are considered
 experimental.
 
 =head2 Hash overhaul
 
-Changes to the implementation of hashes in perl 5.18.0 will be one of the most
-visible changes to the behavior of existing code.  For the most part, these
-changes will be visible as two distinct hash variables now providing their
-contents in a different order where it was previously identical.  When
-encountering these changes, the key to cleaning up from them is to accept that
-B<hashes are unordered collections> and to act accordingly.
+Changes to the implementation of hashes in perl v5.18.0 will be one of the most
+visible changes to the behavior of existing code.
+
+By default, two distinct hash variables with identical keys and values may now
+provide their contents in a different order where it was previously identical.
+
+When encountering these changes, the key to cleaning up from them is to accept
+that B<hashes are unordered collections> and to act accordingly.
 
 =head3 Hash randomization
 
@@ -69,30 +77,56 @@ Perl's hashes to insecure audiences.
 Further, every hash has its own iteration order, which should make it much
 more difficult to determine what the current hash seed is.
 
-=head3 New hash function: Murmurhash-32
+=head3 New hash functions
+
+Perl v5.18 includes support for multiple hash functions, and changed
+the default (to ONE_AT_A_TIME_HARD), you can choose a different
+algorithm by defining a symbol at compile time.  For a current list,
+consult the F<INSTALL> document.  Note that as of Perl v5.18 we can
+only recommend use of the default or SIPHASH. All the others are
+known to have security issues and are for research purposes only.
+
+=head3 PERL_HASH_SEED environment variable now takes a hex value
+
+C<PERL_HASH_SEED> no longer accepts an integer as a parameter;
+instead the value is expected to be a binary value encoded in a hex
+string, such as "0xf5867c55039dc724".  This is to make the
+infrastructure support hash seeds of arbitrary lengths, which might
+exceed that of an integer.  (SipHash uses a 16 byte seed.)
 
-We have switched Perl's hash function to use Murmurhash-32, and added build
-support for several other hash functions.  This new function is expected to
-perform equivalently to the old one for shorter strings and is faster for
-hashing longer strings.
+=head3 PERL_PERTURB_KEYS environment variable added
 
-=head3 PERL_HASH_SEED enviornment variable now takes a hex value
+The C<PERL_PERTURB_KEYS> environment variable allows one to control the level of
+randomization applied to C<keys> and friends.
 
-PERL_HASH_SEED no longer accepts an integer as a parameter, instead the
-value is expected to be a binary string encoded in hex.  This is to make
-the infrastructure support hash seeds of arbitrary lengths which might
-exceed that of an integer.  (SipHash uses a 16 byte seed).
+When C<PERL_PERTURB_KEYS> is 0, perl will not randomize the key order at all. The
+chance that C<keys> changes due to an insert will be the same as in previous
+perls, basically only when the bucket size is changed.
+
+When C<PERL_PERTURB_KEYS> is 1, perl will randomize keys in a non-repeatable
+way. The chance that C<keys> changes due to an insert will be very high.  This
+is the most secure and default mode.
+
+When C<PERL_PERTURB_KEYS> is 2, perl will randomize keys in a repeatable way.
+Repeated runs of the same program should produce the same output every time.
+
+C<PERL_HASH_SEED> implies a non-default C<PERL_PERTURB_KEYS> setting. Setting
+C<PERL_HASH_SEED=0> (exactly one 0) implies C<PERL_PERTURB_KEYS=0> (hash key
+randomization disabled); settng C<PERL_HASH_SEED> to any other value implies
+C<PERL_PERTURB_KEYS=2> (deterministic and repeatable hash key randomization).
+Specifying C<PERL_PERTURB_KEYS> explicitly to a different level overrides this
+behavior.
 
 =head3 Hash::Util::hash_seed() now returns a string
 
 Hash::Util::hash_seed() now returns a string instead of an integer.  This
 is to make the infrastructure support hash seeds of arbitrary lengths
-which might exceed that of an integer.  (SipHash uses a 16 byte seed).
+which might exceed that of an integer.  (SipHash uses a 16 byte seed.)
 
 =head3 Output of PERL_HASH_SEED_DEBUG has been changed
 
 The environment variable PERL_HASH_SEED_DEBUG now makes perl show both the
-hash function perl was built with AND the seed, in hex, in use for that
+hash function perl was built with, I<and> the seed, in hex, in use for that
 process. Code parsing this output, should it exist, must change to accommodate
 the new format.  Example of the new format:
 
@@ -101,10 +135,7 @@ the new format.  Example of the new format:
 
 =head2 Upgrade to Unicode 6.2
 
-Perl now supports the final version of Unicode 6.2.  Earlier releases in
-the 5.17 series supported Unicode 6.2 beta versions.  There were no
-substantive changes in the final Unicode 6.2 version from the most
-recent beta, included in Perl 5.17.4.  A list of changes from Unicode
+Perl now supports Unicode 6.2.  A list of changes from Unicode
 6.1 is at L<http://www.unicode.org/versions/Unicode6.2.0>.
 
 =head2 Character name aliases may now include non-Latin1-range characters
@@ -205,6 +236,11 @@ and treated the same way as -2 [perl #112990].
 
 =head1 Security
 
+=head2 See also: hash overhaul
+
+Some of the changes in the L<hash overhaul|/"Hash overhaul"> were made to
+enhance security.  Please read that section.
+
 =head2 C<Storable> security warning in documentation
 
 The documentation for C<Storable> now includes a section which warns readers
@@ -231,7 +267,7 @@ This vulnerability is documented in CVE-2012-6329.
 
 Poorly written perl code that allows an attacker to specify the count to perl's
 C<x> string repeat operator can already cause a memory exhaustion
-denial-of-service attack. A flaw in versions of perl before 5.15.5 can escalate
+denial-of-service attack. A flaw in versions of perl before v5.15.5 can escalate
 that into a heap buffer overrun; coupled with versions of glibc before 2.16, it
 possibly allows the execution of arbitrary code.
 
@@ -263,7 +299,7 @@ such as in
 
  my $undraftable = "\N{4F}";    # Syntax error!
 
-or to have commas anywhere in the name.  See L<charnames/CUSTOM ALIASES>
+or to have commas anywhere in the name.  See L<charnames/CUSTOM ALIASES>.
 
 =head2 C<\N{BELL}> now refers to U+1F514 instead of U+0007
 
@@ -277,7 +313,7 @@ functions in L<charnames> have been correspondingly updated.
 
 Unicode has now withdrawn their previous recommendation for regular
 expressions to automatically handle cases where a single character can
-match multiple characters case-insensitively, for example the letter
+match multiple characters case-insensitively, for example, the letter
 LATIN SMALL LETTER SHARP S and the sequence C<ss>.  This is because
 it turns out to be impracticable to do this correctly in all
 circumstances.  Because Perl has tried to do this as best it can, it
@@ -299,10 +335,11 @@ behavior from working fully.
 
 =head2 Explicit rules for variable names and identifiers
 
-Due to an oversight, length-one variable names in 5.16 were completely
-unrestricted, and opened the door to several kinds of insanity.  As of
-5.18, these now follow the rules of other identifiers, in addition
-to accepting characters that match the C<\p{POSIX_Punct}> property.
+Due to an oversight, single character variable names in v5.16 were
+completely unrestricted.  This opened the door to several kinds of
+insanity.  As of v5.18, these now follow the rules of other identifiers,
+in addition to accepting characters that match the C<\p{POSIX_Punct}>
+property.
 
 There are no longer any differences in the parsing of identifiers
 specified as C<$...> or C<${...}>; previously, they were dealt with in
@@ -310,11 +347,26 @@ different parts of the core, and so had slightly different behavior. For
 instance, C<${foo:bar}> was a legal variable name.  Since they are now
 both parsed by the same code, that is no longer the case.
 
-=head2 C<\s> in regular expressions now matches a Vertical Tab
+=head2 Vertical tabs are now whitespace
 
 No one could recall why C<\s> didn't match C<\cK>, the vertical tab.
 Now it does.  Given the extreme rarity of that character, very little
-breakage is expected.
+breakage is expected.  That said, here's what it means:
+
+C<\s> in a regex now matches a vertical tab in all circumstances.
+
+Literal vertical tabs in a regex literal are ignored when the C</x>
+modifier is used.
+
+Leading vertical tabs, alone or mixed with other whitespace, are now
+ignored when interpreting a string as a number.  For example:
+
+  $dec = " \cK \t 123";
+  $hex = " \cK \t 0xF";
+
+  say 0 + $dec;   # was 0 with warning, now 123
+  say int $dec;   # was 0, now 123
+  say oct $hex;   # was 0, now  15
 
 =head2 C</(?{})/> and C</(??{})/> have been heavily reworked
 
@@ -339,9 +391,27 @@ global C<$_> an alias for its argument, just like C<foreach>.  However, it
 still uses lexical C<$_> if there is lexical C<$_> in scope (again, just like
 C<foreach>) [perl #114020].
 
+=head2 The smartmatch family of features are now experimental
+
+Smart match, added in v5.10.0 and significantly revised in v5.10.1, has been
+a regular point of complaint.  Although there are a number of ways in which
+it is useful, it has also proven problematic and confusing for both users and
+implementors of Perl.  There have been a number of proposals on how to best
+address the problem.  It is clear that smartmatch is almost certainly either
+going to change or go away in the future.  Relying on its current behavior
+is not recommended.
+
+Warnings will now be issued when the parser sees C<~~>, C<given>, or C<when>.
+To disable these warnings, you can add this line to the appropriate scope:
+
+  no if $] >= 5.018, "experimental::smartmatch";
+
+Consider, though, replacing the use of these features, as they may change
+behavior again before becoming stable.
+
 =head2 Lexical C<$_> is now experimental
 
-Since it was introduced in Perl 5.10, it has caused much confusion with no
+Since it was introduced in Perl v5.10, it has caused much confusion with no
 obvious solution:
 
 =over
@@ -429,7 +499,7 @@ the wrong state, so they didn't fully work, and the similar C<foreach qw(a
 b c) {...}> that one might expect to be permitted never worked at all.
 
 This side effect of C<qw> has now been abolished.  It has been deprecated
-since Perl 5.13.11.  It is now necessary to use real parentheses
+since Perl v5.13.11.  It is now necessary to use real parentheses
 everywhere that the grammar calls for them.
 
 =head2 Interaction of lexical and default warnings
@@ -441,7 +511,7 @@ if lexical warnings were not already enabled:
     use warnings "void";
     $#; # void warning; no deprecation warning
 
-Now, the debugging, deprecated, glob, inplace and malloc warnings
+Now, the C<debugging>, C<deprecated>, C<glob>, C<inplace> and C<malloc> warnings
 categories are left on when turning on lexical warnings (unless they are
 turned off by C<no warnings>, of course).
 
@@ -449,8 +519,8 @@ This may cause deprecation warnings to occur in code that used to be free
 of warnings.
 
 Those are the only categories consisting only of default warnings.  Default
-warnings in other categories are still disabled by C<use warnings
-"category">, as we do not yet have the infrastructure for controlling
+warnings in other categories are still disabled by C<< use warnings "category" >>,
+as we do not yet have the infrastructure for controlling
 individual warnings.
 
 =head2 C<state sub> and C<our sub>
@@ -464,7 +534,7 @@ in L<perlsub/Lexical Subroutines>.
 =head2 Defined values stored in environment are forced to byte strings
 
 A value stored in an environment variable has always been stringified.  In this
-release, it is converted to be only a byte string.  First, it is forced to be a
+release, it is converted to be only a byte string.  First, it is forced to be
 only a string.  Then if the string is utf8 and the equivalent of
 C<utf8::downgrade()> works, that result is used; otherwise, the equivalent of
 C<utf8::encode()> is used, and a warning is issued about wide characters
@@ -479,15 +549,15 @@ ignore the file and continue searching the directories in C<@INC>
 =head2 C<gv_fetchmeth_*> and SUPER
 
 The various C<gv_fetchmeth_*> XS functions used to treat a package whose
-named ended with ::SUPER specially.  A method lookup on the Foo::SUPER
-package would be treated as a SUPER method lookup on the Foo package.  This
-is no longer the case.  To do a SUPER lookup, pass the Foo stash and the
-GV_SUPER flag.
+named ended with C<::SUPER> specially.  A method lookup on the C<Foo::SUPER>
+package would be treated as a C<SUPER> method lookup on the C<Foo> package.  This
+is no longer the case.  To do a C<SUPER> lookup, pass the C<Foo> stash and the
+C<GV_SUPER> flag.
 
 =head2 C<split>'s first argument is more consistently interpreted
 
-After some changes earlier in 5.17, C<split>'s behavior has been
-simplified: if the PATTERN argument evaluates to a literal string
+After some changes earlier in v5.17, C<split>'s behavior has been
+simplified: if the PATTERN argument evaluates to a string
 containing one space, it is treated the way that a I<literal> string
 containing one space once was.
 
@@ -498,7 +568,7 @@ containing one space once was.
 The following modules will be removed from the core distribution in a
 future release, and should be installed from CPAN instead. Distributions
 on CPAN which require these should add them to their prerequisites.
-The core versions of these modules will issue "deprecated"-category
+The core versions of these modules will issue C<"deprecated">-category
 warnings.
 
 You can silence these deprecation warnings by installing the modules
@@ -568,7 +638,7 @@ This item is part of the C<Pod::LaTeX> distribution.
 
 This interpreter-global variable used to track the total number of
 Perl objects in the interpreter. It is no longer maintained and will
-be removed altogether in Perl 5.20.
+be removed altogether in Perl v5.20.
 
 =head2 Five additional characters should be escaped in patterns with C</x>
 
@@ -578,12 +648,12 @@ Unicode recommends 11 characters be treated thusly.  We will conform
 with this in a future Perl version.  In the meantime, use of any of the
 missing characters will raise a deprecation warning, unless turned off.
 The five characters are:
-U+0085 NEXT LINE,
-U+200E LEFT-TO-RIGHT MARK,
-U+200F RIGHT-TO-LEFT MARK,
-U+2028 LINE SEPARATOR,
-and
-U+2029 PARAGRAPH SEPARATOR.
+
+    U+0085 NEXT LINE
+    U+200E LEFT-TO-RIGHT MARK
+    U+200F RIGHT-TO-LEFT MARK
+    U+2028 LINE SEPARATOR
+    U+2029 PARAGRAPH SEPARATOR
 
 =head2 User-defined charnames with surprising whitespace
 
@@ -598,8 +668,9 @@ future version of Perl, and should not be used.  With participating C
 compilers (e.g., gcc), compiling any file that uses any of these will
 generate a warning.  These were not intended for public use; there are
 equivalent, faster, macros for most of them.
-See L<perlapi/Character classes>.  The complete list (including some
-that were deprecated in 5.17.7) is:
+
+See L<perlapi/Character classes>.  The complete list is:
+
 C<is_uni_alnum>, C<is_uni_alnumc>, C<is_uni_alnumc_lc>,
 C<is_uni_alnum_lc>, C<is_uni_alpha>, C<is_uni_alpha_lc>,
 C<is_uni_ascii>, C<is_uni_ascii_lc>, C<is_uni_blank>,
@@ -623,7 +694,7 @@ In addition these three functions that have never worked properly are
 deprecated:
 C<to_uni_lower_lc>, C<to_uni_title_lc>, and C<to_uni_upper_lc>.
 
-=head2 Certain rare uses of backslashes within regexes are now deprectated
+=head2 Certain rare uses of backslashes within regexes are now deprecated
 
 There are three pairs of characters that Perl recognizes as
 metacharacters in regular expression patterns: C<{}>, C<[]>, and C<()>.
@@ -635,7 +706,7 @@ These can be used as well to delimit patterns, as in:
 Since they are metacharacters, they have special meaning to regular
 expression patterns, and it turns out that you can't turn off that
 special meaning by the normal means of preceding them with a backslash,
-if you use them, paired, within a pattern delimitted by them.  For
+if you use them, paired, within a pattern delimited by them.  For
 example, in
 
   m{foo\{1,3\}}
@@ -658,13 +729,24 @@ by white space or comments in C<(?...)> regular expression constructs.
 Similarly, if the C<(> and C<*> are separated in C<(*VERB...)>
 constructs.
 
+=head2 Pre-PerlIO IO implementations
+
+In theory, you can currently build perl without PerlIO.  Instead, you'd use a
+wrapper around stdio or sfio.  In practice, this isn't very useful.  It's not
+well tested, and without any support for IO layers or (thus) Unicode, it's not
+much of a perl.  Building without PerlIO will most likely be removed in the
+next version of perl.
+
+PerlIO supports a C<stdio> layer if stdio use is desired.  Similarly a
+sfio layer could be produced in the future, if needed.
+
 =head1 Future Deprecations
 
 =over
 
 =item *
 
-Platforms with out support infrastructure
+Platforms without support infrastructure
 
 Both Windows CE and z/OS have been historically under-maintained, and are
 currently neither successfully building nor regularly being smoke tested.
@@ -676,7 +758,7 @@ your time, expertise, or hardware to help support these platforms, please let
 the perl development effort know by emailing C<perl5-porters@perl.org>.
 
 Some platforms that appear otherwise entirely dead are also on the short list
-for removal between now and 5.20.0:
+for removal between now and v5.20.0:
 
 =over
 
@@ -686,23 +768,36 @@ for removal between now and 5.20.0:
 
 =back
 
+We also think it likely that current versions of Perl will no longer
+build AmigaOS, DJGPP, NetWare (natively), OS/2 and Plan 9. If you
+are using Perl on such a platform and have an interest in ensuring
+Perl's future on them, please contact us.
+
+We believe that Perl has long been unable to build on mixed endian
+architectures (such as PDP-11s), and intend to remove any remaining
+support code. Similarly, code supporting the long umaintained GNU
+dld will be removed soon if no-one makes themselves known as an
+active user.
+
 =item *
 
 Swapping of $< and $>
 
-For more information about this future deprecation, see L<the relevant RT
-ticket|https://rt.perl.org/rt3/Ticket/Display.html?id=96212>.
+Perl has supported the idiom of swapping $< and $> (and likewise $( and
+$)) to temporarily drop permissions since 5.0, like this:
 
-=item *
+    ($<, $>) = ($>, $<);
+
+However, this idiom modifies the real user/group id, which can have
+undesirable side-effects, is no longer useful on any platform perl
+supports and complicates the implementation of these variables and list
+assignment in general.
 
-sfio, stdio
+As an alternative, assignment only to C<< $> >> is recommended:
 
-Perl supports being built without PerlIO proper, using a stdio or sfio
-wrapper instead.  A perl build like this will not support IO layers and
-thus Unicode IO, making it rather handicapped.
+    local $> = $<;
 
-PerlIO supports a C<stdio> layer if stdio use is desired, and similarly a
-sfio layer could be produced.
+See also: L<Setuid Demystified|http://www.cs.berkeley.edu/~daw/papers/setuid-usenix02.pdf>.
 
 =item *
 
@@ -769,22 +864,17 @@ inline functions. This should speed things up slightly on non-GCC platforms.
 
 =item *
 
-Apply the optimisation of hashes in boolean context, such as in C<if> or
-C<and>, to constructs in non-void context.
+The optimisation of hashes in boolean context has been extended to
+affect C<scalar(%hash)>, C<%hash ? ... : ...>, and C<sub { %hash || ... }>.
 
 =item *
 
-Extend the optimisation of hashes in boolean context to C<scalar(%hash)>,
-C<%hash ? ... : ...>, and C<sub { %hash || ... }>.
-
-=item *
-
-Filetest ops manage the stack in a fractionally more efficient manner.
+Filetest operators manage the stack in a fractionally more efficient manner.
 
 =item *
 
 Globs used in a numeric context are now numified directly in most cases,
-rather than being numerified via stringification.
+rather than being numified via stringification.
 
 =item *
 
@@ -810,24 +900,707 @@ information only known to the C<perl> binary and not available via L<Config>.
 
 =head2 Updated Modules and Pragmata
 
-This is only an overview of selected module updates.  For a complete
-list of updates, run:
+For a complete list of updates, run:
 
-  $ corelist --diff 5.14.0 5.16.0
+  $ corelist --diff 5.16.0 5.18.0
 
-You can substitute your favorite version in place of 5.14.0, too.
+You can substitute your favorite version in place of C<5.16.0>, too.
 
-=over 4
+=over
+
+=item *
+
+L<Archive::Extract> has been upgraded to 0.68.
+
+Work around an edge case on Linux with Busybox's unzip.
+
+=item *
+
+L<Archive::Tar> has been upgraded to 1.90.
+
+ptar now supports the -T option as well as dashless options
+[rt.cpan.org #75473], [rt.cpan.org #75475].
+
+Auto-encode filenames marked as UTF-8 [rt.cpan.org #75474].
+
+Don't use C<tell> on L<IO::Zlib> handles [rt.cpan.org #64339].
+
+Don't try to C<chown> on symlinks.
+
+=item *
+
+L<autodie> has been upgraded to 2.13.
+
+C<autodie> now plays nicely with the 'open' pragma.
+
+=item *
+
+L<B> has been upgraded to 1.42.
+
+The C<stashoff> method of COPs has been added.   This provides access to an
+internal field added in perl 5.16 under threaded builds [perl #113034].
+
+C<B::COP::stashpv> now supports UTF-8 package names and embedded NULs.
+
+All C<CVf_*> and C<GVf_*>
+and more SV-related flag values are now provided as constants in the C<B::>
+namespace and available for export.  The default export list has not changed.
+
+This makes the module work with the new pad API.
+
+=item *
+
+L<B::Concise> has been upgraded to 0.95.
+
+The C<-nobanner> option has been fixed, and C<format>s can now be dumped.
+When passed a sub name to dump, it will check also to see whether it
+is the name of a format.  If a sub and a format share the same name,
+it will dump both.
+
+This adds support for the new C<OpMAYBE_TRUEBOOL> and C<OPpTRUEBOOL> flags.
+
+=item *
+
+L<B::Debug> has been upgraded to 1.18.
+
+This adds support (experimentally) for C<B::PADLIST>, which will be
+added in Perl 5.17.4.
+
+=item *
+
+L<B::Deparse> has been upgraded to 1.20.
+
+Avoid warning when run under C<perl -w>.
+
+It now deparses
+loop controls with the correct precedence, and multiple statements in a
+C<format> line are also now deparsed correctly.
+
+This release suppresses trailing semicolons in formats.
+
+This release adds stub deparsing for lexical subroutines.
+
+It no longer dies when deparsing C<sort> without arguments.  It now
+correctly omits the comma for C<system $prog @args> and C<exec $prog
+@args>.
+
+=item *
+
+L<bignum>, L<bigint> and L<bigrat> have been upgraded to 0.33.
+
+The overrides for C<hex> and C<oct> have been rewritten, eliminating
+several problems, and making one incompatible change:
+
+=over
+
+=item *
+
+Formerly, whichever of C<use bigint> or C<use bigrat> was compiled later
+would take precedence over the other, causing C<hex> and C<oct> not to
+respect the other pragma when in scope.
+
+=item *
+
+Using any of these three pragmata would cause C<hex> and C<oct> anywhere
+else in the program to evalute their arguments in list context and prevent
+them from inferring $_ when called without arguments.
+
+=item *
+
+Using any of these three pragmata would make C<oct("1234")> return 1234
+(for any number not beginning with 0) anywhere in the program.  Now "1234"
+is translated from octal to decimal, whether within the pragma's scope or
+not.
+
+=item *
+
+The global overrides that facilitate lexical use of C<hex> and C<oct> now
+respect any existing overrides that were in place before the new overrides
+were installed, falling back to them outside of the scope of C<use bignum>.
 
 =item *
 
-L<XXX> has been upgraded from version A.xx to B.yy.
+C<use bignum "hex">, C<use bignum "oct"> and similar invocations for bigint
+and bigrat now export a C<hex> or C<oct> function, instead of providing a
+global override.
 
 =back
 
+=item *
+
+L<Carp> has been upgraded to 1.29.
+
+Carp is no longer confused when C<caller> returns undef for a package that
+has been deleted.
+
+The C<longmess()> and C<shortmess()> functions are now documented.
+
+=item *
+
+L<CGI> has been upgraded to 3.63.
+
+Unrecognized HTML escape sequences are now handled better, problematic
+trailing newlines are no longer inserted after E<lt>formE<gt> tags
+by C<startform()> or C<start_form()>, and bogus "Insecure Dependency"
+warnings appearing with some versions of perl are now worked around.
+
+=item *
+
+L<Class::Struct> has been upgraded to 0.64.
+
+The constructor now respects overridden accessor methods [perl #29230].
+
+=item *
+
+L<Compress::Raw::Bzip2> has been upgraded to 2.060.
+
+The misuse of Perl's "magic" API has been fixed.
+
+=item *
+
+L<Compress::Raw::Zlib> has been upgraded to 2.060.
+
+Upgrade bundled zlib to version 1.2.7.
+
+Fix build failures on Irix, Solaris, and Win32, and also when building as C++
+[rt.cpan.org #69985], [rt.cpan.org #77030], [rt.cpan.org #75222].
+
+The misuse of Perl's "magic" API has been fixed.
+
+C<compress()>, C<uncompress()>, C<memGzip()> and C<memGunzip()> have
+been speeded up by making parameter validation more efficient.
+
+=item *
+
+L<CPAN::Meta::Requirements> has been upgraded to 2.122.
+
+Treat undef requirements to C<from_string_hash> as 0 (with a warning).
+
+Added C<requirements_for_module> method.
+
+=item *
+
+L<CPANPLUS> has been upgraded to 0.9135.
+
+Allow adding F<blib/script> to PATH.
+
+Save the history between invocations of the shell.
+
+Handle multiple C<makemakerargs> and C<makeflags> arguments better.
+
+This resolves issues with the SQLite source engine.
+
+=item *
+
+L<Data::Dumper> has been upgraded to 2.145.
+
+It has been optimized to only build a seen-scalar hash as necessary,
+thereby speeding up serialization drastically.
+
+Additional tests were added in order to improve statement, branch, condition
+and subroutine coverage.  On the basis of the coverage analysis, some of the
+internals of Dumper.pm were refactored.  Almost all methods are now
+documented.
+
+=item *
+
+L<DB_File> has been upgraded to 1.827.
+
+The main Perl module no longer uses the C<"@_"> construct.
+
+=item *
+
+L<Devel::Peek> has been upgraded to 1.11.
+
+This fixes compilation with C++ compilers and makes the module work with
+the new pad API.
+
+=item *
+
+L<Digest::MD5> has been upgraded to 2.52.
+
+Fix C<Digest::Perl::MD5> OO fallback [rt.cpan.org #66634].
+
+=item *
+
+L<Digest::SHA> has been upgraded to 5.84.
+
+This fixes a double-free bug, which might have caused vulnerabilities
+in some cases.
+
+=item *
+
+L<DynaLoader> has been upgraded to 1.18.
+
+This is due to a minor code change in the XS for the VMS implementation.
+
+This fixes warnings about using C<CODE> sections without an C<OUTPUT>
+section.
+
+=item *
+
+L<Encode> has been upgraded to 2.49.
+
+The Mac alias x-mac-ce has been added, and various bugs have been fixed
+in Encode::Unicode, Encode::UTF7 and Encode::GSM0338.
+
+=item *
+
+L<Env> has been upgraded to 1.04.
+
+Its SPLICE implementation no longer misbehaves in list context.
+
+=item *
+
+L<ExtUtils::CBuilder> has been upgraded to 0.280210.
+
+Manifest files are now correctly embedded for those versions of VC++ which
+make use of them. [perl #111782, #111798].
+
+A list of symbols to export can now be passed to C<link()> when on
+Windows, as on other OSes [perl #115100].
+
+=item *
+
+L<ExtUtils::ParseXS> has been upgraded to 3.18.
+
+The generated C code now avoids unnecessarily incrementing
+C<PL_amagic_generation> on Perl versions where it's done automatically
+(or on current Perl where the variable no longer exists).
+
+This avoids a bogus warning for initialised XSUB non-parameters [perl
+#112776].
+
+=item *
+
+L<File::Copy> has been upgraded to 2.26.
+
+C<copy()> no longer zeros files when copying into the same directory,
+and also now fails (as it has long been documented to do) when attempting
+to copy a file over itself.
+
+=item *
+
+L<File::DosGlob> has been upgraded to 1.10.
+
+The internal cache of file names that it keeps for each caller is now
+freed when that caller is freed.  This means
+C<< use File::DosGlob 'glob'; eval 'scalar <*>' >> no longer leaks memory.
+
+=item *
+
+L<File::Fetch> has been upgraded to 0.38.
+
+Added the 'file_default' option for URLs that do not have a file
+component.
+
+Use C<File::HomeDir> when available, and provide C<PERL5_CPANPLUS_HOME> to
+override the autodetection.
+
+Always re-fetch F<CHECKSUMS> if C<fetchdir> is set.
+
+=item *
+
+L<File::Find> has been upgraded to 1.23.
+
+This fixes inconsistent unixy path handling on VMS.
+
+Individual files may now appear in list of directories to be searched
+[perl #59750].
+
+=item *
+
+L<File::Glob> has been upgraded to 1.20.
+
+File::Glob has had exactly the same fix as File::DosGlob.  Since it is
+what Perl's own C<glob> operator itself uses (except on VMS), this means
+C<< eval 'scalar <*>' >> no longer leaks.
+
+A space-separated list of patterns return long lists of results no longer
+results in memory corruption or crashes.  This bug was introduced in
+Perl 5.16.0.  [perl #114984]
+
+=item *
+
+L<File::Spec::Unix> has been upgraded to 3.40.
+
+C<abs2rel> could produce incorrect results when given two relative paths or
+the root directory twice [perl #111510].
+
+=item *
+
+L<File::stat> has been upgraded to 1.07.
+
+C<File::stat> ignores the L<filetest> pragma, and warns when used in
+combination therewith.  But it was not warning for C<-r>.  This has been
+fixed [perl #111640].
+
+C<-p> now works, and does not return false for pipes [perl #111638].
+
+Previously C<File::stat>'s overloaded C<-x> and C<-X> operators did not give
+the correct results for directories or executable files when running as
+root. They had been treating executable permissions for root just like for
+any other user, performing group membership tests I<etc> for files not owned
+by root. They now follow the correct Unix behaviour - for a directory they
+are always true, and for a file if any of the three execute permission bits
+are set then they report that root can execute the file. Perl's builtin
+C<-x> and C<-X> operators have always been correct.
+
+=item *
+
+L<File::Temp> has been upgraded to 0.23
+
+Fixes various bugs involving directory removal.  Defers unlinking tempfiles if
+the initial unlink fails, which fixes problems on NFS.
+
+=item *
+
+L<GDBM_File> has been upgraded to 1.15.
+
+The undocumented optional fifth parameter to C<TIEHASH> has been
+removed. This was intended to provide control of the callback used by
+C<gdbm*> functions in case of fatal errors (such as filesystem problems),
+but did not work (and could never have worked). No code on CPAN even
+attempted to use it. The callback is now always the previous default,
+C<croak>. Problems on some platforms with how the C<C> C<croak> function
+is called have also been resolved.
+
+=item *
+
+L<Hash::Util> has been upgraded to 0.15.
+
+C<hash_unlocked> and C<hashref_unlocked> now returns true if the hash is
+unlocked, instead of always returning false [perl #112126].
+
+C<hash_unlocked>, C<hashref_unlocked>, C<lock_hash_recurse> and
+C<unlock_hash_recurse> are now exportable [perl #112126].
+
+Two new functions, C<hash_locked> and C<hashref_locked>, have been added.
+Oddly enough, these two functions were already exported, even though they
+did not exist [perl #112126].
+
+=item *
+
+L<HTTP::Tiny> has been upgraded to 0.025.
+
+Add SSL verification features [github #6], [github #9].
+
+Include the final URL in the response hashref.
+
+Add C<local_address> option.
+
+This improves SSL support.
+
+=item *
+
+L<IO> has been upgraded to 1.28.
+
+C<sync()> can now be called on read-only file handles [perl #64772].
+
+L<IO::Socket> tries harder to cache or otherwise fetch socket
+information.
+
+=item *
+
+L<IPC::Cmd> has been upgraded to 0.80.
+
+Use C<POSIX::_exit> instead of C<exit> in C<run_forked> [rt.cpan.org #76901].
+
+=item *
+
+L<IPC::Open3> has been upgraded to 1.13.
+
+The C<open3()> function no longer uses C<POSIX::close()> to close file
+descriptors since that breaks the ref-counting of file descriptors done by
+PerlIO in cases where the file descriptors are shared by PerlIO streams,
+leading to attempts to close the file descriptors a second time when
+any such PerlIO streams are closed later on.
+
+=item *
+
+L<Locale::Codes> has been upgraded to 3.25.
+
+It includes some new codes.
+
+=item *
+
+L<Memoize> has been upgraded to 1.03.
+
+Fix the C<MERGE> cache option.
+
+=item *
+
+L<Module::Build> has been upgraded to 0.4003.
+
+Fixed bug where modules without C<$VERSION> might have a version of '0' listed
+in 'provides' metadata, which will be rejected by PAUSE.
+
+Fixed bug in PodParser to allow numerals in module names.
+
+Fixed bug where giving arguments twice led to them becoming arrays, resulting
+in install paths like F<ARRAY(0xdeadbeef)/lib/Foo.pm>.
+
+A minor bug fix allows markup to be used around the leading "Name" in
+a POD "abstract" line, and some documentation improvements have been made.
+
+=item *
+
+L<Module::CoreList> has been upgraded to 2.90
+
+Version information is now stored as a delta, which greatly reduces the
+size of the F<CoreList.pm> file.
+
+This restores compatibility with older versions of perl and cleans up
+the corelist data for various modules.
+
+=item *
+
+L<Module::Load::Conditional> has been upgraded to 0.54.
+
+Fix use of C<requires> on perls installed to a path with spaces.
+
+Various enhancements include the new use of Module::Metadata.
+
+=item *
+
+L<Module::Metadata> has been upgraded to 1.000011.
+
+The creation of a Module::Metadata object for a typical module file has
+been sped up by about 40%, and some spurious warnings about C<$VERSION>s
+have been suppressed.
+
+=item *
+
+L<Module::Pluggable> has been upgraded to 4.7.
+
+Amongst other changes, triggers are now allowed on events, which gives
+a powerful way to modify behaviour.
+
+=item *
+
+L<Net::Ping> has been upgraded to 2.41.
+
+This fixes some test failures on Windows.
+
+=item *
+
+L<Opcode> has been upgraded to 1.25.
+
+Reflect the removal of the boolkeys opcode and the addition of the
+clonecv, introcv and padcv opcodes.
+
+=item *
+
+L<overload> has been upgraded to 1.22.
+
+C<no overload> now warns for invalid arguments, just like C<use overload>.
+
+=item *
+
+L<PerlIO::encoding> has been upgraded to 0.16.
+
+This is the module implementing the ":encoding(...)" I/O layer.  It no
+longer corrupts memory or crashes when the encoding back-end reallocates
+the buffer or gives it a typeglob or shared hash key scalar.
+
+=item *
+
+L<PerlIO::scalar> has been upgraded to 0.16.
+
+The buffer scalar supplied may now only contain code pounts 0xFF or
+lower. [perl #109828]
+
+=item *
+
+L<Perl::OSType> has been upgraded to 1.003.
+
+This fixes a bug detecting the VOS operating system.
+
+=item *
+
+L<Pod::Html> has been upgraded to 1.18.
+
+The option C<--libpods> has been reinstated. It is deprecated, and its use
+does nothing other than issue a warning that it is no longer supported.
+
+Since the HTML files generated by pod2html claim to have a UTF-8 charset,
+actually write the files out using UTF-8 [perl #111446].
+
+=item *
+
+L<Pod::Simple> has been upgraded to 3.28.
+
+Numerous improvements have been made, mostly to Pod::Simple::XHTML,
+which also has a compatibility change: the C<codes_in_verbatim> option
+is now disabled by default.  See F<cpan/Pod-Simple/ChangeLog> for the
+full details.
+
+=item *
+
+L<re> has been upgraded to 0.23
+
+Single character [class]es like C</[s]/> or C</[s]/i> are now optimized
+as if they did not have the brackets, i.e. C</s/> or C</s/i>.
+
+See note about C<op_comp> in the L</Internal Changes> section below.
+
+=item *
+
+L<Safe> has been upgraded to 2.35.
+
+Fix interactions with C<Devel::Cover>.
+
+Don't eval code under C<no strict>.
+
+=item *
+
+L<Scalar::Util> has been upgraded to version 1.27.
+
+Fix an overloading issue with C<sum>.
+
+C<first> and C<reduce> now check the callback first (so C<&first(1)> is
+disallowed).
+
+Fix C<tainted> on magical values [rt.cpan.org #55763].
+
+Fix C<sum> on previously magical values [rt.cpan.org #61118].
+
+Fix reading past the end of a fixed buffer [rt.cpan.org #72700].
+
+=item *
+
+L<Search::Dict> has been upgraded to 1.07.
+
+No longer require C<stat> on filehandles.
+
+Use C<fc> for casefolding.
+
+=item *
+
+L<Socket> has been upgraded to 2.009.
+
+Constants and functions required for IP multicast source group membership
+have been added.
+
+C<unpack_sockaddr_in()> and C<unpack_sockaddr_in6()> now return just the IP
+address in scalar context, and C<inet_ntop()> now guards against incorrect
+length scalars being passed in.
+
+This fixes an uninitialized memory read.
+
+=item *
+
+L<Storable> has been upgraded to 2.41.
+
+Modifying C<$_[0]> within C<STORABLE_freeze> no longer results in crashes
+[perl #112358].
+
+An object whose class implements C<STORABLE_attach> is now thawed only once
+when there are multiple references to it in the structure being thawed
+[perl #111918].
+
+Restricted hashes were not always thawed correctly [perl #73972].
+
+Storable would croak when freezing a blessed REF object with a
+C<STORABLE_freeze()> method [perl #113880].
+
+It can now freeze and thaw vstrings correctly.  This causes a slight
+incompatible change in the storage format, so the format version has
+increased to 2.9.
+
+This contains various bugfixes, including compatibility fixes for older
+versions of Perl and vstring handling.
+
+=item *
+
+L<Sys::Syslog> has been upgraded to 0.32.
+
+This contains several bug fixes relating to C<getservbyname()>,
+C<setlogsock()>and log levels in C<syslog()>, together with fixes for
+Windows, Haiku-OS and GNU/kFreeBSD.  See F<cpan/Sys-Syslog/Changes>
+for the full details.
+
+=item *
+
+L<Term::ANSIColor> has been upgraded to 4.02.
+
+Add support for italics.
+
+Improve error handling.
+
+=item *
+
+L<Term::ReadLine> has been upgraded to 1.10.  This fixes the
+use of the B<cpan> and B<cpanp> shells on Windows in the event that the current
+drive happens to contain a F<\dev\tty> file.
+
+=item *
+
+L<Test::Harness> has been upgraded to 3.26.
+
+Fix glob semantics on Win32 [rt.cpan.org #49732].
+
+Don't use C<Win32::GetShortPathName> when calling perl [rt.cpan.org #47890].
+
+Ignore -T when reading shebang [rt.cpan.org #64404].
+
+Handle the case where we don't know the wait status of the test more
+gracefully.
+
+Make the test summary 'ok' line overridable so that it can be changed to a
+plugin to make the output of prove idempotent.
+
+Don't run world-writable files.
+
+=item *
+
+L<Text::Tabs> and L<Text::Wrap> have been upgraded to
+2012.0818.  Support for Unicode combining characters has been added to them
+both.
+
+=item *
+
+L<threads::shared> has been upgraded to 1.31.
+
+This adds the option to warn about or ignore attempts to clone structures
+that can't be cloned, as opposed to just unconditionally dying in
+that case.
+
+This adds support for dual-valued values as created by
+L<Scalar::Util::dualvar|Scalar::Util/"dualvar NUM, STRING">.
+
+=item *
+
+L<Tie::StdHandle> has been upgraded to 4.3.
+
+C<READ> now respects the offset argument to C<read> [perl #112826].
+
+=item *
+
+L<Time::Local> has been upgraded to 1.2300.
+
+Seconds values greater than 59 but less than 60 no longer cause
+C<timegm()> and C<timelocal()> to croak.
+
+=item *
+
+L<Unicode::UCD> has been upgraded to 0.53.
+
+This adds a function L<all_casefolds()|Unicode::UCD/all_casefolds()>
+that returns all the casefolds.
+
+=item *
+
+L<Win32> has been upgraded to 0.47.
+
+New APIs have been added for getting and setting the current code page.
+
+=back
+
+
 =head2 Removed Modules and Pragmata
 
-=over 
+=over
 
 =item *
 
@@ -914,14 +1687,8 @@ The following additions or changes have been made to diagnostic output,
 including warnings and fatal error messages.  For the complete list of
 diagnostic messages, see L<perldiag>.
 
-XXX New or changed warnings emitted by the core's C<C> code go here.  Also
-include any changes in L<perldiag> that reconcile it to the C<C> code.
-
 =head2 New Diagnostics
 
-XXX Newly added diagnostic messages go under here, separated into New Errors
-and New Warnings
-
 =head3 New Errors
 
 =over 4
@@ -957,7 +1724,7 @@ L<Can't use an undefined value as a subroutine reference|perldiag/"Can't use an
 
 Calling an undefined value as a subroutine now produces this error message.
 It used to, but was accidentally disabled, first in Perl 5.004 for
-non-magical variables, and then in Perl 5.14 for magical (e.g., tied)
+non-magical variables, and then in Perl v5.14 for magical (e.g., tied)
 variables.  It has now been restored.  In the mean time, undef was treated
 as an empty string [perl #113576].
 
@@ -979,10 +1746,7 @@ To use lexical subs, you must first enable them:
 
 =item *
 
-XXX: This needs more detail.
-
-Strings with code points over 0xFF may not be mapped into in-memory file
-handles
+L<'Strings with code points over 0xFF may not be mapped into in-memory file handles'|perldiag/"Strings with code points over 0xFF may not be mapped into in-memory file handles">
 
 =item *
 
@@ -1197,15 +1961,24 @@ When set, it includes 'api_versionstring' in 'archname'. E.g.
 x86_64-linux-5.13.6-thread-multi.  It is unset by default.
 
 This feature was requested by Tim Bunce, who observed that
-INSTALL_BASE creates a library structure that does not
+C<INSTALL_BASE> creates a library structure that does not
 differentiate by perl version.  Instead, it places architecture
 specific files in "$install_base/lib/perl5/$archname".  This makes
-it difficult to use a common INSTALL_BASE library path with
+it difficult to use a common C<INSTALL_BASE> library path with
 multiple versions of perl.
 
-By setting -Duseversionedarchname, the $archname will be
-distinct for architecture *and* API version, allowing mixed use of
-INSTALL_BASE.
+By setting C<-Duseversionedarchname>, the $archname will be
+distinct for architecture I<and> API version, allowing mixed use of
+C<INSTALL_BASE>.
+
+=item *
+
+Add a C<PERL_NO_INLINE_FUNCTIONS> option
+
+If C<PERL_NO_INLINE_FUNCTIONS> is defined, don't include "inline.h"
+
+This permits test code to include the perl headers for definitions without
+creating a link dependency on the perl library (which may not exist yet).
 
 =item *
 
@@ -1263,7 +2036,7 @@ actively maintained.
 
 Support code relating to UTS global has been removed.  UTS was a mainframe
 version of System V created by Amdahl, subsequently sold to UTS Global.  The
-port has not been touched since before Perl 5.8.0, and UTS Global is now
+port has not been touched since before Perl v5.8.0, and UTS Global is now
 defunct.
 
 =item VM/ESA
@@ -1300,7 +2073,7 @@ that assume C99 [perl #113778].
 =head3 clang++
 
 There is now a workaround for a compiler bug that prevented compiling
-with clang++ since Perl 5.15.7 [perl #112786].
+with clang++ since Perl v5.15.7 [perl #112786].
 
 =head3 C++
 
@@ -1343,16 +2116,17 @@ when extended parse is enabled in the process from which Perl is run.
 
 The character set for Extended Filename Syntax (EFS) is now enabled by default
 on VMS.  Among other things, this provides better handling of dots in directory
-names, multiple dots in filenames,and spaces in filenames.  To obtain the old
+names, multiple dots in filenames, and spaces in filenames.  To obtain the old
 behavior, set the logical name C<DECC$EFS_CHARSET> to C<DISABLE>.
 
 =item *
 
-Fix linking on builds configured with -Dusemymalloc=y.
+Fixed linking on builds configured with C<-Dusemymalloc=y>.
 
 =item *
 
-It should now be possible to compile Perl as C++ on VMS.
+Experimental support for building Perl with the HP C++ compiler is available
+by configuring with C<-Dusecxx>.
 
 =item *
 
@@ -1387,7 +2161,7 @@ Windows Desktop) in F<win32/Makefile>.
 
 =item *
 
-The option to build without USE_SOCKETS_AS_HANDLES has been removed.
+The option to build without C<USE_SOCKETS_AS_HANDLES> has been removed.
 
 =item *
 
@@ -1420,14 +2194,14 @@ deleting the PATH environment variable [perl #113798].
 
 =item *
 
-A new makefile option, USE_64_BIT_INT, has been added to the Windows
+A new makefile option, C<USE_64_BIT_INT>, has been added to the Windows
 makefiles.  Set this to "define" when building a 32-bit perl if you want
 it to use 64-bit integers.
 
 Machine code size reductions, already made to the DLLs of XS modules in
-Perl 5.17.2, have now been extended to the perl DLL itself.
+Perl v5.17.2, have now been extended to the perl DLL itself.
 
-Building with VC++ 6.0 was inadvertently broken in Perl 5.17.2 but has
+Building with VC++ 6.0 was inadvertently broken in Perl v5.17.2 but has
 now been fixed again.
 
 =back
@@ -1443,7 +2217,7 @@ to fully restore a clean build.
 
 =item *
 
-Synonyms for the misleadingly named C<av_len()> has been created:
+Synonyms for the misleadingly named C<av_len()> have been created:
 C<av_top_index()> and C<av_tindex>.  All three of these return the
 number of the highest index in the array, not the number of elements it
 contains.
@@ -1466,7 +2240,7 @@ If you have code like that, simply replace it with
 
     SvUPGRADE(sv);
 
-or to to avoid compiler warnings with older perls, possibly
+or to avoid compiler warnings with older perls, possibly
 
     (void)SvUPGRADE(sv);
 
@@ -1474,14 +2248,18 @@ or to to avoid compiler warnings with older perls, possibly
 
 Perl has a new copy-on-write mechanism that allows any SvPOK scalar to be
 upgraded to a copy-on-write scalar.  A reference count on the string buffer
-is stored in the string buffer itself.
+is stored in the string buffer itself.  This feature is B<not enabled by
+default>.
 
-This breaks a few XS modules by allowing copy-on-write scalars to go
-through code paths that never encountered them before.
+It can be enabled in a perl build by running F<Configure> with
+B<-Accflags=-DPERL_NEW_COPY_ON_WRITE>, and we would encourage XS authors
+to try their code with such an enabled perl, and provide feedback.
+Unfortunately, there is not yet a good guide to updating XS code to cope
+with COW.  Until such a document is available, consult the perl5-porters
+mailing list.
 
-This behaviour can still be disabled by running F<Configure> with
-B<-Accflags=-DPERL_NO_COW>.  This option will probably be removed in Perl
-5.20.
+It breaks a few XS modules by allowing copy-on-write scalars to go
+through code paths that never encountered them before.
 
 =item *
 
@@ -1492,7 +2270,7 @@ Use the SvIsCOW macro (as before) to identify a copy-on-write scalar.
 
 =item *
 
-PL_glob_index is gone.
+C<PL_glob_index> is gone.
 
 =item *
 
@@ -1512,7 +2290,7 @@ A new op type, C<OP_PADRANGE> has been introduced.  The perl peephole
 optimiser will, where possible, substitute a single padrange op for a
 pushmark followed by one or more pad ops, and possibly also skipping list
 and nextstate ops.  In addition, the op can carry out the tasks associated
-with the RHS of a my(...) = @_ assignment, so those ops may be optimised
+with the RHS of a C<< my(...) = @_ >> assignment, so those ops may be optimised
 away too.
 
 =item *
@@ -1546,7 +2324,7 @@ C<mg_length> has been deprecated.
 C<sv_len> now always returns a byte count and C<sv_len_utf8> a character
 count.  Previously, C<sv_len> and C<sv_len_utf8> were both buggy and would
 sometimes returns bytes and sometimes characters.  C<sv_len_utf8> no longer
-assumes that its argument is in UTF8.  Neither of these creates UTF8 caches
+assumes that its argument is in UTF-8.  Neither of these creates UTF-8 caches
 for tied or overloaded values or for non-PVs any more.
 
 =item *
@@ -1625,7 +2403,7 @@ should be operationally invisible.
 
 =item *
 
-The C<study> function was made a no-op in 5.16.  It was simply disabled via
+The C<study> function was made a no-op in v5.16.  It was simply disabled via
 a C<return> statement; the code was left in place.  Now the code supporting
 what C<study> used to do has been removed.
 
@@ -1640,17 +2418,17 @@ holds stash pointers.
 
 In the pluggable regex API, the C<regexp_engine> struct has acquired a new
 field C<op_comp>, which is currently just for perl's internal use, and
-should be initialised to NULL by other regex plugin modules.
+should be initialized to NULL by other regex plugin modules.
 
 =item *
 
-A new function C<alloccoptash> has been added to the API, but is considered
+A new function C<alloccopstash> has been added to the API, but is considered
 experimental.  See L<perlapi>.
 
 =item *
 
 Perl used to implement get magic in a way that would sometimes hide bugs in
-code could call mg_get() too many times on magical values.  This hiding of
+code that could call mg_get() too many times on magical values.  This hiding of
 errors no longer occurs, so long-standing bugs may become visible now.  If
 you see magic-related errors in XS code, check to make sure it, together
 with the Perl API functions it uses, calls mg_get() only once on SvGMAGICAL()
@@ -1664,13 +2442,13 @@ compilation error is simpler and safer [perl #111462][perl #112312].
 
 =item *
 
-PERL_DEBUG_READONLY_OPS has been rewritten to work with the new slab
+C<PERL_DEBUG_READONLY_OPS> has been rewritten to work with the new slab
 allocator, allowing it to catch more violations than before.
 
 =item *
 
-The old slab allocator for ops, which was only enabled for PERL_IMPLICIT_SYS
-and PERL_DEBUG_READONLY_OPS, has been retired.
+The old slab allocator for ops, which was only enabled for C<PERL_IMPLICIT_SYS>
+and C<PERL_DEBUG_READONLY_OPS>, has been retired.
 
 =back
 
@@ -1686,7 +2464,7 @@ string eval [perl #65838].
 
 =item *
 
--DPERL_GLOBAL_STRUCT builds now free the global struct B<after>
+C<-DPERL_GLOBAL_STRUCT> builds now free the global struct B<after>
 they've finished using it.
 
 =item *
@@ -1723,13 +2501,13 @@ and exit nonzero. [perl #61362]
 =item *
 
 C<sort {undef} ...> under fatal warnings no longer crashes.  It had
-begun crashing in Perl 5.16.
+begun crashing in Perl v5.16.
 
 =item *
 
 Stashes blessed into each other
 (C<bless \%Foo::, 'Bar'; bless \%Bar::, 'Foo'>) no longer result in double
-frees.  This bug started happening in Perl 5.16.
+frees.  This bug started happening in Perl v5.16.
 
 =item *
 
@@ -1744,25 +2522,19 @@ it, too, when invoked a second time [perl #23180].
 
 =item *
 
-Accessing C<$&> after a pattern match now works if it had not been seen
-before the match.  I.e., this applies to C<${'&'}> (under C<no strict>) and
-C<eval '$&'>.  The same applies to C<$'> and C<$`> [perl #4289].
-
-=item *
-
 Several bugs involving C<local *ISA> and C<local *Foo::> causing stale
 MRO caches have been fixed.
 
 =item *
 
 Defining a subroutine when its typeglob has been aliased no longer results
-in stale method caches.  This bug was introduced in Perl 5.10.
+in stale method caches.  This bug was introduced in Perl v5.10.
 
 =item *
 
 Localising a typeglob containing a subroutine when the typeglob's package
 has been deleted from its parent stash no longer produces an error.  This
-bug was introduced in Perl 5.14.
+bug was introduced in Perl v5.14.
 
 =item *
 
@@ -1893,13 +2665,13 @@ C<--subname> no longer produces erroneous ambiguity warnings.
 =item *
 
 C<v10> is now allowed as a label or package name.  This was inadvertently
-broken when v-strings were added in Perl 5.6.  [perl #56880]
+broken when v-strings were added in Perl v5.6.  [perl #56880]
 
 =item *
 
 C<length>, C<pos>, C<substr> and C<sprintf> could be confused by ties,
 overloading, references and typeglobs if the stringification of such
-changed the internal representation to or from UTF8.  [perl #114410]
+changed the internal representation to or from UTF-8.  [perl #114410]
 
 =item *
 
@@ -1910,8 +2682,8 @@ calls STORE (it was already calling FETCH).
 
 C<$tied =~ s/$non_utf8/$utf8/> no longer loops infinitely if the tied
 variable returns a Latin-1 string, shared hash key scalar, or reference or
-typeglob that stringifies as ASCII or Latin-1.  This is a regression from
-5.12.x.
+typeglob that stringifies as ASCII or Latin-1.  This was a regression from
+v5.12.
 
 =item *
 
@@ -1980,9 +2752,9 @@ carried on working without it.
 
 =item *
 
-The error "Can't localize through a reference" had disappeared in 5.16.0
+The error "Can't localize through a reference" had disappeared in v5.16.0
 when C<local %$ref> appeared on the last line of an lvalue subroutine.
-This error disappeared for C<\local %$ref> in perl 5.8.1.  It has now
+This error disappeared for C<\local %$ref> in perl v5.8.1.  It has now
 been restored.
 
 =item *
@@ -2032,14 +2804,14 @@ omitted.
 
 =item *
 
-Reset the utf8 position cache when accessing magical variables to avoid the
-string buffer and the utf8 position cache getting out of sync
+The UTF-8 position cache is now reset when accessing magical variables, to
+avoid the string buffer and the UTF-8 position cache getting out of sync
 [perl #114410].
 
 =item *
 
-Various cases of get magic being called twice for magical utf8 strings have been
-fixed.
+Various cases of get magic being called twice for magical UTF-8
+strings have been fixed.
 
 =item *
 
@@ -2090,7 +2862,7 @@ SUPER package had already been accessed by other means.
 
 =item *
 
-Stash aliasing (C<*foo:: = *bar::>) no longer causes SUPER calls to ignore
+Stash aliasing (C<< *foo:: = *bar:: >>) no longer causes SUPER calls to ignore
 changes to methods or @ISA or use the wrong package.
 
 =item *
@@ -2120,7 +2892,7 @@ arbitrary expression), rather than the handle "foo".
 =item *
 
 C<truncate FOO, $len> no longer falls back to treating "FOO" as a file name if
-the filehandle has been deleted.  This was broken in Perl 5.16.0.
+the filehandle has been deleted.  This was broken in Perl v5.16.0.
 
 =item *
 
@@ -2148,7 +2920,7 @@ C<undef> on a subroutine now clears call checkers.
 
 =item *
 
-The C<ref> operator started leaking memory on blessed objects in Perl 5.16.0.
+The C<ref> operator started leaking memory on blessed objects in Perl v5.16.0.
 This has been fixed [perl #114340].
 
 =item *
@@ -2214,7 +2986,7 @@ Formats are no longer created after compilation errors.
 =item *
 
 Under debugging builds, the B<-DA> command line option started crashing in Perl
-5.16.0.  It has been fixed [perl #114368].
+v5.16.0.  It has been fixed [perl #114368].
 
 =item *
 
@@ -2225,10 +2997,6 @@ resolves the common problem of the F<t/op/fork.t> test hanging on Windows [perl
 
 =item *
 
-The microperl build, broken since Perl 5.15.7, has now been restored.
-
-=item *
-
 The code which generates errors from C<require()> could potentially read one or
 two bytes before the start of the filename for filenames less than three bytes
 long and ending C</\.p?\z/>.  This has now been fixed.  Note that it could
@@ -2241,8 +3009,7 @@ thread-safe on VMS.
 
 =item *
 
-A bug in the compilation of a C</(?{})/> expression which affected the TryCatch
-test suite has been fixed [perl #114242].
+Non-blocking sockets have been fixed on VMS.
 
 =item *
 
@@ -2464,10 +3231,9 @@ and now gives:
 
 =item *
 
-Perl now works as well as can be expected on all releases of Unicode so
-far.  In v5.16, it worked on Unicodes 6.0 and 6.1, but there were
-various bugs for earlier releases; the older the release the more
-problems.
+Perl now can be recompiled to use any Unicode version.  In v5.16, it
+worked on Unicodes 6.0 and 6.1, but there were various bugs if earlier
+releases were used; the older the release the more problems.
 
 =item *
 
@@ -2563,7 +3329,7 @@ C<-$x> returns "-dogs" even if C<$y=0+$x> has happened at some point.
 
 =item *
 
-In Perl 5.14, C<-'-10'> was fixed to return "10", not "+10".  But magical
+In Perl v5.14, C<-'-10'> was fixed to return "10", not "+10".  But magical
 variables (C<$1>, ties) were not fixed till now [perl #57706].
 
 =item *
@@ -2616,8 +3382,8 @@ documentation) always returns the correct result.
 =item *
 
 The array iterator used for the C<each @array> construct is now correctly
-reset when C<@array> is cleared (RT #75596). This happens for example when the
-array is globally assigned to, as in C<@array = (...)>, but not when its
+reset when C<@array> is cleared [perl #75596]. This happens, for example, when
+the array is globally assigned to, as in C<@array = (...)>, but not when its
 B<values> are assigned to. In terms of the XS API, it means that C<av_clear()>
 will now reset the iterator.
 
@@ -2652,7 +3418,7 @@ freed when the outer sub is freed, even if the inner sub still exists
 =item *
 
 Duplication of in-memory filehandles by opening with a "<&=" or ">&=" mode
-stopped working properly in 5.16.0.  It was causing the new handle to
+stopped working properly in v5.16.0.  It was causing the new handle to
 reference a different scalar variable.  This has been fixed [perl #113764].
 
 =item *
@@ -2715,18 +3481,18 @@ was tied or a string internally.
 =item *
 
 Using a C<format> after its enclosing sub was freed could crash as of
-perl 5.12.0, if the format referenced lexical variables from the outer sub.
+perl v5.12.0, if the format referenced lexical variables from the outer sub.
 
 =item *
 
 Using a C<format> after its enclosing sub was undefined could crash as of
-perl 5.10.0, if the format referenced lexical variables from the outer sub.
+perl v5.10.0, if the format referenced lexical variables from the outer sub.
 
 =item *
 
 Using a C<format> defined inside a closure, which format references
 lexical variables from outside, never really worked unless the C<write>
-call was directly inside the closure.  In 5.10.0 it even started crashing.
+call was directly inside the closure.  In v5.10.0 it even started crashing.
 Now the copy of that closure nearest the top of the call stack is used to
 find those variables.
 
@@ -2778,7 +3544,7 @@ reference".
 Two bugs involving @ISA have been fixed.  C<*ISA = *glob_without_array> and
 C<undef *ISA; @{*ISA}> would prevent future modifications to @ISA from
 updating the internal caches used to look up methods.  The
-*glob_without_array case was a regression from Perl 5.12.
+*glob_without_array case was a regression from Perl v5.12.
 
 =item *
 
@@ -2838,17 +3604,17 @@ debugging builds.
 =item *
 
 Assigning a regular expression to a scalar containing a number no longer
-causes subsequent nummification to produce random numbers.
+causes subsequent numification to produce random numbers.
 
 =item *
 
 Assigning a regular expression to a magic variable no longer wipes away the
-magic.  This is a regression from 5.10.
+magic.  This was a regression from v5.10.
 
 =item *
 
 Assigning a regular expression to a blessed scalar no longer results in
-crashes.  This is also a regression from 5.10.
+crashes.  This was also a regression from v5.10.
 
 =item *
 
@@ -2857,13 +3623,13 @@ flattening into strings.
 
 =item *
 
-Nummifying a regular expression no longer results in an uninitialized
+Numifying a regular expression no longer results in an uninitialized
 warning.
 
 =item *
 
 Negative array indices no longer cause EXISTS methods of tied variables to
-be ignored.  This is a regression from 5.12.
+be ignored.  This was a regression from v5.12.
 
 =item *
 
@@ -2872,8 +3638,8 @@ non-objects.
 
 =item *
 
-C<$byte_overload .= $utf8> no longer results in doubly-encoded UTF8 if the
-left-hand scalar happened to have produced a UTF8 string the last time
+C<$byte_overload .= $utf8> no longer results in doubly-encoded UTF-8 if the
+left-hand scalar happened to have produced a UTF-8 string the last time
 overloading was invoked.
 
 =item *
@@ -2901,15 +3667,65 @@ becomes empty.
 
 =item *
 
-XXX: the imperfect behavior of the ** deprecation
+There are no known regressions.  Please report any bugs you find!
 
 =back
 
-=head1 Acknowledgements
+=head1 Obituary
+
+Hojung Yoon (AMORETTE), 24, of Seoul, South Korea, went to his long rest
+on May 8, 2013 with llama figurine and autographed TIMTOADY card.  He
+was a brilliant young Perl 5 & 6 hacker and a devoted member of
+Seoul.pm.  He programmed Perl, talked Perl, ate Perl, and loved Perl.  We
+believe that he is still programming in Perl with his broken IBM laptop
+somewhere.  He will be missed.
 
-XXX Generate this with:
+=head1 Acknowledgements
 
-  perl Porting/acknowledgements.pl v5.18.0..HEAD
+Perl v5.18.0 represents approximately 12 months of development since
+Perl v5.16.0 and contains approximately 400,000 lines of changes across
+2,100 files from 113 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 v5.18.0:
+
+Aaron Crane, Aaron Trevena, Abhijit Menon-Sen, Adrian M. Enache, Alan
+Haggai Alavi, Alexandr Ciornii, Andrew Tam, Andy Dougherty, Anton Nikishaev,
+Aristotle Pagaltzis, Augustina Blair, Bob Ernst, Brad Gilbert, Breno G. de
+Oliveira, Brian Carlson, Brian Fraser, Charlie Gonzalez, Chip Salzenberg, Chris
+'BinGOs' Williams, Christian Hansen, Colin Kuskie, Craig A. Berry, Dagfinn
+Ilmari Mannsåker, Daniel Dragan, Daniel Perrett, Darin McBride, Dave Rolsky,
+David Golden, David Leadbeater, David Mitchell, David Nicol, Dominic
+Hargreaves, E. Choroba, Eric Brine, Evan Miller, Father Chrysostomos, Florian
+Ragwitz, François Perrad, George Greer, Goro Fuji, H.Merijn Brand, Herbert
+Breunung, Hugo van der Sanden, Igor Zaytsev, James E Keenan, Jan Dubois,
+Jasmine Ahuja, Jerry D. Hedden, Jess Robinson, Jesse Luehrs, Joaquin Ferrero,
+Joel Berger, John Goodyear, John Peacock, Karen Etheridge, Karl Williamson,
+Karthik Rajagopalan, Kent Fredric, Leon Timmermans, Lucas Holt, Lukas Mai,
+Marcus Holland-Moritz, Markus Jansen, Martin Hasch, Matthew Horsfall, Max
+Maischein, Michael G Schwern, Michael Schroeder, Moritz Lenz, Nicholas Clark,
+Niko Tyni, Oleg Nesterov, Patrik Hägglund, Paul Green, Paul Johnson, Paul
+Marquess, Peter Martini, Rafael Garcia-Suarez, Reini Urban, Renee Baecker,
+Rhesa Rozendaal, Ricardo Signes, Robin Barker, Ronald J. Kimball, Ruslan
+Zakirov, Salvador Fandiño, Sawyer X, Scott Lanning, Sergey Alekseev, Shawn M
+Moore, Shirakata Kentaro, Shlomi Fish, Sisyphus, Smylers, Steffen Müller,
+Steve Hay, Steve Peters, Steven Schubiger, Sullivan Beck, Sven Strickroth,
+Sébastien Aperghis-Tramoni, Thomas Sibley, Tobias Leich, Tom Wyant, Tony Cook,
+Vadim Konovalov, Vincent Pit, Volker Schatz, Walt Mankowski, Yves Orton,
+Zefram.
+
+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.
+
+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