diff options
-rw-r--r-- | MANIFEST | 1 | ||||
-rwxr-xr-x | Makefile.SH | 8 | ||||
-rw-r--r-- | pod/.gitignore | 2 | ||||
-rw-r--r-- | pod/perl5280delta.pod | 2438 | ||||
-rw-r--r-- | pod/perldelta.pod | 2324 | ||||
-rw-r--r-- | vms/descrip_mms.template | 2 | ||||
-rw-r--r-- | win32/GNUmakefile | 4 | ||||
-rw-r--r-- | win32/Makefile | 4 | ||||
-rw-r--r-- | win32/makefile.mk | 4 | ||||
-rw-r--r-- | win32/pod.mak | 8 |
10 files changed, 2620 insertions, 2175 deletions
@@ -5068,6 +5068,7 @@ pod/perl5244delta.pod Perl changes in version 5.24.4 pod/perl5260delta.pod Perl changes in version 5.26.0 pod/perl5261delta.pod Perl changes in version 5.26.1 pod/perl5262delta.pod Perl changes in version 5.26.2 +pod/perl5280delta.pod Perl changes in version 5.28.0 pod/perl561delta.pod Perl changes in version 5.6.1 pod/perl56delta.pod Perl changes in version 5.6 pod/perl581delta.pod Perl changes in version 5.8.1 diff --git a/Makefile.SH b/Makefile.SH index 123903dcb0..5197009290 100755 --- a/Makefile.SH +++ b/Makefile.SH @@ -575,7 +575,7 @@ esac $spitshell >>$Makefile <<'!NO!SUBS!' -perltoc_pod_prereqs = extra.pods pod/perl5280delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod pod/perluniprops.pod +perltoc_pod_prereqs = extra.pods pod/perl5281delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod pod/perluniprops.pod generated_pods = pod/perltoc.pod $(perltoc_pod_prereqs) generated_headers = uudmap.h bitcount.h mg_data.h @@ -1125,9 +1125,9 @@ pod/perlintern.pod: $(MINIPERL_EXE) autodoc.pl embed.fnc pod/perlmodlib.pod: $(MINIPERL_EXE) pod/perlmodlib.PL MANIFEST $(MINIPERL) pod/perlmodlib.PL -q -pod/perl5280delta.pod: pod/perldelta.pod - $(RMS) pod/perl5280delta.pod - $(LNS) perldelta.pod pod/perl5280delta.pod +pod/perl5281delta.pod: pod/perldelta.pod + $(RMS) pod/perl5281delta.pod + $(LNS) perldelta.pod pod/perl5281delta.pod extra.pods: $(MINIPERL_EXE) -@test ! -f extra.pods || rm -f `cat extra.pods` diff --git a/pod/.gitignore b/pod/.gitignore index 8974e374d6..26160694da 100644 --- a/pod/.gitignore +++ b/pod/.gitignore @@ -50,7 +50,7 @@ /roffitall # generated -/perl5280delta.pod +/perl5281delta.pod /perlapi.pod /perlintern.pod /perlmodlib.pod diff --git a/pod/perl5280delta.pod b/pod/perl5280delta.pod new file mode 100644 index 0000000000..0ecd260ca5 --- /dev/null +++ b/pod/perl5280delta.pod @@ -0,0 +1,2438 @@ +=encoding utf8 + +=head1 NAME + +perl5280delta - what is new for perl v5.28.0 + +=head1 DESCRIPTION + +This document describes differences between the 5.26.0 release and the 5.28.0 +release. + +If you are upgrading from an earlier release such as 5.24.0, first read +L<perl5260delta>, which describes differences between 5.24.0 and 5.26.0. + +=head1 Core Enhancements + +=head2 Unicode 10.0 is supported + +A list of changes is at +L<http://www.unicode.org/versions/Unicode10.0.0>. + +=head2 L<C<delete>|perlfunc/delete EXPR> on key/value hash slices + +L<C<delete>|perlfunc/delete EXPR> can now be used on +L<keyE<sol>value hash slices|perldata/KeyE<sol>Value Hash Slices>, +returning the keys along with the deleted values. +L<[perl #131328]|https://rt.perl.org/Ticket/Display.html?id=131328> + +=head2 Experimentally, there are now alphabetic synonyms for some regular expression assertions + +If you find it difficult to remember how to write certain of the pattern +assertions, there are now alphabetic synonyms. + + CURRENT NEW SYNONYMS + ------ ------------ + (?=...) (*pla:...) or (*positive_lookahead:...) + (?!...) (*nla:...) or (*negative_lookahead:...) + (?<=...) (*plb:...) or (*positive_lookbehind:...) + (?<!...) (*nlb:...) or (*negative_lookbehind:...) + (?>...) (*atomic:...) + +These are considered experimental, so using any of these will raise +(unless turned off) a warning in the C<experimental::alpha_assertions> +category. + +=head2 Mixed Unicode scripts are now detectable + +A mixture of scripts, such as Cyrillic and Latin, in a string is often +the sign of a spoofing attack. A new regular expression construct +now allows for easy detection of these. For example, you can say + + qr/(*script_run: \d+ \b )/x + +And the digits matched will all be from the same set of 10. You won't +get a look-alike digit from a different script that has a different +value than what it appears to be. + +Or: + + qr/(*sr: \b \w+ \b )/x + +makes sure that all the characters come from the same script. + +You can also combine script runs with C<(?E<gt>...)> (or +C<*atomic:...)>). + +Instead of writing: + + (*sr:(?<...)) + +you can now run: + + (*asr:...) + # or + (*atomic_script_run:...) + +This is considered experimental, so using it will raise (unless turned +off) a warning in the C<experimental::script_run> category. + +See L<perlre/Script Runs>. + +=head2 In-place editing with C<perl -i> is now safer + +Previously in-place editing (C<perl -i>) would delete or rename the +input file as soon as you started working on a new file. + +Without backups this would result in loss of data if there was an +error, such as a full disk, when writing to the output file. + +This has changed so that the input file isn't replaced until the +output file has been completely written and successfully closed. + +This works by creating a work file in the same directory, which is +renamed over the input file once the output file is complete. + +Incompatibilities: + +=over + +=item * + +Since this renaming needs to only happen once, if you create a thread +or child process, that renaming will only happen in the original +thread or process. + +=item * + +If you change directories while processing a file, and your operating +system doesn't provide the C<unlinkat()>, C<renameat()> and C<fchmodat()> +functions, the final rename step may fail. + +=back + +L<[perl #127663]|https://rt.perl.org/Public/Bug/Display.html?id=127663> + +=head2 Initialisation of aggregate state variables + +A persistent lexical array or hash variable can now be initialized, +by an expression such as C<state @a = qw(x y z)>. Initialization of a +list of persistent lexical variables is still not possible. + +=head2 Full-size inode numbers + +On platforms where inode numbers are of a type larger than perl's native +integer numerical types, L<stat|perlfunc/stat> will preserve the full +content of large inode numbers by returning them in the form of strings of +decimal digits. Exact comparison of inode numbers can thus be achieved by +comparing with C<eq> rather than C<==>. Comparison with C<==>, and other +numerical operations (which are usually meaningless on inode numbers), +work as well as they did before, which is to say they fall back to +floating point, and ultimately operate on a fairly useless rounded inode +number if the real inode number is too big for the floating point format. + +=head2 The C<sprintf> C<%j> format size modifier is now available with pre-C99 compilers + +The actual size used depends on the platform, so remains unportable. + +=head2 Close-on-exec flag set atomically + +When opening a file descriptor, perl now generally opens it with its +close-on-exec flag already set, on platforms that support doing so. +This improves thread safety, because it means that an C<exec> initiated +by one thread can no longer cause a file descriptor in the process +of being opened by another thread to be accidentally passed to the +executed program. + +Additionally, perl now sets the close-on-exec flag more reliably, whether +it does so atomically or not. Most file descriptors were getting the +flag set, but some were being missed. + +=head2 String- and number-specific bitwise ops are no longer experimental + +The new string-specific (C<&. |. ^. ~.>) and number-specific (C<& | ^ ~>) +bitwise operators introduced in Perl 5.22 that are available within the +scope of C<use feature 'bitwise'> are no longer experimental. +Because the number-specific ops are spelled the same way as the existing +operators that choose their behaviour based on their operands, these +operators must still be enabled via the "bitwise" feature, in either of +these two ways: + + use feature "bitwise"; + + use v5.28; # "bitwise" now included + +They are also now enabled by the B<-E> command-line switch. + +The "bitwise" feature no longer emits a warning. Existing code that +disables the "experimental::bitwise" warning category that the feature +previously used will continue to work. + +One caveat that module authors ought to be aware of is that the numeric +operators now pass a fifth TRUE argument to overload methods. Any methods +that check the number of operands may croak if they do not expect so many. +XS authors in particular should be aware that this: + + SV * + bitop_handler (lobj, robj, swap) + +may need to be changed to this: + + SV * + bitop_handler (lobj, robj, swap, ...) + +=head2 Locales are now thread-safe on systems that support them + +These systems include Windows starting with Visual Studio 2005, and in +POSIX 2008 systems. + +The implication is that you are now free to use locales and change them +in a threaded environment. Your changes affect only your thread. +See L<perllocale/Multi-threaded operation> + +=head2 New read-only predefined variable C<${^SAFE_LOCALES}> + +This variable is 1 if the Perl interpreter is operating in an +environment where it is safe to use and change locales (see +L<perllocale>.) This variable is true when the perl is +unthreaded, or compiled in a platform that supports thread-safe locale +operation (see previous item). + +=head1 Security + +=head2 [CVE-2017-12837] Heap buffer overflow in regular expression compiler + +Compiling certain regular expression patterns with the case-insensitive +modifier could cause a heap buffer overflow and crash perl. This has now been +fixed. +L<[perl #131582]|https://rt.perl.org/Public/Bug/Display.html?id=131582> + +=head2 [CVE-2017-12883] Buffer over-read in regular expression parser + +For certain types of syntax error in a regular expression pattern, the error +message could either contain the contents of a random, possibly large, chunk of +memory, or could crash perl. This has now been fixed. +L<[perl #131598]|https://rt.perl.org/Public/Bug/Display.html?id=131598> + +=head2 [CVE-2017-12814] C<$ENV{$key}> stack buffer overflow on Windows + +A possible stack buffer overflow in the C<%ENV> code on Windows has been fixed +by removing the buffer completely since it was superfluous anyway. +L<[perl #131665]|https://rt.perl.org/Public/Bug/Display.html?id=131665> + +=head2 Default Hash Function Change + +Perl 5.28.0 retires various older hash functions which are not viewed as +sufficiently secure for use in Perl. We now support four general purpose +hash functions, Siphash (2-4 and 1-3 variants), and Zaphod32, and StadtX +hash. In addition we support SBOX32 (a form of tabular hashing) for hashing +short strings, in conjunction with any of the other hash functions provided. + +By default Perl is configured to support SBOX hashing of strings up to 24 +characters, in conjunction with StadtX hashing on 64 bit builds, and +Zaphod32 hashing for 32 bit builds. + +You may control these settings with the following options to Configure: + + -DPERL_HASH_FUNC_SIPHASH + -DPERL_HASH_FUNC_SIPHASH13 + -DPERL_HASH_FUNC_STADTX + -DPERL_HASH_FUNC_ZAPHOD32 + +To disable SBOX hashing you can use + + -DPERL_HASH_USE_SBOX32_ALSO=0 + +And to set the maximum length to use SBOX32 hashing on with: + + -DSBOX32_MAX_LEN=16 + +The maximum length allowed is 256. There probably isn't much point +in setting it higher than the default. + +=head1 Incompatible Changes + +=head2 Subroutine attribute and signature order + +The experimental subroutine signatures feature has been changed so that +subroutine attributes must now come before the signature rather than +after. This is because attributes like C<:lvalue> can affect the +compilation of code within the signature, for example: + + sub f :lvalue ($a = do { $x = "abc"; return substr($x,0,1)}) { ...} + +Note that this the second time they have been flipped: + + sub f :lvalue ($a, $b) { ... }; # 5.20; 5.28 onwards + sub f ($a, $b) :lvalue { ... }; # 5.22 - 5.26 + +=head2 Comma-less variable lists in formats are no longer allowed + +Omitting the commas between variables passed to formats is no longer +allowed. This has been deprecated since Perl 5.000. + +=head2 The C<:locked> and C<:unique> attributes have been removed + +These have been no-ops and deprecated since Perl 5.12 and 5.10, +respectively. + +=head2 C<\N{}> with nothing between the braces is now illegal + +This has been deprecated since Perl 5.24. + +=head2 Opening the same symbol as both a file and directory handle is no longer allowed + +Using C<open()> and C<opendir()> to associate both a filehandle and a dirhandle +to the same symbol (glob or scalar) has been deprecated since Perl 5.10. + +=head2 Use of bare C<< << >> to mean C<< <<"" >> is no longer allowed + +Use of a bare terminator has been deprecated since Perl 5.000. + +=head2 Setting $/ to a reference to a non-positive integer no longer allowed + +This used to work like setting it to C<undef>, but has been deprecated +since Perl 5.20. + +=head2 Unicode code points with values exceeding C<IV_MAX> are now fatal + +This was deprecated since Perl 5.24. + +=head2 The C<B::OP::terse> method has been removed + +Use C<B::Concise::b_terse> instead. + +=head2 Use of inherited AUTOLOAD for non-methods is no longer allowed + +This was deprecated in Perl 5.004. + +=head2 Use of strings with code points over 0xFF is not allowed for bitwise string operators + +Code points over C<0xFF> do not make sense for bitwise operators and such +an operation will now croak, except for a few remaining cases. See +L<perldeprecation>. + +This was deprecated in Perl 5.24. + +=head2 Setting C<${^ENCODING}> to a defined value is now illegal + +This has been deprecated since Perl 5.22 and a no-op since Perl 5.26. + +=head2 Backslash no longer escapes colon in PATH for the C<-S> switch + +Previously the C<-S> switch incorrectly treated backslash ("\") as an +escape for colon when traversing the C<PATH> environment variable. +L<[perl #129183]|https://rt.perl.org/Ticket/Display.html?id=129183> + +=head2 the -DH (DEBUG_H) misfeature has been removed + +On a perl built with debugging support, the C<H> flag to the C<-D> +debugging option has been removed. This was supposed to dump hash values, +but has been broken for many years. + +=head2 Yada-yada is now strictly a statement + +By the time of its initial stable release in Perl 5.12, the C<...> +(yada-yada) operator was explicitly intended to serve as a statement, +not an expression. However, the original implementation was confused +on this point, leading to inconsistent parsing. The operator was +accidentally accepted in a few situations where it did not serve as a +complete statement, such as + + ... . "foo"; + ... if $a < $b; + +The parsing has now been made consistent, permitting yada-yada only as +a statement. Affected code can use C<do{...}> to put a yada-yada into +an arbitrary expression context. + +=head2 Sort algorithm can no longer be specified + +Since Perl 5.8, the L<sort> pragma has had subpragmata C<_mergesort>, +C<_quicksort>, and C<_qsort> that can be used to specify which algorithm +perl should use to implement the L<sort|perlfunc/sort> builtin. +This was always considered a dubious feature that might not last, +hence the underscore spellings, and they were documented as not being +portable beyond Perl 5.8. These subpragmata have now been deleted, +and any attempt to use them is an error. The L<sort> pragma otherwise +remains, and the algorithm-neutral C<stable> subpragma can be used to +control sorting behaviour. +L<[perl #119635]|https://rt.perl.org/Ticket/Display.html?id=119635> + +=head2 Over-radix digits in floating point literals + +Octal and binary floating point literals used to permit any hexadecimal +digit to appear after the radix point. The digits are now restricted +to those appropriate for the radix, as digits before the radix point +always were. + +=head2 Return type of C<unpackstring()> + +The return types of the C API functions C<unpackstring()> and +C<unpack_str()> have changed from C<I32> to C<SSize_t>, in order to +accommodate datasets of more than two billion items. + +=head1 Deprecations + +=head2 Use of L<C<vec>|perlfunc/vec EXPR,OFFSET,BITS> on strings with code points above 0xFF is deprecated + +Such strings are represented internally in UTF-8, and C<vec> is a +bit-oriented operation that will likely give unexpected results on those +strings. + +=head2 Some uses of unescaped C<"{"> in regexes are no longer fatal + +Perl 5.26.0 fatalized some uses of an unescaped left brace, but an +exception was made at the last minute, specifically crafted to be a +minimal change to allow GNU Autoconf to work. That tool is heavily +depended upon, and continues to use the deprecated usage. Its use of an +unescaped left brace is one where we have no intention of repurposing +C<"{"> to be something other than itself. + +That exception is now generalized to include various other such cases +where the C<"{"> will not be repurposed. + +Note that these uses continue to raise a deprecation message. + +=head2 Use of unescaped C<"{"> immediately after a C<"("> in regular expression patterns is deprecated + +Using unescaped left braces is officially deprecated everywhere, but it +is not enforced in contexts where their use does not interfere with +expected extensions to the language. A deprecation is added in this +release when the brace appears immediately after an opening parenthesis. +Before this, even if the brace was part of a legal quantifier, it was +not interpreted as such, but as the literal characters, unlike other +quantifiers that follow a C<"("> which are considered errors. Now, +their use will raise a deprecation message, unless turned off. + +=head2 Assignment to C<$[> will be fatal in Perl 5.30 + +Assigning a non-zero value to L<C<$[>|perlvar/$[> has been deprecated +since Perl 5.12, but was never given a deadline for removal. This has +now been scheduled for Perl 5.30. + +=head2 hostname() won't accept arguments in Perl 5.32 + +Passing arguments to C<Sys::Hostname::hostname()> was already deprecated, +but didn't have a removal date. This has now been scheduled for Perl +5.32. L<[perl #124349]|https://rt.perl.org/Ticket/Display.html?id=124349> + +=head2 Module removals + +The following modules will be removed from the core distribution in a +future release, and will at that time need to be installed from CPAN. +Distributions on CPAN which require these modules will need to list them as +prerequisites. + +The core versions of these modules will now issue C<"deprecated">-category +warnings to alert you to this fact. To silence these deprecation warnings, +install the modules in question from CPAN. + +Note that these are (with rare exceptions) fine modules that you are encouraged +to continue to use. Their disinclusion from core primarily hinges on their +necessity to bootstrapping a fully functional, CPAN-capable Perl installation, +not usually on concerns over their design. + +=over + +=item B::Debug + +=item L<Locale::Codes> and its associated Country, Currency and Language modules + +=back + +=head1 Performance Enhancements + +=over 4 + +=item * + +The start up overhead for creating regular expression patterns with +Unicode properties (C<\p{...}>) has been greatly reduced in most cases. + +=item * + +Many string concatenation expressions are now considerably faster, due +to the introduction internally of a C<multiconcat> opcode which combines +multiple concatenations, and optionally a C<=> or C<.=>, into a single +action. For example, apart from retrieving C<$s>, C<$a> and C<$b>, this +whole expression is now handled as a single op: + + $s .= "a=$a b=$b\n" + +As a special case, if the LHS of an assignment is a lexical variable or +C<my $s>, the op itself handles retrieving the lexical variable, which +is faster. + +In general, the more the expression includes a mix of constant strings and +variable expressions, the longer the expression, and the more it mixes +together non-utf8 and utf8 strings, the more marked the performance +improvement. For example on a C<x86_64> system, this code has been +benchmarked running four times faster: + + my $s; + my $a = "ab\x{100}cde"; + my $b = "fghij"; + my $c = "\x{101}klmn"; + + for my $i (1..10_000_000) { + $s = "\x{100}wxyz"; + $s .= "foo=$a bar=$b baz=$c"; + } + +In addition, C<sprintf> expressions which have a constant format +containing only C<%s> and C<%%> format elements, and which have a fixed +number of arguments, are now also optimised into a C<multiconcat> op. + +=item * + +The C<ref()> builtin is now much faster in boolean context, since it no +longer bothers to construct a temporary string like C<Foo=ARRAY(0x134af48)>. + +=item * + +C<keys()> in void and scalar contexts is now more efficient. + +=item * + +The common idiom of comparing the result of index() with -1 is now +specifically optimised, e.g. + + if (index(...) != -1) { ... } + +=item * + +C<for()> loops and similar constructs are now more efficient in most cases. + +=item * + +L<File::Glob> has been modified to remove unnecessary backtracking and +recursion, thanks to Russ Cox. See L<https://research.swtch.com/glob> +for more details. + +=item * + +The XS-level C<SvTRUE()> API function is now more efficient. + +=item * + +Various integer-returning ops are now more efficient in scalar/boolean context. + +=item * + +Slightly improved performance when parsing stash names. +L<[perl #129990]|https://rt.perl.org/Public/Bug/Display.html?id=129990> + +=item * + +Calls to C<require> for an already loaded module are now slightly faster. +L<[perl #132171]|https://rt.perl.org/Public/Bug/Display.html?id=132171> + +=item * + +The performance of pattern matching C<[[:ascii:]]> and C<[[:^ascii:]]> +has been improved significantly except on EBCDIC platforms. + +=item * + +Various optimizations have been applied to matching regular expression +patterns, so under the right circumstances, significant performance +gains may be noticed. But in an application with many varied patterns, +little overall improvement likely will be seen. + +=item * + +Other optimizations have been applied to UTF-8 handling, but these are +not typically a major factor in most applications. + +=back + +=head1 Modules and Pragmata + +Key highlights in this release across several modules: + +=head2 Removal of use vars + +The usage of C<use vars> has been discouraged since the introduction of +C<our> in Perl 5.6.0. Where possible the usage of this pragma has now been +removed from the Perl source code. + +This had a slight effect (for the better) on the output of WARNING_BITS in +L<B::Deparse>. + +=head2 Use of DynaLoader changed to XSLoader in many modules + +XSLoader is more modern, and most modules already require perl 5.6 or +greater, so no functionality is lost by switching. In some cases, we have +also made changes to the local implementation that may not be reflected in +the version on CPAN due to a desire to maintain more backwards +compatibility. + +=head2 Updated Modules and Pragmata + +=over 4 + +=item * + +L<Archive::Tar> has been upgraded from version 2.24 to 2.30. + +This update also handled CVE-2018-12015: directory traversal +vulnerability. +L<[cpan #125523]|https://rt.cpan.org/Ticket/Display.html?id=125523> + +=item * + +L<arybase> has been upgraded from version 0.12 to 0.15. + +=item * + +L<Attribute::Handlers> has been upgraded from version 0.99 to 1.01. + +=item * + +L<attributes> has been upgraded from version 0.29 to 0.33. + +=item * + +L<B> has been upgraded from version 1.68 to 1.74. + +=item * + +L<B::Concise> has been upgraded from version 0.999 to 1.003. + +=item * + +L<B::Debug> has been upgraded from version 1.24 to 1.26. + +NOTE: L<B::Debug> is deprecated and may be removed from a future version +of Perl. + +=item * + +L<B::Deparse> has been upgraded from version 1.40 to 1.48. + +It includes many bug fixes, and in particular, it now deparses variable +attributes correctly: + + my $x :foo; # used to deparse as + # 'attributes'->import('main', \$x, 'foo'), my $x; + +=item * + +L<base> has been upgraded from version 2.25 to 2.27. + +=item * + +L<bignum> has been upgraded from version 0.47 to 0.49. + +=item * + +L<blib> has been upgraded from version 1.06 to 1.07. + +=item * + +L<bytes> has been upgraded from version 1.05 to 1.06. + +=item * + +L<Carp> has been upgraded from version 1.42 to 1.50. + +If a package on the call stack contains a constant named C<ISA>, Carp no +longer throws a "Not a GLOB reference" error. + +L<Carp>, when generating stack traces, now attempts to work around +longstanding bugs resulting from Perl's non-reference-counted stack. +L<[perl #52610]|https://rt.perl.org/Ticket/Display.html?id=52610> + +Carp has been modified to avoid assuming that objects cannot be +overloaded without the L<overload> module loaded (this can happen with +objects created by XS modules). Previously, infinite recursion would +result if an XS-defined overload method itself called Carp. +L<[perl #132828]|https://rt.perl.org/Ticket/Display.html?id=132828> + +Carp now avoids using C<overload::StrVal>, partly because older versions +of L<overload> (included with perl 5.14 and earlier) load L<Scalar::Util> +at run time, which will fail if Carp has been invoked after a syntax error. + +=item * + +L<charnames> has been upgraded from version 1.44 to 1.45. + +=item * + +L<Compress::Raw::Zlib> has been upgraded from version 2.074 to 2.076. + +This addresses a security vulnerability in older versions of the 'zlib' library +(which is bundled with Compress-Raw-Zlib). + +=item * + +L<Config::Extensions> has been upgraded from version 0.01 to 0.02. + +=item * + +L<Config::Perl::V> has been upgraded from version 0.28 to 0.29. + +=item * + +L<CPAN> has been upgraded from version 2.18 to 2.20. + +=item * + +L<Data::Dumper> has been upgraded from version 2.167 to 2.170. + +Quoting of glob names now obeys the Useqq option +L<[perl #119831]|https://rt.perl.org/Ticket/Display.html?id=119831>. + +Attempts to set an option to C<undef> through a combined getter/setter +method are no longer mistaken for getter calls +L<[perl #113090]|https://rt.perl.org/Ticket/Display.html?id=113090>. + +=item * + +L<Devel::Peek> has been upgraded from version 1.26 to 1.27. + +=item * + +L<Devel::PPPort> has been upgraded from version 3.35 to 3.40. + +L<Devel::PPPort> has moved from cpan-first to perl-first maintenance + +Primary responsibility for the code in Devel::PPPort has moved into core perl. +In a practical sense there should be no change except that hopefully it will +stay more up to date with changes made to symbols in perl, rather than needing +to be updated after the fact. + +=item * + +L<Digest::SHA> has been upgraded from version 5.96 to 6.01. + +=item * + +L<DirHandle> has been upgraded from version 1.04 to 1.05. + +=item * + +L<DynaLoader> has been upgraded from version 1.42 to 1.45. + +Its documentation now shows the use of C<__PACKAGE__> and direct object +syntax +L<[perl #132247]|https://rt.perl.org/Ticket/Display.html?id=132247>. + +=item * + +L<Encode> has been upgraded from version 2.88 to 2.97. + +=item * + +L<encoding> has been upgraded from version 2.19 to 2.22. + +=item * + +L<Errno> has been upgraded from version 1.28 to 1.29. + +=item * + +L<experimental> has been upgraded from version 0.016 to 0.019. + +=item * + +L<Exporter> has been upgraded from version 5.72 to 5.73. + +=item * + +L<ExtUtils::CBuilder> has been upgraded from version 0.280225 to 0.280230. + +=item * + +L<ExtUtils::Constant> has been upgraded from version 0.23 to 0.25. + +=item * + +L<ExtUtils::Embed> has been upgraded from version 1.34 to 1.35. + +=item * + +L<ExtUtils::Install> has been upgraded from version 2.04 to 2.14. + +=item * + +L<ExtUtils::MakeMaker> has been upgraded from version 7.24 to 7.34. + +=item * + +L<ExtUtils::Miniperl> has been upgraded from version 1.06 to 1.08. + +=item * + +L<ExtUtils::ParseXS> has been upgraded from version 3.34 to 3.39. + +=item * + +L<ExtUtils::Typemaps> has been upgraded from version 3.34 to 3.38. + +=item * + +L<ExtUtils::XSSymSet> has been upgraded from version 1.3 to 1.4. + +=item * + +L<feature> has been upgraded from version 1.47 to 1.52. + +=item * + +L<fields> has been upgraded from version 2.23 to 2.24. + +=item * + +L<File::Copy> has been upgraded from version 2.32 to 2.33. + +It will now use the sub-second precision variant of utime() supplied by +L<Time::HiRes> where available. +L<[perl #132401]|https://rt.perl.org/Ticket/Display.html?id=132401>. + +=item * + +L<File::Fetch> has been upgraded from version 0.52 to 0.56. + +=item * + +L<File::Glob> has been upgraded from version 1.28 to 1.31. + +=item * + +L<File::Path> has been upgraded from version 2.12_01 to 2.15. + +=item * + +L<File::Spec> and L<Cwd> have been upgraded from version 3.67 to 3.74. + +=item * + +L<File::stat> has been upgraded from version 1.07 to 1.08. + +=item * + +L<FileCache> has been upgraded from version 1.09 to 1.10. + +=item * + +L<Filter::Simple> has been upgraded from version 0.93 to 0.95. + +=item * + +L<Filter::Util::Call> has been upgraded from version 1.55 to 1.58. + +=item * + +L<GDBM_File> has been upgraded from version 1.15 to 1.17. + +Its documentation now explains that C<each> and C<delete> don't mix in +hashes tied to this module +L<[perl #117449]|https://rt.perl.org/Ticket/Display.html?id=117449>. + +It will now retry opening with an acceptable block size if asking gdbm +to default the block size failed +L<[perl #119623]|https://rt.perl.org/Ticket/Display.html?id=119623>. + +=item * + +L<Getopt::Long> has been upgraded from version 2.49 to 2.5. + +=item * + +L<Hash::Util::FieldHash> has been upgraded from version 1.19 to 1.20. + +=item * + +L<I18N::Langinfo> has been upgraded from version 0.13 to 0.17. + +This module is now available on all platforms, emulating the system +L<nl_langinfo(3)> on systems that lack it. Some caveats apply, as +L<detailed in its documentation|I18N::Langinfo>, the most severe being +that, except for MS Windows, the C<CODESET> item is not implemented on +those systems, always returning C<"">. + +It now sets the UTF-8 flag in its returned scalar if the string contains +legal non-ASCII UTF-8, and the locale is UTF-8 +L<[perl #127288]|https://rt.perl.org/Ticket/Display.html?id=127288>. + +This update also fixes a bug in which the underlying locale was ignored +for the C<RADIXCHAR> (always was returned as a dot) and the C<THOUSEP> +(always empty). Now the locale-appropriate values are returned. + +=item * + +L<I18N::LangTags> has been upgraded from version 0.42 to 0.43. + +=item * + +L<if> has been upgraded from version 0.0606 to 0.0608. + +=item * + +L<IO> has been upgraded from version 1.38 to 1.39. + +=item * + +L<IO::Socket::IP> has been upgraded from version 0.38 to 0.39. + +=item * + +L<IPC::Cmd> has been upgraded from version 0.96 to 1.00. + +=item * + +L<JSON::PP> has been upgraded from version 2.27400_02 to 2.97001. + +=item * + +The C<libnet> distribution has been upgraded from version 3.10 to 3.11. + +=item * + +L<List::Util> has been upgraded from version 1.46_02 to 1.49. + +=item * + +L<Locale::Codes> has been upgraded from version 3.42 to 3.56. + +B<NOTE>: L<Locale::Codes> scheduled to be removed from core in Perl 5.30. + +=item * + +L<Locale::Maketext> has been upgraded from version 1.28 to 1.29. + +=item * + +L<Math::BigInt> has been upgraded from version 1.999806 to 1.999811. + +=item * + +L<Math::BigInt::FastCalc> has been upgraded from version 0.5005 to 0.5006. + +=item * + +L<Math::BigRat> has been upgraded from version 0.2611 to 0.2613. + +=item * + +L<Module::CoreList> has been upgraded from version 5.20170530 to 5.20180622. + +=item * + +L<mro> has been upgraded from version 1.20 to 1.22. + +=item * + +L<Net::Ping> has been upgraded from version 2.55 to 2.62. + +=item * + +L<NEXT> has been upgraded from version 0.67 to 0.67_01. + +=item * + +L<ODBM_File> has been upgraded from version 1.14 to 1.15. + +=item * + +L<Opcode> has been upgraded from version 1.39 to 1.43. + +=item * + +L<overload> has been upgraded from version 1.28 to 1.30. + +=item * + +L<PerlIO::encoding> has been upgraded from version 0.25 to 0.26. + +=item * + +L<PerlIO::scalar> has been upgraded from version 0.26 to 0.29. + +=item * + +L<PerlIO::via> has been upgraded from version 0.16 to 0.17. + +=item * + +L<Pod::Functions> has been upgraded from version 1.11 to 1.13. + +=item * + +L<Pod::Html> has been upgraded from version 1.2202 to 1.24. + +A title for the HTML document will now be automatically generated by +default from a "NAME" section in the POD document, as it used to be +before the module was rewritten to use L<Pod::Simple::XHTML> to do the +core of its job +L<[perl #110520]|https://rt.perl.org/Ticket/Display.html?id=110520>. + +=item * + +L<Pod::Perldoc> has been upgraded from version 3.28 to 3.2801. + +=item * + +The C<podlators> distribution has been upgraded from version 4.09 to 4.10. + +Man page references and function names now follow the Linux man page +formatting standards, instead of the Solaris standard. + +=item * + +L<POSIX> has been upgraded from version 1.76 to 1.84. + +Some more cautions were added about using locale-specific functions in +threaded applications. + +=item * + +L<re> has been upgraded from version 0.34 to 0.36. + +=item * + +L<Scalar::Util> has been upgraded from version 1.46_02 to 1.50. + +=item * + +L<SelfLoader> has been upgraded from version 1.23 to 1.25. + +=item * + +L<Socket> has been upgraded from version 2.020_03 to 2.027. + +=item * + +L<sort> has been upgraded from version 2.02 to 2.04. + +=item * + +L<Storable> has been upgraded from version 2.62 to 3.08. + +=item * + +L<Sub::Util> has been upgraded from version 1.48 to 1.49. + +=item * + +L<subs> has been upgraded from version 1.02 to 1.03. + +=item * + +L<Sys::Hostname> has been upgraded from version 1.20 to 1.22. + +=item * + +L<Term::ReadLine> has been upgraded from version 1.16 to 1.17. + +=item * + +L<Test> has been upgraded from version 1.30 to 1.31. + +=item * + +L<Test::Harness> has been upgraded from version 3.38 to 3.42. + +=item * + +L<Test::Simple> has been upgraded from version 1.302073 to 1.302133. + +=item * + +L<threads> has been upgraded from version 2.15 to 2.22. + +The documentation now better describes the problems that arise when +returning values from threads, and no longer warns about creating threads +in C<BEGIN> blocks. +L<[perl #96538]|https://rt.perl.org/Ticket/Display.html?id=96538> + +=item * + +L<threads::shared> has been upgraded from version 1.56 to 1.58. + +=item * + +L<Tie::Array> has been upgraded from version 1.06 to 1.07. + +=item * + +L<Tie::StdHandle> has been upgraded from version 4.4 to 4.5. + +=item * + +L<Time::gmtime> has been upgraded from version 1.03 to 1.04. + +=item * + +L<Time::HiRes> has been upgraded from version 1.9741 to 1.9759. + +=item * + +L<Time::localtime> has been upgraded from version 1.02 to 1.03. + +=item * + +L<Time::Piece> has been upgraded from version 1.31 to 1.3204. + +=item * + +L<Unicode::Collate> has been upgraded from version 1.19 to 1.25. + +=item * + +L<Unicode::Normalize> has been upgraded from version 1.25 to 1.26. + +=item * + +L<Unicode::UCD> has been upgraded from version 0.68 to 0.70. + +The function C<num> now accepts an optional parameter to help in +diagnosing error returns. + +=item * + +L<User::grent> has been upgraded from version 1.01 to 1.02. + +=item * + +L<User::pwent> has been upgraded from version 1.00 to 1.01. + +=item * + +L<utf8> has been upgraded from version 1.19 to 1.21. + +=item * + +L<vars> has been upgraded from version 1.03 to 1.04. + +=item * + +L<version> has been upgraded from version 0.9917 to 0.9923. + +=item * + +L<VMS::DCLsym> has been upgraded from version 1.08 to 1.09. + +=item * + +L<VMS::Stdio> has been upgraded from version 2.41 to 2.44. + +=item * + +L<warnings> has been upgraded from version 1.37 to 1.42. + +It now includes new functions with names ending in C<_at_level>, allowing +callers to specify the exact call frame. +L<[perl #132468]|https://rt.perl.org/Ticket/Display.html?id=132468> + +=item * + +L<XS::Typemap> has been upgraded from version 0.15 to 0.16. + +=item * + +L<XSLoader> has been upgraded from version 0.27 to 0.30. + +Its documentation now shows the use of C<__PACKAGE__>, and direct object +syntax for example C<DynaLoader> usage +L<[perl #132247]|https://rt.perl.org/Ticket/Display.html?id=132247>. + +Platforms that use C<mod2fname> to edit the names of loadable +libraries now look for bootstrap (.bs) files under the correct, +non-edited name. + +=back + +=head2 Removed Modules and Pragmata + +=over 4 + +=item * + +The C<VMS::stdio> compatibility shim has been removed. + +=back + +=head1 Documentation + +=head2 Changes to Existing Documentation + +We have attempted to update the documentation to reflect the changes +listed in this document. If you find any we have missed, send email +to L<perlbug@perl.org|mailto:perlbug@perl.org>. + +Additionally, the following selected changes have been made: + +=head3 L<perlapi> + +=over 4 + +=item * + +The API functions C<perl_parse()>, C<perl_run()>, and C<perl_destruct()> +are now documented comprehensively, where previously the only +documentation was a reference to the L<perlembed> tutorial. + +=item * + +The documentation of C<newGIVENOP()> has been belatedly updated to +account for the removal of lexical C<$_>. + +=item * + +The API functions C<newCONSTSUB()> and C<newCONSTSUB_flags()> are +documented much more comprehensively than before. + +=back + +=head3 L<perldata> + +=over 4 + +=item * + +The section "Truth and Falsehood" in L<perlsyn> has been moved into +L<perldata>. + +=back + +=head3 L<perldebguts> + +=over 4 + +=item * + +The description of the conditions under which C<DB::sub()> will be called +has been clarified. +L<[perl #131672]|https://rt.perl.org/Ticket/Display.html?id=131672> + +=back + +=head3 L<perldiag> + +=over 4 + +=item * L<perldiag/Variable length lookbehind not implemented in regex mE<sol>%sE<sol>> + +This now gives more ideas as to workarounds to the issue that was +introduced in Perl 5.18 (but not documented explicitly in its perldelta) +for the fact that some Unicode C</i> rules cause a few sequences such as + + (?<!st) + +to be considered variable length, and hence disallowed. + +=item * "Use of state $_ is experimental" in L<perldiag> + +This entry has been removed, as the experimental support of this construct was +removed in perl 5.24.0. + +=item * + +The diagnostic C<Initialization of state variables in list context +currently forbidden> has changed to C<Initialization of state variables +in list currently forbidden>, because list-context initialization of +single aggregate state variables is now permitted. + +=back + +=head3 L<perlembed> + +=over 4 + +=item * + +The examples in L<perlembed> have been made more portable in the way +they exit, and the example that gets an exit code from the embedded Perl +interpreter now gets it from the right place. The examples that pass +a constructed argv to Perl now show the mandatory null C<argv[argc]>. + +=item * + +An example in L<perlembed> used the string value of C<ERRSV> as a +format string when calling croak(). If that string contains format +codes such as C<%s> this could crash the program. + +This has been changed to a call to croak_sv(). + +An alternative could have been to supply a trivial format string: + + croak("%s", SvPV_nolen(ERRSV)); + +or as a special case for C<ERRSV> simply: + + croak(NULL); + +=back + +=head3 L<perlfunc> + +=over 4 + +=item * + +There is now a note that warnings generated by built-in functions are +documented in L<perldiag> and L<warnings>. +L<[perl #116080]|https://rt.perl.org/Ticket/Display.html?id=116080> + +=item * + +The documentation for the C<exists> operator no longer says that +autovivification behaviour "may be fixed in a future release". +We've determined that we're not going to change the default behaviour. +L<[perl #127712]|https://rt.perl.org/Ticket/Display.html?id=127712> + +=item * + +A couple of small details in the documentation for the C<bless> operator +have been clarified. +L<[perl #124428]|https://rt.perl.org/Ticket/Display.html?id=124428> + +=item * + +The description of C<@INC> hooks in the documentation for C<require> +has been corrected to say that filter subroutines receive a useless +first argument. +L<[perl #115754]|https://rt.perl.org/Ticket/Display.html?id=115754> + +=item * + +The documentation of C<ref> has been rewritten for clarity. + +=item * + +The documentation of C<use> now explains what syntactically qualifies +as a version number for its module version checking feature. + +=item * + +The documentation of C<warn> has been updated to reflect that since Perl +5.14 it has treated complex exception objects in a manner equivalent +to C<die>. +L<[perl #121372]|https://rt.perl.org/Ticket/Display.html?id=121372> + +=item * + +The documentation of C<die> and C<warn> has been revised for clarity. + +=item * + +The documentation of C<each> has been improved, with a slightly more +explicit description of the sharing of iterator state, and with +caveats regarding the fragility of while-each loops. +L<[perl #132644]|https://rt.perl.org/Ticket/Display.html?id=132644> + +=item * + +Clarification to C<require> was added to explain the differences between + + require Foo::Bar; + require "Foo/Bar.pm"; + +=back + +=head3 L<perlgit> + +=over 4 + +=item * + +The precise rules for identifying C<smoke-me> branches are now stated. + +=back + +=head3 L<perlguts> + +=over 4 + +=item * + +The section on reference counting in L<perlguts> has been heavily revised, +to describe references in the way a programmer needs to think about them +rather than in terms of the physical data structures. + +=item * + +Improve documentation related to UTF-8 multibytes. + +=back + +=head3 L<perlintern> + +=over 4 + +=item * + +The internal functions C<newXS_len_flags()> and C<newATTRSUB_x()> are +now documented. + +=back + +=head3 L<perlobj> + +=over 4 + +=item * + +The documentation about C<DESTROY> methods has been corrected, updated, +and revised, especially in regard to how they interact with exceptions. +L<[perl #122753]|https://rt.perl.org/Ticket/Display.html?id=122753> + +=back + +=head3 L<perlop> + +=over 4 + +=item * + +The description of the C<x> operator in L<perlop> has been clarified. +L<[perl #132460]|https://rt.perl.org/Ticket/Display.html?id=132460> + +=item * + +L<perlop> has been updated to note that C<qw>'s whitespace rules differ +from that of C<split>'s in that only ASCII whitespace is used. + +=item * + +The general explanation of operator precedence and associativity has +been corrected and clarified. +L<[perl #127391]|https://rt.perl.org/Ticket/Display.html?id=127391> + +=item * + +The documentation for the C<\> referencing operator now explains the +unusual context that it supplies to its operand. +L<[perl #131061]|https://rt.perl.org/Ticket/Display.html?id=131061> + +=back + +=head3 L<perlrequick> + +=over 4 + +=item * + +Clarifications on metacharacters and character classes + +=back + +=head3 L<perlretut> + +=over 4 + +=item * + +Clarify metacharacters. + +=back + +=head3 L<perlrun> + +=over 4 + +=item * + +Clarify the differences between B<< -M >> and B<< -m >>. +L<[perl #131518]|https://rt.perl.org/Ticket/Display.html?id=131518> + +=back + +=head3 L<perlsec> + +=over 4 + +=item * + +The documentation about set-id scripts has been updated and revised. +L<[perl #74142]|https://rt.perl.org/Ticket/Display.html?id=74142> + +=item * + +A section about using C<sudo> to run Perl scripts has been added. + +=back + +=head3 L<perlsyn> + +=over 4 + +=item * + +The section "Truth and Falsehood" in L<perlsyn> has been removed from +that document, where it didn't belong, and merged into the existing +paragraph on the same topic in L<perldata>. + +=item * + +The means to disambiguate between code blocks and hash constructors, +already documented in L<perlref>, are now documented in L<perlsyn> too. +L<[perl #130958]|https://rt.perl.org/Ticket/Display.html?id=130958> + +=back + +=head3 L<perluniprops> + +=over 4 + +=item * + +L<perluniprops> has been updated to note that C<\p{Word}> now includes +code points matching the C<\p{Join_Control}> property. The change to +the property was made in Perl 5.18, but not documented until now. There +are currently only two code points that match this property U+200C (ZERO +WIDTH NON-JOINER) and U+200D (ZERO WIDTH JOINER). + +=item * + +For each binary table or property, the documentation now includes which +characters in the range C<\x00-\xFF> it matches, as well as a list of +the first few ranges of code points matched above that. + +=back + +=head3 L<perlvar> + +=over 4 + +=item * + +The entry for C<$+> in perlvar has been expanded upon to describe handling of +multiply-named capturing groups. + +=back + +=head3 L<perlfunc>, L<perlop>, L<perlsyn> + +=over 4 + +=item * + +In various places, improve the documentation of the special cases +in the condition expression of a while loop, such as implicit C<defined> +and assignment to C<$_>. +L<[perl #132644]|https://rt.perl.org/Ticket/Display.html?id=132644> + +=back + +=head1 Diagnostics + +The following additions or changes have been made to diagnostic output, +including warnings and fatal error messages. For the complete list of +diagnostic messages, see L<perldiag>. + +=head2 New Diagnostics + +=head3 New Errors + +=over 4 + +=item * + +L<Can't "goto" into a "given" block|perldiag/"Can't E<quot>gotoE<quot> into a E<quot>givenE<quot> block"> + +(F) A "goto" statement was executed to jump into the middle of a C<given> +block. You can't get there from here. See L<perlfunc/goto>. + +=item * + +L<Can't "goto" into a binary or list expression|perldiag/"Can't E<quot>gotoE<quot> into a binary or list expression"> + +Use of C<goto> to jump into the parameter of a binary or list operator has +been prohibited, to prevent crashes and stack corruption. +L<[perl #130936]|https://rt.perl.org/Ticket/Display.html?id=130936> + +You may only enter the I<first> argument of an operator that takes a fixed +number of arguments, since this is a case that will not cause stack +corruption. +L<[perl #132854]|https://rt.perl.org/Ticket/Display.html?id=132854> + +=back + +=head3 New Warnings + +=over 4 + +=item * + +L<Old package separator used in string|perldiag/"Old package separator used in string"> + +(W syntax) You used the old package separator, "'", in a variable +named inside a double-quoted string; e.g., C<"In $name's house">. This +is equivalent to C<"In $name::s house">. If you meant the former, put +a backslash before the apostrophe (C<"In $name\'s house">). + +=item * + +L<perldiag/Locale '%s' contains (at least) the following characters which +have unexpected meanings: %s The Perl program will use the expected +meanings> + +=back + +=head2 Changes to Existing Diagnostics + +=over 4 + +=item * + +A false-positive warning that was issued when using a +numerically-quantified sub-pattern in a recursive regex has been +silenced. L<[perl #131868]|https://rt.perl.org/Public/Bug/Display.html?id=131868> + +=item * + +The warning about useless use of a concatenation operator in void context +is now generated for expressions with multiple concatenations, such as +C<$a.$b.$c>, which used to mistakenly not warn. +L<[perl #6997]|https://rt.perl.org/Ticket/Display.html?id=6997> + +=item * + +Warnings that a variable or subroutine "masks earlier declaration in same +...", or that an C<our> variable has been redeclared, have been moved to a +new warnings category "shadow". Previously they were in category "misc". + +=item * + +The deprecation warning from C<Sys::Hostname::hostname()> saying that +it doesn't accept arguments now states the Perl version in which the +warning will be upgraded to an error. +L<[perl #124349]|https://rt.perl.org/Ticket/Display.html?id=124349> + +=item * + +The L<perldiag> entry for the error regarding a set-id script has been +expanded to make clear that the error is reporting a specific security +vulnerability, and to advise how to fix it. + +=item * + +The C<< Unable to flush stdout >> error message was missing a trailing +newline. [debian #875361] + +=back + +=head1 Utility Changes + +=head2 L<perlbug> + +=over 4 + +=item * + +C<--help> and C<--version> options have been added. + +=back + +=head1 Configuration and Compilation + +=over 4 + +=item * C89 requirement + +Perl has been documented as requiring a C89 compiler to build since October +1998. A variety of simplifications have now been made to Perl's internals to +rely on the features specified by the C89 standard. We believe that this +internal change hasn't altered the set of platforms that Perl builds on, but +please report a bug if Perl now has new problems building on your platform. + +=item * + +On GCC, C<-Werror=pointer-arith> is now enabled by default, +disallowing arithmetic on void and function pointers. + +=item * + +Where an HTML version of the documentation is installed, the HTML +documents now use relative links to refer to each other. Links from +the index page of L<perlipc> to the individual section documents are +now correct. +L<[perl #110056]|https://rt.perl.org/Ticket/Display.html?id=110056> + +=item * + +F<lib/unicore/mktables> now correctly canonicalizes the names of the +dependencies stored in the files it generates. + +F<regen/mk_invlists.pl>, unlike the other F<regen/*.pl> scripts, used +C<$0> to name itself in the dependencies stored in the files it +generates. It now uses a literal so that the path stored in the +generated files doesn't depend on how F<regen/mk_invlists.pl> is +invoked. + +This lack of canonical names could cause test failures in F<t/porting/regen.t>. +L<[perl #132925]|https://rt.perl.org/Ticket/Display.html?id=132925> + +=item * New probes + +=over 2 + +=item HAS_BUILTIN_ADD_OVERFLOW + +=item HAS_BUILTIN_MUL_OVERFLOW + +=item HAS_BUILTIN_SUB_OVERFLOW + +=item HAS_THREAD_SAFE_NL_LANGINFO_L + +=item HAS_LOCALECONV_L + +=item HAS_MBRLEN + +=item HAS_MBRTOWC + +=item HAS_MEMRCHR + +=item HAS_NANOSLEEP + +=item HAS_STRNLEN + +=item HAS_STRTOLD_L + +=item I_WCHAR + +=back + +=back + +=head1 Testing + +=over 4 + +=item * + +Testing of the XS-APItest directory is now done in parallel, where +applicable. + +=item * + +Perl now includes a default F<.travis.yml> file for Travis CI testing +on github mirrors. +L<[perl #123981]|https://rt.perl.org/Ticket/Display.html?id=123981> + +=item * + +The watchdog timer count in F<re/pat_psycho.t> can now be overridden. + +This test can take a long time to run, so there is a timer to keep +this in check (currently, 5 minutes). This commit adds checking +the environment variable C<< PERL_TEST_TIME_OUT_FACTOR >>; if set, +the time out setting is multiplied by its value. + +=item * + +F<harness> no longer waits for 30 seconds when running F<t/io/openpid.t>. +L<[perl #121028]|https://rt.perl.org/Ticket/Display.html?id=121028> +L<[perl #132867]|https://rt.perl.org/Ticket/Display.html?id=132867> + +=back + +=head1 Packaging + +For the past few years we have released perl using three different archive +formats: bzip (C<.bz2>), LZMA2 (C<.xz>) and gzip (C<.gz>). Since xz compresses +better and decompresses faster, and gzip is more compatible and uses less +memory, we have dropped the C<.bz2> archive format with this release. +(If this poses a problem, do let us know; see L</Reporting Bugs>, below.) + +=head1 Platform Support + +=head2 Discontinued Platforms + +=over 4 + +=item PowerUX / Power MAX OS + +Compiler hints and other support for these apparently long-defunct +platforms has been removed. + +=back + +=head2 Platform-Specific Notes + +=over 4 + +=item CentOS + +Compilation on CentOS 5 is now fixed. + +=item Cygwin + +A build with the quadmath library can now be done on Cygwin. + +=item Darwin + +Perl now correctly uses reentrant functions, like C<asctime_r>, on +versions of Darwin that have support for them. + +=item FreeBSD + +FreeBSD's F<< /usr/share/mk/sys.mk >> specifies C<< -O2 >> for +architectures other than ARM and MIPS. By default, perl is now compiled +with the same optimization levels. + +=item VMS + +Several fix-ups for F<configure.com>, marking function VMS has +(or doesn't have). + +CRTL features can now be set by embedders before invoking Perl by using +the C<decc$feature_set> and C<decc$feature_set_value> functions. +Previously any attempt to set features after image initialization were +ignored. + +=item Windows + +=over 4 + +=item * + +Support for compiling perl on Windows using Microsoft Visual Studio 2017 +(containing Visual C++ 14.1) has been added. + +=item * + +Visual C++ compiler version detection has been improved to work on non-English +language systems. + +=item * + +We now set C<$Config{libpth}> correctly for 64-bit builds using Visual C++ +versions earlier than 14.1. + +=back + +=back + +=head1 Internal Changes + +=over 4 + +=item * + +A new optimisation phase has been added to the compiler, +C<optimize_optree()>, which does a top-down scan of a complete optree +just before the peephole optimiser is run. This phase is not currently +hookable. + +=item * + +An C<OP_MULTICONCAT> op has been added. At C<optimize_optree()> time, a +chain of C<OP_CONCAT> and C<OP_CONST> ops, together optionally with an +C<OP_STRINGIFY> and/or C<OP_SASSIGN>, are combined into a single +C<OP_MULTICONCAT> op. The op is of type C<UNOP_AUX>, and the aux array +contains the argument count, plus a pointer to a constant string and a set +of segment lengths. For example with + + my $x = "foo=$foo, bar=$bar\n"; + +the constant string would be C<"foo=, bar=\n"> and the segment lengths +would be (4,6,1). If the string contains characters such as C<\x80>, whose +representation changes under utf8, two sets of strings plus lengths are +precomputed and stored. + +=item * + +Direct access to L<C<PL_keyword_plugin>|perlapi/PL_keyword_plugin> is not +safe in the presence of multithreading. A new +L<C<wrap_keyword_plugin>|perlapi/wrap_keyword_plugin> function has been +added to allow XS modules to safely define custom keywords even when +loaded from a thread, analogous to L<C<PL_check>|perlapi/PL_check> / +L<C<wrap_op_checker>|perlapi/wrap_op_checker>. + +=item * + +The C<PL_statbuf> interpreter variable has been removed. + +=item * + +The deprecated function C<to_utf8_case()>, accessible from XS code, has +been removed. + +=item * + +A new function +L<C<is_utf8_invariant_string_loc()>|perlapi/is_utf8_invariant_string_loc> +has been added that is like +L<C<is_utf8_invariant_string()>|perlapi/is_utf8_invariant_string> +but takes an extra pointer parameter into which is stored the location +of the first variant character, if any are found. + +=item * + +A new function, L<C<Perl_langinfo()>|perlapi/Perl_langinfo> has been +added. It is an (almost) drop-in replacement for the system +C<nl_langinfo(3)>, but works on platforms that lack that; as well as +being more thread-safe, and hiding some gotchas with locale handling +from the caller. Code that uses this, needn't use L<C<localeconv(3)>> +(and be affected by the gotchas) to find the decimal point, thousands +separator, or currency symbol. See L<perlapi/Perl_langinfo>. + +=item * + +A new API function L<C<sv_rvunweaken()>|perlapi/sv_rvunweaken> has +been added to complement L<C<sv_rvweaken()>|perlapi/sv_rvweaken>. +The implementation was taken from L<Scalar::Util/unweaken>. + +=item * + +A new flag, C<SORTf_UNSTABLE>, has been added. This will allow a +future commit to make mergesort unstable when the user specifies ‘no +sort stable’, since it has been decided that mergesort should remain +stable by default. + +=item * + +XS modules can now automatically get reentrant versions of system +functions on threaded perls. + +By adding + + #define PERL_REENTRANT + +near the beginning of an C<XS> file, it will be compiled so that +whatever reentrant functions perl knows about on that system will +automatically and invisibly be used instead of the plain, non-reentrant +versions. For example, if you write C<getpwnam()> in your code, on a +system that has C<getpwnam_r()> all calls to the former will be translated +invisibly into the latter. This does not happen except on threaded +perls, as they aren't needed otherwise. Be aware that which functions +have reentrant versions varies from system to system. + +=item * + +The C<PERL_NO_OP_PARENT> build define is no longer supported, which means +that perl is now always built with C<PERL_OP_PARENT> enabled. + +=item * + +The format and content of the non-utf8 transliteration table attached to +the C<op_pv> field of C<OP_TRANS>/C<OP_TRANSR> ops has changed. It's now a +C<struct OPtrans_map>. + +=item * + +A new compiler C<#define>, C<dTHX_DEBUGGING>. has been added. This is +useful for XS or C code that only need the thread context because their +debugging statements that get compiled only under C<-DDEBUGGING> need +one. + +=item * + +A new API function L<perlapi/Perl_setlocale> has been added. + +=item * + +L<perlapi/sync_locale> has been revised to return a boolean as to +whether the system was using the global locale or not. + +=item * + +A new kind of magic scalar, called a "nonelem" scalar, has been introduced. +It is stored in an array to denote a non-existent element, whenever such an +element is accessed in a potential lvalue context. It replaces the +existing "defelem" (deferred element) magic wherever this is possible, +being significantly more efficient. This means that +C<some_sub($sparse_array[$nonelem])> no longer has to create a new magic +defelem scalar each time, as long as the element is within the array. + +It partially fixes the rare bug of deferred elements getting out of synch +with their arrays when the array is shifted or unshifted. +L<[perl #132729]|https://rt.perl.org/Ticket/Display.html?id=132729> + +=back + +=head1 Selected Bug Fixes + +=over 4 + +=item * + +List assignment (C<aassign>) could in some rare cases allocate an +entry on the mortals stack and leave the entry uninitialized, leading to +possible crashes. +L<[perl #131570]|https://rt.perl.org/Ticket/Display.html?id=131570> + +=item * + +Attempting to apply an attribute to an C<our> variable where a +function of that name already exists could result in a NULL pointer +being supplied where an SV was expected, crashing perl. +L<[perl #131597]|https://rt.perl.org/Ticket/Display.html?id=131597> + +=item * + +C<split ' '> now correctly handles the argument being split when in the +scope of the L<< C<unicode_strings>|feature/"The 'unicode_strings' feature" +>> feature. Previously, when a string using the single-byte internal +representation contained characters that are whitespace by Unicode rules but +not by ASCII rules, it treated those characters as part of fields rather +than as field separators. +L<[perl #130907]|https://rt.perl.org/Ticket/Display.html?id=130907> + +=item * + +Several built-in functions previously had bugs that could cause them to +write to the internal stack without allocating room for the item being +written. In rare situations, this could have led to a crash. These bugs have +now been fixed, and if any similar bugs are introduced in future, they will +be detected automatically in debugging builds. + +These internal stack usage checks introduced are also done +by the C<entersub> operator when calling XSUBs. This means we can +report which XSUB failed to allocate enough stack space. +L<[perl #131975]|https://rt.perl.org/Public/Bug/Display.html?id=131975> + +=item * + +Using a symbolic ref with postderef syntax as the key in a hash lookup was +yielding an assertion failure on debugging builds. +L<[perl #131627]|https://rt.perl.org/Ticket/Display.html?id=131627> + +=item * + +Array and hash variables whose names begin with a caret now admit indexing +inside their curlies when interpolated into strings, as in C<< +"${^CAPTURE[0]}" >> to index C<@{^CAPTURE}>. +L<[perl #131664]|https://rt.perl.org/Ticket/Display.html?id=131664> + +=item * + +Fetching the name of a glob that was previously UTF-8 but wasn't any +longer would return that name flagged as UTF-8. +L<[perl #131263]|https://rt.perl.org/Ticket/Display.html?id=131263> + +=item * + +The perl C<sprintf()> function (via the underlying C function +C<Perl_sv_vcatpvfn_flags()>) has been heavily reworked to fix many minor +bugs, including the integer wrapping of large width and precision +specifiers and potential buffer overruns. It has also been made faster in +many cases. + +=item * + +Exiting from an C<eval>, whether normally or via an exception, now always +frees temporary values (possibly calling destructors) I<before> setting +C<$@>. For example: + + sub DESTROY { eval { die "died in DESTROY"; } } + eval { bless []; }; + # $@ used to be equal to "died in DESTROY" here; it's now "". + +=item * + +Fixed a duplicate symbol failure with C<-flto -mieee-fp> builds. +F<pp.c> defined C<_LIB_VERSION> which C<-lieee> already defines. +L<[perl #131786]|https://rt.perl.org/Ticket/Display.html?id=131786> + +=item * + +The tokenizer no longer consumes the exponent part of a floating +point number if it's incomplete. +L<[perl #131725]|https://rt.perl.org/Ticket/Display.html?id=131725> + +=item * + +On non-threaded builds, for C<m/$null/> where C<$null> is an empty +string is no longer treated as if the C</o> flag was present when the +previous matching match operator included the C</o> flag. The +rewriting used to implement this behavior could confuse the +interpreter. This matches the behaviour of threaded builds. +L<[perl #124368]|https://rt.perl.org/Ticket/Display.html?id=124368> + +=item * + +Parsing a C<sub> definition could cause a use after free if the C<sub> +keyword was followed by whitespace including newlines (and comments.) +L<[perl #131836]|https://rt.perl.org/Public/Bug/Display.html?id=131836> + +=item * + +The tokenizer now correctly adjusts a parse pointer when skipping +whitespace in a C<< ${identifier} >> construct. +L<[perl #131949]|https://rt.perl.org/Public/Bug/Display.html?id=131949> + +=item * + +Accesses to C<${^LAST_FH}> no longer assert after using any of a +variety of I/O operations on a non-glob. +L<[perl #128263]|https://rt.perl.org/Public/Bug/Display.html?id=128263> + +=item * + +The XS-level C<Copy()>, C<Move()>, C<Zero()> macros and their variants now +assert if the pointers supplied are C<NULL>. ISO C considers +supplying NULL pointers to the functions these macros are built upon +as undefined behaviour even when their count parameters are zero. +Based on these assertions and the original bug report three macro +calls were made conditional. +L<[perl #131746]|https://rt.perl.org/Public/Bug/Display.html?id=131746> +L<[perl #131892]|https://rt.perl.org/Public/Bug/Display.html?id=131892> + +=item * + +Only the C<=> operator is permitted for defining defaults for +parameters in subroutine signatures. Previously other assignment +operators, e.g. C<+=>, were also accidentally permitted. +L<[perl #131777]|https://rt.perl.org/Public/Bug/Display.html?id=131777> + +=item * + +Package names are now always included in C<:prototype> warnings +L<[perl #131833]|https://rt.perl.org/Public/Bug/Display.html?id=131833> + +=item * + +The C<je_old_stack_hwm> field, previously only found in the C<jmpenv> +structure on debugging builds, has been added to non-debug builds as +well. This fixes an issue with some CPAN modules caused by the size of +this structure varying between debugging and non-debugging builds. +L<[perl #131942]|https://rt.perl.org/Public/Bug/Display.html?id=131942> + +=item * + +The arguments to the C<ninstr()> macro are now correctly parenthesized. + +=item * + +A NULL pointer dereference in the C<S_regmatch()> function has been +fixed. +L<[perl #132017]|https://rt.perl.org/Public/Bug/Display.html?id=132017> + +=item * + +Calling L<exec PROGRAM LIST|perlfunc/exec PROGRAM LIST> with an empty C<LIST> +has been fixed. This should call C<execvp()> with an empty C<argv> array +(containing only the terminating C<NULL> pointer), but was instead just +returning false (and not setting L<C<$!>|perlvar/$!>). +L<[perl #131730]|https://rt.perl.org/Public/Bug/Display.html?id=131730> + +=item * + +The C<gv_fetchmeth_sv> C function stopped working properly in Perl 5.22 when +fetching a constant with a UTF-8 name if that constant subroutine was stored in +the stash as a simple scalar reference, rather than a full typeglob. This has +been corrected. + +=item * + +Single-letter debugger commands followed by an argument which starts with +punctuation (e.g. C<p$^V> and C<x@ARGV>) now work again. They had been +wrongly requiring a space between the command and the argument. +L<[perl #120174]|https://rt.perl.org/Public/Bug/Display.html?id=120174> + +=item * + +L<splice|perlfunc/splice ARRAY,OFFSET,LENGTH,LIST> now throws an exception +("Modification of a read-only value attempted") when modifying a read-only +array. Until now it had been silently modifying the array. The new behaviour +is consistent with the behaviour of L<push|perlfunc/push ARRAY,LIST> and +L<unshift|perlfunc/unshift ARRAY,LIST>. +L<[perl #131000]|https://rt.perl.org/Public/Bug/Display.html?id=131000> + +=item * + +C<stat()>, C<lstat()>, and file test operators now fail if given a +filename containing a nul character, in the same way that C<open()> +already fails. + +=item * + +C<stat()>, C<lstat()>, and file test operators now reliably set C<$!> when +failing due to being applied to a closed or otherwise invalid file handle. + +=item * + +File test operators for Unix permission bits that don't exist on a +particular platform, such as C<-k> (sticky bit) on Windows, now check that +the file being tested exists before returning the blanket false result, +and yield the appropriate errors if the argument doesn't refer to a file. + +=item * + +Fixed a 'read before buffer' overrun when parsing a range starting with +C<\N{}> at the beginning of the character set for the transliteration +operator. +L<[perl #132245]|https://rt.perl.org/Ticket/Display.html?id=132245> + +=item * + +Fixed a leaked scalar when parsing an empty C<\N{}> at compile-time. +L<[perl #132245]|https://rt.perl.org/Ticket/Display.html?id=132245> + +=item * + +Calling C<do $path> on a directory or block device now yields a meaningful +error code in C<$!>. +L<[perl #125774]|https://rt.perl.org/Ticket/Display.html?id=125774> + +=item * + +Regexp substitution using an overloaded replacement value that provides +a tainted stringification now correctly taints the resulting string. +L<[perl #115266]|https://rt.perl.org/Ticket/Display.html?id=115266> + +=item * + +Lexical sub declarations in C<do> blocks such as C<do { my sub lex; 123 }> +could corrupt the stack, erasing items already on the stack in the +enclosing statement. This has been fixed. +L<[perl #132442]|https://rt.perl.org/Ticket/Display.html?id=132442> + +=item * + +C<pack> and C<unpack> can now handle repeat counts and lengths that +exceed two billion. +L<[perl #119367]|https://rt.perl.org/Ticket/Display.html?id=119367> + +=item * + +Digits past the radix point in octal and binary floating point literals +now have the correct weight on platforms where a floating point +significand doesn't fit into an integer type. + +=item * + +The canonical truth value no longer has a spurious special meaning as a +callable subroutine. It used to be a magic placeholder for a missing +C<import> or C<unimport> method, but is now treated like any other string +C<1>. +L<[perl #126042]|https://rt.perl.org/Ticket/Display.html?id=126042> + +=item * + +C<system> now reduces its arguments to strings in the parent process, so +any effects of stringifying them (such as overload methods being called +or warnings being emitted) are visible in the way the program expects. +L<[perl #121105]|https://rt.perl.org/Ticket/Display.html?id=121105> + +=item * + +The C<readpipe()> built-in function now checks at compile time that +it has only one parameter expression, and puts it in scalar context, +thus ensuring that it doesn't corrupt the stack at runtime. +L<[perl #4574]|https://rt.perl.org/Ticket/Display.html?id=4574> + +=item * + +C<sort> now performs correct reference counting when aliasing C<$a> and +C<$b>, thus avoiding premature destruction and leakage of scalars if they +are re-aliased during execution of the sort comparator. +L<[perl #92264]|https://rt.perl.org/Ticket/Display.html?id=92264> + +=item * + +C<reverse> with no operand, reversing C<$_> by default, is no longer in +danger of corrupting the stack. +L<[perl #132544]|https://rt.perl.org/Ticket/Display.html?id=132544> + +=item * + +C<exec>, C<system>, et al are no longer liable to have their argument +lists corrupted by reentrant calls and by magic such as tied scalars. +L<[perl #129888]|https://rt.perl.org/Ticket/Display.html?id=129888> + +=item * + +Perl's own C<malloc> no longer gets confused by attempts to allocate +more than a gigabyte on a 64-bit platform. +L<[perl #119829]|https://rt.perl.org/Ticket/Display.html?id=119829> + +=item * + +Stacked file test operators in a sort comparator expression no longer +cause a crash. +L<[perl #129347]|https://rt.perl.org/Ticket/Display.html?id=129347> + +=item * + +An identity C<tr///> transformation on a reference is no longer mistaken +for that reference for the purposes of deciding whether it can be +assigned to. +L<[perl #130578]|https://rt.perl.org/Ticket/Display.html?id=130578> + +=item * + +Lengthy hexadecimal, octal, or binary floating point literals no +longer cause undefined behaviour when parsing digits that are of such +low significance that they can't affect the floating point value. +L<[perl #131894]|https://rt.perl.org/Ticket/Display.html?id=131894> + +=item * + +C<open $$scalarref...> and similar invocations no longer leak the file +handle. +L<[perl #115814]|https://rt.perl.org/Ticket/Display.html?id=115814> + +=item * + +Some convoluted kinds of regexp no longer cause an arithmetic overflow +when compiled. +L<[perl #131893]|https://rt.perl.org/Ticket/Display.html?id=131893> + +=item * + +The default typemap, by avoiding C<newGVgen>, now no longer leaks when +XSUBs return file handles (C<PerlIO *> or C<FILE *>). +L<[perl #115814]|https://rt.perl.org/Ticket/Display.html?id=115814> + +=item * + +Creating a C<BEGIN> block as an XS subroutine with a prototype no longer +crashes because of the early freeing of the subroutine. + +=item * + +The C<printf> format specifier C<%.0f> no longer rounds incorrectly +L<[perl #47602]|https://rt.perl.org/Ticket/Display.html?id=47602>, +and now shows the correct sign for a negative zero. + +=item * + +Fixed an issue where the error C<< Scalar value @arrayname[0] better +written as $arrayname >> would give an error C<< Cannot printf Inf with 'c' >> +when arrayname starts with C<< Inf >>. +L<[perl #132645]|https://rt.perl.org/Ticket/Display.html?id=132645> + +=item * + +The Perl implementation of C<< getcwd() >> in C<< Cwd >> in the PathTools +distribution now behaves the same as XS implementation on errors: it +returns an error, and sets C<< $! >>. +L<[perl #132648]|https://rt.perl.org/Ticket/Display.html?id=132648> + +=item * + +Vivify array elements when putting them on the stack. +Fixes L<[perl #8910]|https://rt.perl.org/Ticket/Display.html?id=8910> +(reported in April 2002). + +=item * + +Fixed parsing of braced subscript after parens. Fixes +L<[perl #8045]|https://rt.perl.org/Ticket/Display.html?id=8045> +(reported in December 2001). + +=item * + +C<tr/non_utf8/long_non_utf8/c> could give the wrong results when the +length of the replacement character list was greater than 0x7fff. + +=item * + +C<tr/non_utf8/non_utf8/cd> failed to add the implied +C<\x{100}-\x{7fffffff}> to the search character list. + +=item * + +Compilation failures within "perl-within-perl" constructs, such as with +string interpolation and the right part of C<s///e>, now cause +compilation to abort earlier. + +Previously compilation could continue in order to report other errors, +but the failed sub-parse could leave partly parsed constructs on the +parser shift-reduce stack, confusing the parser, leading to perl +crashes. +L<[perl #125351]|https://rt.perl.org/Ticket/Display.html?id=125351> + +=item * + +On threaded perls where the decimal point (radix) character is not a +dot, it has been possible for a race to occur between threads when one +needs to use the real radix character (such as with C<sprintf>). This has +now been fixed by use of a mutex on systems without thread-safe locales, +and the problem just doesn't come up on those with thread-safe locales. + +=item * + +Errors while compiling a regex character class could sometime trigger an +assertion failure. +L<[perl #132163]|https://rt.perl.org/Ticket/Display.html?id=132163> + +=back + +=head1 Acknowledgements + +Perl 5.28.0 represents approximately 13 months of development since Perl +5.26.0 and contains approximately 730,000 lines of changes across 2,200 +files from 77 authors. + +Excluding auto-generated files, documentation and release tools, there were +approximately 580,000 lines of changes to 1,300 .pm, .t, .c and .h files. + +Perl continues to flourish into its fourth decade thanks to a vibrant +community of users and developers. The following people are known to have +contributed the improvements that became Perl 5.28.0: + +Aaron Crane, Abigail, Ævar Arnfjörð Bjarmason, Alberto Simões, Alexandr +Savca, Andrew Fresh, Andy Dougherty, Andy Lester, Aristotle Pagaltzis, Ask +Bjørn Hansen, Chris 'BinGOs' Williams, Craig A. Berry, Dagfinn Ilmari +Mannsåker, Dan Collins, Daniel Dragan, David Cantrell, David Mitchell, +Dmitry Ulanov, Dominic Hargreaves, E. Choroba, Eric Herman, Eugen Konkov, +Father Chrysostomos, Gene Sullivan, George Hartzell, Graham Knop, Harald +Jörg, H.Merijn Brand, Hugo van der Sanden, Jacques Germishuys, James E +Keenan, Jarkko Hietaniemi, Jerry D. Hedden, J. Nick Koston, John Lightsey, +John Peacock, John P. Linderman, John SJ Anderson, Karen Etheridge, Karl +Williamson, Ken Brown, Ken Cotterill, Leon Timmermans, Lukas Mai, Marco +Fontani, Marc-Philip Werner, Matthew Horsfall, Neil Bowers, Nicholas Clark, +Nicolas R., Niko Tyni, Pali, Paul Marquess, Peter John Acklam, Reini Urban, +Renee Baecker, Ricardo Signes, Robin Barker, Sawyer X, Scott Lanning, Sergey +Aleynikov, Shirakata Kentaro, Shoichi Kaji, Slaven Rezic, Smylers, Steffen +Müller, Steve Hay, Sullivan Beck, Thomas Sibley, Todd Rinaldo, Tomasz +Konojacki, Tom Hukins, Tom Wyant, Tony Cook, Vitali Peil, 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 + +If you find what you think is a bug, you might check the perl bug database +at L<https://rt.perl.org/> . There may also be information at +L<http://www.perl.org/> , the Perl Home Page. + +If you believe you have an unreported bug, please run the L<perlbug> program +included with your release. Be sure to trim your bug down to a tiny but +sufficient test case. Your bug report, along with the output of C<perl -V>, +will be sent off to perlbug@perl.org to be analysed by the Perl porting team. + +If the bug you are reporting has security implications which make it +inappropriate to send to a publicly archived mailing list, then see +L<perlsec/SECURITY VULNERABILITY CONTACT INFORMATION> +for details of how to report the issue. + +=head1 Give Thanks + +If you wish to thank the Perl 5 Porters for the work we had done in Perl 5, +you can do so by running the C<perlthanks> program: + + perlthanks + +This will send an email to the Perl 5 Porters list with your show of thanks. + +=head1 SEE ALSO + +The F<Changes> file for an explanation of how to view exhaustive details on +what changed. + +The F<INSTALL> file for how to build Perl. + +The F<README> file for general stuff. + +The F<Artistic> and F<Copying> files for copyright information. + +=cut diff --git a/pod/perldelta.pod b/pod/perldelta.pod index f823fbf6a6..d5ebc3ab1d 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -2,423 +2,57 @@ =head1 NAME -perldelta - what is new for perl v5.28.0 +[ 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.28.1 =head1 DESCRIPTION -This document describes differences between the 5.26.0 release and the 5.28.0 +This document describes differences between the 5.28.0 release and the 5.28.1 release. -If you are upgrading from an earlier release such as 5.24.0, first read -L<perl5260delta>, which describes differences between 5.24.0 and 5.26.0. - -=head1 Core Enhancements - -=head2 Unicode 10.0 is supported - -A list of changes is at -L<http://www.unicode.org/versions/Unicode10.0.0>. - -=head2 L<C<delete>|perlfunc/delete EXPR> on key/value hash slices - -L<C<delete>|perlfunc/delete EXPR> can now be used on -L<keyE<sol>value hash slices|perldata/KeyE<sol>Value Hash Slices>, -returning the keys along with the deleted values. -L<[perl #131328]|https://rt.perl.org/Ticket/Display.html?id=131328> - -=head2 Experimentally, there are now alphabetic synonyms for some regular expression assertions - -If you find it difficult to remember how to write certain of the pattern -assertions, there are now alphabetic synonyms. - - CURRENT NEW SYNONYMS - ------ ------------ - (?=...) (*pla:...) or (*positive_lookahead:...) - (?!...) (*nla:...) or (*negative_lookahead:...) - (?<=...) (*plb:...) or (*positive_lookbehind:...) - (?<!...) (*nlb:...) or (*negative_lookbehind:...) - (?>...) (*atomic:...) - -These are considered experimental, so using any of these will raise -(unless turned off) a warning in the C<experimental::alpha_assertions> -category. - -=head2 Mixed Unicode scripts are now detectable - -A mixture of scripts, such as Cyrillic and Latin, in a string is often -the sign of a spoofing attack. A new regular expression construct -now allows for easy detection of these. For example, you can say - - qr/(*script_run: \d+ \b )/x - -And the digits matched will all be from the same set of 10. You won't -get a look-alike digit from a different script that has a different -value than what it appears to be. - -Or: - - qr/(*sr: \b \w+ \b )/x +If you are upgrading from an earlier release such as 5.27.0, first read +L<perl5280delta>, which describes differences between 5.27.0 and 5.28.0. -makes sure that all the characters come from the same script. - -You can also combine script runs with C<(?E<gt>...)> (or -C<*atomic:...)>). - -Instead of writing: - - (*sr:(?<...)) - -you can now run: - - (*asr:...) - # or - (*atomic_script_run:...) - -This is considered experimental, so using it will raise (unless turned -off) a warning in the C<experimental::script_run> category. - -See L<perlre/Script Runs>. - -=head2 In-place editing with C<perl -i> is now safer - -Previously in-place editing (C<perl -i>) would delete or rename the -input file as soon as you started working on a new file. - -Without backups this would result in loss of data if there was an -error, such as a full disk, when writing to the output file. - -This has changed so that the input file isn't replaced until the -output file has been completely written and successfully closed. - -This works by creating a work file in the same directory, which is -renamed over the input file once the output file is complete. - -Incompatibilities: - -=over - -=item * +=head1 Notice -Since this renaming needs to only happen once, if you create a thread -or child process, that renaming will only happen in the original -thread or process. +XXX Any important notices here -=item * - -If you change directories while processing a file, and your operating -system doesn't provide the C<unlinkat()>, C<renameat()> and C<fchmodat()> -functions, the final rename step may fail. - -=back - -L<[perl #127663]|https://rt.perl.org/Public/Bug/Display.html?id=127663> - -=head2 Initialisation of aggregate state variables - -A persistent lexical array or hash variable can now be initialized, -by an expression such as C<state @a = qw(x y z)>. Initialization of a -list of persistent lexical variables is still not possible. - -=head2 Full-size inode numbers - -On platforms where inode numbers are of a type larger than perl's native -integer numerical types, L<stat|perlfunc/stat> will preserve the full -content of large inode numbers by returning them in the form of strings of -decimal digits. Exact comparison of inode numbers can thus be achieved by -comparing with C<eq> rather than C<==>. Comparison with C<==>, and other -numerical operations (which are usually meaningless on inode numbers), -work as well as they did before, which is to say they fall back to -floating point, and ultimately operate on a fairly useless rounded inode -number if the real inode number is too big for the floating point format. - -=head2 The C<sprintf> C<%j> format size modifier is now available with pre-C99 compilers - -The actual size used depends on the platform, so remains unportable. - -=head2 Close-on-exec flag set atomically - -When opening a file descriptor, perl now generally opens it with its -close-on-exec flag already set, on platforms that support doing so. -This improves thread safety, because it means that an C<exec> initiated -by one thread can no longer cause a file descriptor in the process -of being opened by another thread to be accidentally passed to the -executed program. - -Additionally, perl now sets the close-on-exec flag more reliably, whether -it does so atomically or not. Most file descriptors were getting the -flag set, but some were being missed. - -=head2 String- and number-specific bitwise ops are no longer experimental - -The new string-specific (C<&. |. ^. ~.>) and number-specific (C<& | ^ ~>) -bitwise operators introduced in Perl 5.22 that are available within the -scope of C<use feature 'bitwise'> are no longer experimental. -Because the number-specific ops are spelled the same way as the existing -operators that choose their behaviour based on their operands, these -operators must still be enabled via the "bitwise" feature, in either of -these two ways: - - use feature "bitwise"; - - use v5.28; # "bitwise" now included - -They are also now enabled by the B<-E> command-line switch. - -The "bitwise" feature no longer emits a warning. Existing code that -disables the "experimental::bitwise" warning category that the feature -previously used will continue to work. - -One caveat that module authors ought to be aware of is that the numeric -operators now pass a fifth TRUE argument to overload methods. Any methods -that check the number of operands may croak if they do not expect so many. -XS authors in particular should be aware that this: - - SV * - bitop_handler (lobj, robj, swap) - -may need to be changed to this: - - SV * - bitop_handler (lobj, robj, swap, ...) - -=head2 Locales are now thread-safe on systems that support them - -These systems include Windows starting with Visual Studio 2005, and in -POSIX 2008 systems. - -The implication is that you are now free to use locales and change them -in a threaded environment. Your changes affect only your thread. -See L<perllocale/Multi-threaded operation> +=head1 Core Enhancements -=head2 New read-only predefined variable C<${^SAFE_LOCALES}> +XXX New core language features go here. Summarize user-visible core language +enhancements. Particularly prominent performance optimisations could go +here, but most should go in the L</Performance Enhancements> section. -This variable is 1 if the Perl interpreter is operating in an -environment where it is safe to use and change locales (see -L<perllocale>.) This variable is true when the perl is -unthreaded, or compiled in a platform that supports thread-safe locale -operation (see previous item). +[ List each enhancement as a =head2 entry ] =head1 Security -=head2 [CVE-2017-12837] Heap buffer overflow in regular expression compiler - -Compiling certain regular expression patterns with the case-insensitive -modifier could cause a heap buffer overflow and crash perl. This has now been -fixed. -L<[perl #131582]|https://rt.perl.org/Public/Bug/Display.html?id=131582> - -=head2 [CVE-2017-12883] Buffer over-read in regular expression parser - -For certain types of syntax error in a regular expression pattern, the error -message could either contain the contents of a random, possibly large, chunk of -memory, or could crash perl. This has now been fixed. -L<[perl #131598]|https://rt.perl.org/Public/Bug/Display.html?id=131598> - -=head2 [CVE-2017-12814] C<$ENV{$key}> stack buffer overflow on Windows - -A possible stack buffer overflow in the C<%ENV> code on Windows has been fixed -by removing the buffer completely since it was superfluous anyway. -L<[perl #131665]|https://rt.perl.org/Public/Bug/Display.html?id=131665> +XXX Any security-related notices go here. In particular, any security +vulnerabilities closed should be noted here rather than in the +L</Selected Bug Fixes> section. -=head2 Default Hash Function Change - -Perl 5.28.0 retires various older hash functions which are not viewed as -sufficiently secure for use in Perl. We now support four general purpose -hash functions, Siphash (2-4 and 1-3 variants), and Zaphod32, and StadtX -hash. In addition we support SBOX32 (a form of tabular hashing) for hashing -short strings, in conjunction with any of the other hash functions provided. - -By default Perl is configured to support SBOX hashing of strings up to 24 -characters, in conjunction with StadtX hashing on 64 bit builds, and -Zaphod32 hashing for 32 bit builds. - -You may control these settings with the following options to Configure: - - -DPERL_HASH_FUNC_SIPHASH - -DPERL_HASH_FUNC_SIPHASH13 - -DPERL_HASH_FUNC_STADTX - -DPERL_HASH_FUNC_ZAPHOD32 - -To disable SBOX hashing you can use - - -DPERL_HASH_USE_SBOX32_ALSO=0 - -And to set the maximum length to use SBOX32 hashing on with: - - -DSBOX32_MAX_LEN=16 - -The maximum length allowed is 256. There probably isn't much point -in setting it higher than the default. +[ List each security issue as a =head2 entry ] =head1 Incompatible Changes -=head2 Subroutine attribute and signature order - -The experimental subroutine signatures feature has been changed so that -subroutine attributes must now come before the signature rather than -after. This is because attributes like C<:lvalue> can affect the -compilation of code within the signature, for example: - - sub f :lvalue ($a = do { $x = "abc"; return substr($x,0,1)}) { ...} - -Note that this the second time they have been flipped: - - sub f :lvalue ($a, $b) { ... }; # 5.20; 5.28 onwards - sub f ($a, $b) :lvalue { ... }; # 5.22 - 5.26 - -=head2 Comma-less variable lists in formats are no longer allowed - -Omitting the commas between variables passed to formats is no longer -allowed. This has been deprecated since Perl 5.000. - -=head2 The C<:locked> and C<:unique> attributes have been removed - -These have been no-ops and deprecated since Perl 5.12 and 5.10, -respectively. - -=head2 C<\N{}> with nothing between the braces is now illegal - -This has been deprecated since Perl 5.24. - -=head2 Opening the same symbol as both a file and directory handle is no longer allowed - -Using C<open()> and C<opendir()> to associate both a filehandle and a dirhandle -to the same symbol (glob or scalar) has been deprecated since Perl 5.10. - -=head2 Use of bare C<< << >> to mean C<< <<"" >> is no longer allowed - -Use of a bare terminator has been deprecated since Perl 5.000. - -=head2 Setting $/ to a reference to a non-positive integer no longer allowed - -This used to work like setting it to C<undef>, but has been deprecated -since Perl 5.20. - -=head2 Unicode code points with values exceeding C<IV_MAX> are now fatal - -This was deprecated since Perl 5.24. - -=head2 The C<B::OP::terse> method has been removed - -Use C<B::Concise::b_terse> instead. - -=head2 Use of inherited AUTOLOAD for non-methods is no longer allowed - -This was deprecated in Perl 5.004. - -=head2 Use of strings with code points over 0xFF is not allowed for bitwise string operators - -Code points over C<0xFF> do not make sense for bitwise operators and such -an operation will now croak, except for a few remaining cases. See -L<perldeprecation>. +XXX For a release on a stable branch, this section aspires to be: -This was deprecated in Perl 5.24. + There are no changes intentionally incompatible with 5.XXX.XXX + If any exist, they are bugs, and we request that you submit a + report. See L</Reporting Bugs> below. -=head2 Setting C<${^ENCODING}> to a defined value is now illegal - -This has been deprecated since Perl 5.22 and a no-op since Perl 5.26. - -=head2 Backslash no longer escapes colon in PATH for the C<-S> switch - -Previously the C<-S> switch incorrectly treated backslash ("\") as an -escape for colon when traversing the C<PATH> environment variable. -L<[perl #129183]|https://rt.perl.org/Ticket/Display.html?id=129183> - -=head2 the -DH (DEBUG_H) misfeature has been removed - -On a perl built with debugging support, the C<H> flag to the C<-D> -debugging option has been removed. This was supposed to dump hash values, -but has been broken for many years. - -=head2 Yada-yada is now strictly a statement - -By the time of its initial stable release in Perl 5.12, the C<...> -(yada-yada) operator was explicitly intended to serve as a statement, -not an expression. However, the original implementation was confused -on this point, leading to inconsistent parsing. The operator was -accidentally accepted in a few situations where it did not serve as a -complete statement, such as - - ... . "foo"; - ... if $a < $b; - -The parsing has now been made consistent, permitting yada-yada only as -a statement. Affected code can use C<do{...}> to put a yada-yada into -an arbitrary expression context. - -=head2 Sort algorithm can no longer be specified - -Since Perl 5.8, the L<sort> pragma has had subpragmata C<_mergesort>, -C<_quicksort>, and C<_qsort> that can be used to specify which algorithm -perl should use to implement the L<sort|perlfunc/sort> builtin. -This was always considered a dubious feature that might not last, -hence the underscore spellings, and they were documented as not being -portable beyond Perl 5.8. These subpragmata have now been deleted, -and any attempt to use them is an error. The L<sort> pragma otherwise -remains, and the algorithm-neutral C<stable> subpragma can be used to -control sorting behaviour. -L<[perl #119635]|https://rt.perl.org/Ticket/Display.html?id=119635> - -=head2 Over-radix digits in floating point literals - -Octal and binary floating point literals used to permit any hexadecimal -digit to appear after the radix point. The digits are now restricted -to those appropriate for the radix, as digits before the radix point -always were. - -=head2 Return type of C<unpackstring()> - -The return types of the C API functions C<unpackstring()> and -C<unpack_str()> have changed from C<I32> to C<SSize_t>, in order to -accommodate datasets of more than two billion items. +[ List each incompatible change as a =head2 entry ] =head1 Deprecations -=head2 Use of L<C<vec>|perlfunc/vec EXPR,OFFSET,BITS> on strings with code points above 0xFF is deprecated - -Such strings are represented internally in UTF-8, and C<vec> is a -bit-oriented operation that will likely give unexpected results on those -strings. - -=head2 Some uses of unescaped C<"{"> in regexes are no longer fatal - -Perl 5.26.0 fatalized some uses of an unescaped left brace, but an -exception was made at the last minute, specifically crafted to be a -minimal change to allow GNU Autoconf to work. That tool is heavily -depended upon, and continues to use the deprecated usage. Its use of an -unescaped left brace is one where we have no intention of repurposing -C<"{"> to be something other than itself. - -That exception is now generalized to include various other such cases -where the C<"{"> will not be repurposed. - -Note that these uses continue to raise a deprecation message. - -=head2 Use of unescaped C<"{"> immediately after a C<"("> in regular expression patterns is deprecated - -Using unescaped left braces is officially deprecated everywhere, but it -is not enforced in contexts where their use does not interfere with -expected extensions to the language. A deprecation is added in this -release when the brace appears immediately after an opening parenthesis. -Before this, even if the brace was part of a legal quantifier, it was -not interpreted as such, but as the literal characters, unlike other -quantifiers that follow a C<"("> which are considered errors. Now, -their use will raise a deprecation message, unless turned off. - -=head2 Assignment to C<$[> will be fatal in Perl 5.30 - -Assigning a non-zero value to L<C<$[>|perlvar/$[> has been deprecated -since Perl 5.12, but was never given a deadline for removal. This has -now been scheduled for Perl 5.30. - -=head2 hostname() won't accept arguments in Perl 5.32 - -Passing arguments to C<Sys::Hostname::hostname()> was already deprecated, -but didn't have a removal date. This has now been scheduled for Perl -5.32. L<[perl #124349]|https://rt.perl.org/Ticket/Display.html?id=124349> +XXX Any deprecated features, syntax, modules etc. should be listed here. =head2 Module removals +XXX Remove this section if not applicable. + The following modules will be removed from the core distribution in a future release, and will at that time need to be installed from CPAN. Distributions on CPAN which require these modules will need to list them as @@ -435,727 +69,90 @@ not usually on concerns over their design. =over -=item B::Debug +=item XXX -=item L<Locale::Codes> and its associated Country, Currency and Language modules +XXX Note that deprecated modules should be listed here even if they are listed +as an updated module in the L</Modules and Pragmata> section. =back -=head1 Performance Enhancements - -=over 4 - -=item * - -The start up overhead for creating regular expression patterns with -Unicode properties (C<\p{...}>) has been greatly reduced in most cases. +[ List each other deprecation as a =head2 entry ] -=item * - -Many string concatenation expressions are now considerably faster, due -to the introduction internally of a C<multiconcat> opcode which combines -multiple concatenations, and optionally a C<=> or C<.=>, into a single -action. For example, apart from retrieving C<$s>, C<$a> and C<$b>, this -whole expression is now handled as a single op: - - $s .= "a=$a b=$b\n" - -As a special case, if the LHS of an assignment is a lexical variable or -C<my $s>, the op itself handles retrieving the lexical variable, which -is faster. - -In general, the more the expression includes a mix of constant strings and -variable expressions, the longer the expression, and the more it mixes -together non-utf8 and utf8 strings, the more marked the performance -improvement. For example on a C<x86_64> system, this code has been -benchmarked running four times faster: - - my $s; - my $a = "ab\x{100}cde"; - my $b = "fghij"; - my $c = "\x{101}klmn"; - - for my $i (1..10_000_000) { - $s = "\x{100}wxyz"; - $s .= "foo=$a bar=$b baz=$c"; - } - -In addition, C<sprintf> expressions which have a constant format -containing only C<%s> and C<%%> format elements, and which have a fixed -number of arguments, are now also optimised into a C<multiconcat> op. - -=item * - -The C<ref()> builtin is now much faster in boolean context, since it no -longer bothers to construct a temporary string like C<Foo=ARRAY(0x134af48)>. - -=item * - -C<keys()> in void and scalar contexts is now more efficient. - -=item * - -The common idiom of comparing the result of index() with -1 is now -specifically optimised, e.g. - - if (index(...) != -1) { ... } - -=item * - -C<for()> loops and similar constructs are now more efficient in most cases. - -=item * - -L<File::Glob> has been modified to remove unnecessary backtracking and -recursion, thanks to Russ Cox. See L<https://research.swtch.com/glob> -for more details. - -=item * - -The XS-level C<SvTRUE()> API function is now more efficient. - -=item * - -Various integer-returning ops are now more efficient in scalar/boolean context. - -=item * - -Slightly improved performance when parsing stash names. -L<[perl #129990]|https://rt.perl.org/Public/Bug/Display.html?id=129990> - -=item * - -Calls to C<require> for an already loaded module are now slightly faster. -L<[perl #132171]|https://rt.perl.org/Public/Bug/Display.html?id=132171> - -=item * +=head1 Performance Enhancements -The performance of pattern matching C<[[:ascii:]]> and C<[[:^ascii:]]> -has been improved significantly except on EBCDIC platforms. +XXX Changes which enhance performance without changing behaviour go here. +There may well be none in a stable release. -=item * +[ List each enhancement as an =item entry ] -Various optimizations have been applied to matching regular expression -patterns, so under the right circumstances, significant performance -gains may be noticed. But in an application with many varied patterns, -little overall improvement likely will be seen. +=over 4 =item * -Other optimizations have been applied to UTF-8 handling, but these are -not typically a major factor in most applications. +XXX =back =head1 Modules and Pragmata -Key highlights in this release across several modules: - -=head2 Removal of use vars +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>. 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. -The usage of C<use vars> has been discouraged since the introduction of -C<our> in Perl 5.6.0. Where possible the usage of this pragma has now been -removed from the Perl source code. +The list of new and updated modules is modified automatically as part of +preparing a Perl release, so the only reason to manually add entries here is if +you're summarising the important changes in the module update. (Also, if the +manually-added details don't match the automatically-generated ones, the +release manager will have to investigate the situation carefully.) -This had a slight effect (for the better) on the output of WARNING_BITS in -L<B::Deparse>. +[ Within each section, list entries as an =item entry ] -=head2 Use of DynaLoader changed to XSLoader in many modules - -XSLoader is more modern, and most modules already require perl 5.6 or -greater, so no functionality is lost by switching. In some cases, we have -also made changes to the local implementation that may not be reflected in -the version on CPAN due to a desire to maintain more backwards -compatibility. - -=head2 Updated Modules and Pragmata +=head2 New Modules and Pragmata =over 4 =item * -L<Archive::Tar> has been upgraded from version 2.24 to 2.30. - -This update also handled CVE-2018-12015: directory traversal -vulnerability. -L<[cpan #125523]|https://rt.cpan.org/Ticket/Display.html?id=125523> - -=item * - -L<arybase> has been upgraded from version 0.12 to 0.15. - -=item * - -L<Attribute::Handlers> has been upgraded from version 0.99 to 1.01. - -=item * - -L<attributes> has been upgraded from version 0.29 to 0.33. - -=item * - -L<B> has been upgraded from version 1.68 to 1.74. - -=item * - -L<B::Concise> has been upgraded from version 0.999 to 1.003. - -=item * - -L<B::Debug> has been upgraded from version 1.24 to 1.26. - -NOTE: L<B::Debug> is deprecated and may be removed from a future version -of Perl. - -=item * - -L<B::Deparse> has been upgraded from version 1.40 to 1.48. - -It includes many bug fixes, and in particular, it now deparses variable -attributes correctly: - - my $x :foo; # used to deparse as - # 'attributes'->import('main', \$x, 'foo'), my $x; - -=item * - -L<base> has been upgraded from version 2.25 to 2.27. - -=item * - -L<bignum> has been upgraded from version 0.47 to 0.49. - -=item * - -L<blib> has been upgraded from version 1.06 to 1.07. - -=item * - -L<bytes> has been upgraded from version 1.05 to 1.06. - -=item * - -L<Carp> has been upgraded from version 1.42 to 1.50. - -If a package on the call stack contains a constant named C<ISA>, Carp no -longer throws a "Not a GLOB reference" error. - -L<Carp>, when generating stack traces, now attempts to work around -longstanding bugs resulting from Perl's non-reference-counted stack. -L<[perl #52610]|https://rt.perl.org/Ticket/Display.html?id=52610> - -Carp has been modified to avoid assuming that objects cannot be -overloaded without the L<overload> module loaded (this can happen with -objects created by XS modules). Previously, infinite recursion would -result if an XS-defined overload method itself called Carp. -L<[perl #132828]|https://rt.perl.org/Ticket/Display.html?id=132828> - -Carp now avoids using C<overload::StrVal>, partly because older versions -of L<overload> (included with perl 5.14 and earlier) load L<Scalar::Util> -at run time, which will fail if Carp has been invoked after a syntax error. - -=item * - -L<charnames> has been upgraded from version 1.44 to 1.45. - -=item * - -L<Compress::Raw::Zlib> has been upgraded from version 2.074 to 2.076. - -This addresses a security vulnerability in older versions of the 'zlib' library -(which is bundled with Compress-Raw-Zlib). - -=item * - -L<Config::Extensions> has been upgraded from version 0.01 to 0.02. - -=item * - -L<Config::Perl::V> has been upgraded from version 0.28 to 0.29. - -=item * - -L<CPAN> has been upgraded from version 2.18 to 2.20. - -=item * - -L<Data::Dumper> has been upgraded from version 2.167 to 2.170. - -Quoting of glob names now obeys the Useqq option -L<[perl #119831]|https://rt.perl.org/Ticket/Display.html?id=119831>. - -Attempts to set an option to C<undef> through a combined getter/setter -method are no longer mistaken for getter calls -L<[perl #113090]|https://rt.perl.org/Ticket/Display.html?id=113090>. - -=item * - -L<Devel::Peek> has been upgraded from version 1.26 to 1.27. - -=item * - -L<Devel::PPPort> has been upgraded from version 3.35 to 3.40. - -L<Devel::PPPort> has moved from cpan-first to perl-first maintenance - -Primary responsibility for the code in Devel::PPPort has moved into core perl. -In a practical sense there should be no change except that hopefully it will -stay more up to date with changes made to symbols in perl, rather than needing -to be updated after the fact. - -=item * - -L<Digest::SHA> has been upgraded from version 5.96 to 6.01. - -=item * - -L<DirHandle> has been upgraded from version 1.04 to 1.05. - -=item * - -L<DynaLoader> has been upgraded from version 1.42 to 1.45. - -Its documentation now shows the use of C<__PACKAGE__> and direct object -syntax -L<[perl #132247]|https://rt.perl.org/Ticket/Display.html?id=132247>. - -=item * - -L<Encode> has been upgraded from version 2.88 to 2.97. - -=item * - -L<encoding> has been upgraded from version 2.19 to 2.22. - -=item * - -L<Errno> has been upgraded from version 1.28 to 1.29. - -=item * - -L<experimental> has been upgraded from version 0.016 to 0.019. - -=item * - -L<Exporter> has been upgraded from version 5.72 to 5.73. - -=item * - -L<ExtUtils::CBuilder> has been upgraded from version 0.280225 to 0.280230. - -=item * - -L<ExtUtils::Constant> has been upgraded from version 0.23 to 0.25. - -=item * - -L<ExtUtils::Embed> has been upgraded from version 1.34 to 1.35. - -=item * - -L<ExtUtils::Install> has been upgraded from version 2.04 to 2.14. - -=item * - -L<ExtUtils::MakeMaker> has been upgraded from version 7.24 to 7.34. - -=item * - -L<ExtUtils::Miniperl> has been upgraded from version 1.06 to 1.08. - -=item * - -L<ExtUtils::ParseXS> has been upgraded from version 3.34 to 3.39. - -=item * - -L<ExtUtils::Typemaps> has been upgraded from version 3.34 to 3.38. - -=item * - -L<ExtUtils::XSSymSet> has been upgraded from version 1.3 to 1.4. - -=item * - -L<feature> has been upgraded from version 1.47 to 1.52. - -=item * - -L<fields> has been upgraded from version 2.23 to 2.24. - -=item * - -L<File::Copy> has been upgraded from version 2.32 to 2.33. - -It will now use the sub-second precision variant of utime() supplied by -L<Time::HiRes> where available. -L<[perl #132401]|https://rt.perl.org/Ticket/Display.html?id=132401>. - -=item * - -L<File::Fetch> has been upgraded from version 0.52 to 0.56. - -=item * - -L<File::Glob> has been upgraded from version 1.28 to 1.31. - -=item * - -L<File::Path> has been upgraded from version 2.12_01 to 2.15. - -=item * - -L<File::Spec> and L<Cwd> have been upgraded from version 3.67 to 3.74. - -=item * - -L<File::stat> has been upgraded from version 1.07 to 1.08. - -=item * - -L<FileCache> has been upgraded from version 1.09 to 1.10. - -=item * - -L<Filter::Simple> has been upgraded from version 0.93 to 0.95. - -=item * - -L<Filter::Util::Call> has been upgraded from version 1.55 to 1.58. - -=item * - -L<GDBM_File> has been upgraded from version 1.15 to 1.17. - -Its documentation now explains that C<each> and C<delete> don't mix in -hashes tied to this module -L<[perl #117449]|https://rt.perl.org/Ticket/Display.html?id=117449>. - -It will now retry opening with an acceptable block size if asking gdbm -to default the block size failed -L<[perl #119623]|https://rt.perl.org/Ticket/Display.html?id=119623>. - -=item * - -L<Getopt::Long> has been upgraded from version 2.49 to 2.5. - -=item * - -L<Hash::Util::FieldHash> has been upgraded from version 1.19 to 1.20. - -=item * - -L<I18N::Langinfo> has been upgraded from version 0.13 to 0.17. - -This module is now available on all platforms, emulating the system -L<nl_langinfo(3)> on systems that lack it. Some caveats apply, as -L<detailed in its documentation|I18N::Langinfo>, the most severe being -that, except for MS Windows, the C<CODESET> item is not implemented on -those systems, always returning C<"">. - -It now sets the UTF-8 flag in its returned scalar if the string contains -legal non-ASCII UTF-8, and the locale is UTF-8 -L<[perl #127288]|https://rt.perl.org/Ticket/Display.html?id=127288>. - -This update also fixes a bug in which the underlying locale was ignored -for the C<RADIXCHAR> (always was returned as a dot) and the C<THOUSEP> -(always empty). Now the locale-appropriate values are returned. - -=item * - -L<I18N::LangTags> has been upgraded from version 0.42 to 0.43. - -=item * - -L<if> has been upgraded from version 0.0606 to 0.0608. - -=item * - -L<IO> has been upgraded from version 1.38 to 1.39. - -=item * - -L<IO::Socket::IP> has been upgraded from version 0.38 to 0.39. - -=item * - -L<IPC::Cmd> has been upgraded from version 0.96 to 1.00. - -=item * - -L<JSON::PP> has been upgraded from version 2.27400_02 to 2.97001. - -=item * - -The C<libnet> distribution has been upgraded from version 3.10 to 3.11. - -=item * - -L<List::Util> has been upgraded from version 1.46_02 to 1.49. - -=item * - -L<Locale::Codes> has been upgraded from version 3.42 to 3.56. - -B<NOTE>: L<Locale::Codes> scheduled to be removed from core in Perl 5.30. - -=item * - -L<Locale::Maketext> has been upgraded from version 1.28 to 1.29. - -=item * - -L<Math::BigInt> has been upgraded from version 1.999806 to 1.999811. - -=item * - -L<Math::BigInt::FastCalc> has been upgraded from version 0.5005 to 0.5006. - -=item * - -L<Math::BigRat> has been upgraded from version 0.2611 to 0.2613. - -=item * - -L<Module::CoreList> has been upgraded from version 5.20170530 to 5.20180622. - -=item * - -L<mro> has been upgraded from version 1.20 to 1.22. - -=item * - -L<Net::Ping> has been upgraded from version 2.55 to 2.62. - -=item * - -L<NEXT> has been upgraded from version 0.67 to 0.67_01. - -=item * - -L<ODBM_File> has been upgraded from version 1.14 to 1.15. - -=item * - -L<Opcode> has been upgraded from version 1.39 to 1.43. - -=item * - -L<overload> has been upgraded from version 1.28 to 1.30. - -=item * - -L<PerlIO::encoding> has been upgraded from version 0.25 to 0.26. - -=item * - -L<PerlIO::scalar> has been upgraded from version 0.26 to 0.29. - -=item * - -L<PerlIO::via> has been upgraded from version 0.16 to 0.17. - -=item * - -L<Pod::Functions> has been upgraded from version 1.11 to 1.13. - -=item * - -L<Pod::Html> has been upgraded from version 1.2202 to 1.24. - -A title for the HTML document will now be automatically generated by -default from a "NAME" section in the POD document, as it used to be -before the module was rewritten to use L<Pod::Simple::XHTML> to do the -core of its job -L<[perl #110520]|https://rt.perl.org/Ticket/Display.html?id=110520>. - -=item * - -L<Pod::Perldoc> has been upgraded from version 3.28 to 3.2801. - -=item * - -The C<podlators> distribution has been upgraded from version 4.09 to 4.10. - -Man page references and function names now follow the Linux man page -formatting standards, instead of the Solaris standard. - -=item * - -L<POSIX> has been upgraded from version 1.76 to 1.84. - -Some more cautions were added about using locale-specific functions in -threaded applications. - -=item * - -L<re> has been upgraded from version 0.34 to 0.36. - -=item * - -L<Scalar::Util> has been upgraded from version 1.46_02 to 1.50. - -=item * - -L<SelfLoader> has been upgraded from version 1.23 to 1.25. - -=item * - -L<Socket> has been upgraded from version 2.020_03 to 2.027. - -=item * - -L<sort> has been upgraded from version 2.02 to 2.04. - -=item * - -L<Storable> has been upgraded from version 2.62 to 3.08. - -=item * - -L<Sub::Util> has been upgraded from version 1.48 to 1.49. - -=item * - -L<subs> has been upgraded from version 1.02 to 1.03. - -=item * - -L<Sys::Hostname> has been upgraded from version 1.20 to 1.22. - -=item * - -L<Term::ReadLine> has been upgraded from version 1.16 to 1.17. - -=item * - -L<Test> has been upgraded from version 1.30 to 1.31. - -=item * - -L<Test::Harness> has been upgraded from version 3.38 to 3.42. - -=item * - -L<Test::Simple> has been upgraded from version 1.302073 to 1.302133. - -=item * - -L<threads> has been upgraded from version 2.15 to 2.22. - -The documentation now better describes the problems that arise when -returning values from threads, and no longer warns about creating threads -in C<BEGIN> blocks. -L<[perl #96538]|https://rt.perl.org/Ticket/Display.html?id=96538> - -=item * - -L<threads::shared> has been upgraded from version 1.56 to 1.58. - -=item * - -L<Tie::Array> has been upgraded from version 1.06 to 1.07. - -=item * - -L<Tie::StdHandle> has been upgraded from version 4.4 to 4.5. - -=item * - -L<Time::gmtime> has been upgraded from version 1.03 to 1.04. - -=item * - -L<Time::HiRes> has been upgraded from version 1.9741 to 1.9759. - -=item * - -L<Time::localtime> has been upgraded from version 1.02 to 1.03. - -=item * - -L<Time::Piece> has been upgraded from version 1.31 to 1.3204. - -=item * - -L<Unicode::Collate> has been upgraded from version 1.19 to 1.25. - -=item * - -L<Unicode::Normalize> has been upgraded from version 1.25 to 1.26. - -=item * - -L<Unicode::UCD> has been upgraded from version 0.68 to 0.70. - -The function C<num> now accepts an optional parameter to help in -diagnosing error returns. - -=item * - -L<User::grent> has been upgraded from version 1.01 to 1.02. - -=item * - -L<User::pwent> has been upgraded from version 1.00 to 1.01. - -=item * - -L<utf8> has been upgraded from version 1.19 to 1.21. - -=item * - -L<vars> has been upgraded from version 1.03 to 1.04. - -=item * +XXX Remove this section if not applicable. -L<version> has been upgraded from version 0.9917 to 0.9923. +=back -=item * +=head2 Updated Modules and Pragmata -L<VMS::DCLsym> has been upgraded from version 1.08 to 1.09. +=over 4 =item * -L<VMS::Stdio> has been upgraded from version 2.41 to 2.44. +L<XXX> has been upgraded from version A.xx to B.yy. -=item * +If there was something important to note about this change, include that here. -L<warnings> has been upgraded from version 1.37 to 1.42. - -It now includes new functions with names ending in C<_at_level>, allowing -callers to specify the exact call frame. -L<[perl #132468]|https://rt.perl.org/Ticket/Display.html?id=132468> +=back -=item * +=head2 Removed Modules and Pragmata -L<XS::Typemap> has been upgraded from version 0.15 to 0.16. +=over 4 =item * -L<XSLoader> has been upgraded from version 0.27 to 0.30. - -Its documentation now shows the use of C<__PACKAGE__>, and direct object -syntax for example C<DynaLoader> usage -L<[perl #132247]|https://rt.perl.org/Ticket/Display.html?id=132247>. - -Platforms that use C<mod2fname> to edit the names of loadable -libraries now look for bootstrap (.bs) files under the correct, -non-edited name. +XXX =back -=head2 Removed Modules and Pragmata +=head1 Documentation -=over 4 +XXX Changes to files in F<pod/> go here. Consider grouping entries by +file and be sure to link to the appropriate page, e.g. L<perlfunc>. -=item * +=head2 New Documentation -The C<VMS::stdio> compatibility shim has been removed. +XXX Changes which create B<new> files in F<pod/> go here. -=back +=head3 L<XXX> -=head1 Documentation +XXX Description of the purpose of the new file here =head2 Changes to Existing Documentation @@ -1163,1241 +160,250 @@ We have attempted to update the documentation to reflect the changes listed in this document. If you find any we have missed, send email to L<perlbug@perl.org|mailto:perlbug@perl.org>. +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. + Additionally, the following selected changes have been made: -=head3 L<perlapi> +=head3 L<XXX> =over 4 =item * -The API functions C<perl_parse()>, C<perl_run()>, and C<perl_destruct()> -are now documented comprehensively, where previously the only -documentation was a reference to the L<perlembed> tutorial. - -=item * - -The documentation of C<newGIVENOP()> has been belatedly updated to -account for the removal of lexical C<$_>. - -=item * - -The API functions C<newCONSTSUB()> and C<newCONSTSUB_flags()> are -documented much more comprehensively than before. +XXX Description of the change here =back -=head3 L<perldata> +=head1 Diagnostics -=over 4 +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>. -=item * +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. -The section "Truth and Falsehood" in L<perlsyn> has been moved into -L<perldata>. +=head2 New Diagnostics -=back +XXX Newly added diagnostic messages go under here, separated into New Errors +and New Warnings -=head3 L<perldebguts> +=head3 New Errors =over 4 =item * -The description of the conditions under which C<DB::sub()> will be called -has been clarified. -L<[perl #131672]|https://rt.perl.org/Ticket/Display.html?id=131672> +XXX L<message|perldiag/"message"> =back -=head3 L<perldiag> +=head3 New Warnings =over 4 -=item * L<perldiag/Variable length lookbehind not implemented in regex mE<sol>%sE<sol>> - -This now gives more ideas as to workarounds to the issue that was -introduced in Perl 5.18 (but not documented explicitly in its perldelta) -for the fact that some Unicode C</i> rules cause a few sequences such as - - (?<!st) - -to be considered variable length, and hence disallowed. - -=item * "Use of state $_ is experimental" in L<perldiag> - -This entry has been removed, as the experimental support of this construct was -removed in perl 5.24.0. - =item * -The diagnostic C<Initialization of state variables in list context -currently forbidden> has changed to C<Initialization of state variables -in list currently forbidden>, because list-context initialization of -single aggregate state variables is now permitted. +XXX L<message|perldiag/"message"> =back -=head3 L<perlembed> - -=over 4 - -=item * - -The examples in L<perlembed> have been made more portable in the way -they exit, and the example that gets an exit code from the embedded Perl -interpreter now gets it from the right place. The examples that pass -a constructed argv to Perl now show the mandatory null C<argv[argc]>. - -=item * - -An example in L<perlembed> used the string value of C<ERRSV> as a -format string when calling croak(). If that string contains format -codes such as C<%s> this could crash the program. - -This has been changed to a call to croak_sv(). - -An alternative could have been to supply a trivial format string: - - croak("%s", SvPV_nolen(ERRSV)); - -or as a special case for C<ERRSV> simply: - - croak(NULL); - -=back +=head2 Changes to Existing Diagnostics -=head3 L<perlfunc> +XXX Changes (i.e. rewording) of diagnostic messages go here =over 4 =item * -There is now a note that warnings generated by built-in functions are -documented in L<perldiag> and L<warnings>. -L<[perl #116080]|https://rt.perl.org/Ticket/Display.html?id=116080> - -=item * - -The documentation for the C<exists> operator no longer says that -autovivification behaviour "may be fixed in a future release". -We've determined that we're not going to change the default behaviour. -L<[perl #127712]|https://rt.perl.org/Ticket/Display.html?id=127712> - -=item * - -A couple of small details in the documentation for the C<bless> operator -have been clarified. -L<[perl #124428]|https://rt.perl.org/Ticket/Display.html?id=124428> - -=item * - -The description of C<@INC> hooks in the documentation for C<require> -has been corrected to say that filter subroutines receive a useless -first argument. -L<[perl #115754]|https://rt.perl.org/Ticket/Display.html?id=115754> - -=item * - -The documentation of C<ref> has been rewritten for clarity. - -=item * - -The documentation of C<use> now explains what syntactically qualifies -as a version number for its module version checking feature. - -=item * - -The documentation of C<warn> has been updated to reflect that since Perl -5.14 it has treated complex exception objects in a manner equivalent -to C<die>. -L<[perl #121372]|https://rt.perl.org/Ticket/Display.html?id=121372> - -=item * - -The documentation of C<die> and C<warn> has been revised for clarity. - -=item * - -The documentation of C<each> has been improved, with a slightly more -explicit description of the sharing of iterator state, and with -caveats regarding the fragility of while-each loops. -L<[perl #132644]|https://rt.perl.org/Ticket/Display.html?id=132644> - -=item * - -Clarification to C<require> was added to explain the differences between - - require Foo::Bar; - require "Foo/Bar.pm"; +XXX Describe change here =back -=head3 L<perlgit> - -=over 4 - -=item * +=head1 Utility Changes -The precise rules for identifying C<smoke-me> branches are now stated. +XXX Changes to installed programs such as F<perlbug> and F<xsubpp> go here. +Most of these are built within the directory F<utils>. -=back +[ List utility changes as a =head2 entry for each utility and =item +entries for each change +Use L<XXX> with program names to get proper documentation linking. ] -=head3 L<perlguts> +=head2 L<XXX> =over 4 =item * -The section on reference counting in L<perlguts> has been heavily revised, -to describe references in the way a programmer needs to think about them -rather than in terms of the physical data structures. - -=item * - -Improve documentation related to UTF-8 multibytes. +XXX =back -=head3 L<perlintern> - -=over 4 - -=item * - -The internal functions C<newXS_len_flags()> and C<newATTRSUB_x()> are -now documented. +=head1 Configuration and Compilation -=back +XXX Changes to F<Configure>, F<installperl>, F<installman>, and analogous tools +go here. Any other changes to the Perl build process should be listed here. +However, any platform-specific changes should be listed in the +L</Platform Support> section, instead. -=head3 L<perlobj> +[ List changes as an =item entry ]. =over 4 =item * -The documentation about C<DESTROY> methods has been corrected, updated, -and revised, especially in regard to how they interact with exceptions. -L<[perl #122753]|https://rt.perl.org/Ticket/Display.html?id=122753> +XXX =back -=head3 L<perlop> - -=over 4 - -=item * - -The description of the C<x> operator in L<perlop> has been clarified. -L<[perl #132460]|https://rt.perl.org/Ticket/Display.html?id=132460> - -=item * - -L<perlop> has been updated to note that C<qw>'s whitespace rules differ -from that of C<split>'s in that only ASCII whitespace is used. - -=item * - -The general explanation of operator precedence and associativity has -been corrected and clarified. -L<[perl #127391]|https://rt.perl.org/Ticket/Display.html?id=127391> - -=item * - -The documentation for the C<\> referencing operator now explains the -unusual context that it supplies to its operand. -L<[perl #131061]|https://rt.perl.org/Ticket/Display.html?id=131061> - -=back +=head1 Testing -=head3 L<perlrequick> +XXX Any significant changes to the testing of a freshly built perl should be +listed here. Changes which create B<new> files in F<t/> go here as do any +large changes to the testing harness (e.g. when parallel testing was added). +Changes to existing files in F<t/> aren't worth summarizing, although the bugs +that they represent may be covered elsewhere. -=over 4 +XXX If there were no significant test changes, say this: -=item * +Tests were added and changed to reflect the other additions and changes +in this release. -Clarifications on metacharacters and character classes +XXX If instead there were significant changes, say this: -=back +Tests were added and changed to reflect the other additions and +changes in this release. Furthermore, these significant changes were +made: -=head3 L<perlretut> +[ List each test improvement as an =item entry ] =over 4 =item * -Clarify metacharacters. +XXX =back -=head3 L<perlrun> - -=over 4 +=head1 Platform Support -=item * +XXX Any changes to platform support should be listed in the sections below. -Clarify the differences between B<< -M >> and B<< -m >>. -L<[perl #131518]|https://rt.perl.org/Ticket/Display.html?id=131518> +[ Within the sections, list each platform as an =item entry with specific +changes as paragraphs below it. ] -=back +=head2 New Platforms -=head3 L<perlsec> +XXX List any platforms that this version of perl compiles on, that previous +versions did not. These will either be enabled by new files in the F<hints/> +directories, or new subdirectories and F<README> files at the top level of the +source tree. =over 4 -=item * - -The documentation about set-id scripts has been updated and revised. -L<[perl #74142]|https://rt.perl.org/Ticket/Display.html?id=74142> - -=item * +=item XXX-some-platform -A section about using C<sudo> to run Perl scripts has been added. +XXX =back -=head3 L<perlsyn> - -=over 4 - -=item * - -The section "Truth and Falsehood" in L<perlsyn> has been removed from -that document, where it didn't belong, and merged into the existing -paragraph on the same topic in L<perldata>. - -=item * - -The means to disambiguate between code blocks and hash constructors, -already documented in L<perlref>, are now documented in L<perlsyn> too. -L<[perl #130958]|https://rt.perl.org/Ticket/Display.html?id=130958> - -=back +=head2 Discontinued Platforms -=head3 L<perluniprops> +XXX List any platforms that this version of perl no longer compiles on. =over 4 -=item * +=item XXX-some-platform -L<perluniprops> has been updated to note that C<\p{Word}> now includes -code points matching the C<\p{Join_Control}> property. The change to -the property was made in Perl 5.18, but not documented until now. There -are currently only two code points that match this property U+200C (ZERO -WIDTH NON-JOINER) and U+200D (ZERO WIDTH JOINER). - -=item * - -For each binary table or property, the documentation now includes which -characters in the range C<\x00-\xFF> it matches, as well as a list of -the first few ranges of code points matched above that. +XXX =back -=head3 L<perlvar> - -=over 4 - -=item * - -The entry for C<$+> in perlvar has been expanded upon to describe handling of -multiply-named capturing groups. - -=back +=head2 Platform-Specific Notes -=head3 L<perlfunc>, L<perlop>, L<perlsyn> +XXX List any changes for specific platforms. This could include configuration +and compilation changes or changes in portability/compatibility. However, +changes within modules for platforms should generally be listed in the +L</Modules and Pragmata> section. =over 4 -=item * +=item XXX-some-platform -In various places, improve the documentation of the special cases -in the condition expression of a while loop, such as implicit C<defined> -and assignment to C<$_>. -L<[perl #132644]|https://rt.perl.org/Ticket/Display.html?id=132644> +XXX =back -=head1 Diagnostics - -The following additions or changes have been made to diagnostic output, -including warnings and fatal error messages. For the complete list of -diagnostic messages, see L<perldiag>. +=head1 Internal Changes -=head2 New Diagnostics +XXX Changes which affect the interface available to C<XS> code go here. Other +significant internal changes for future core maintainers should be noted as +well. -=head3 New Errors +[ List each change as an =item entry ] =over 4 =item * -L<Can't "goto" into a "given" block|perldiag/"Can't E<quot>gotoE<quot> into a E<quot>givenE<quot> block"> - -(F) A "goto" statement was executed to jump into the middle of a C<given> -block. You can't get there from here. See L<perlfunc/goto>. - -=item * - -L<Can't "goto" into a binary or list expression|perldiag/"Can't E<quot>gotoE<quot> into a binary or list expression"> - -Use of C<goto> to jump into the parameter of a binary or list operator has -been prohibited, to prevent crashes and stack corruption. -L<[perl #130936]|https://rt.perl.org/Ticket/Display.html?id=130936> - -You may only enter the I<first> argument of an operator that takes a fixed -number of arguments, since this is a case that will not cause stack -corruption. -L<[perl #132854]|https://rt.perl.org/Ticket/Display.html?id=132854> +XXX =back -=head3 New Warnings - -=over 4 - -=item * - -L<Old package separator used in string|perldiag/"Old package separator used in string"> - -(W syntax) You used the old package separator, "'", in a variable -named inside a double-quoted string; e.g., C<"In $name's house">. This -is equivalent to C<"In $name::s house">. If you meant the former, put -a backslash before the apostrophe (C<"In $name\'s house">). - -=item * - -L<perldiag/Locale '%s' contains (at least) the following characters which -have unexpected meanings: %s The Perl program will use the expected -meanings> +=head1 Selected Bug Fixes -=back +XXX Important bug fixes in the core language are summarized here. Bug fixes in +files in F<ext/> and F<lib/> are best summarized in L</Modules and Pragmata>. -=head2 Changes to Existing Diagnostics +[ List each fix as an =item entry ] =over 4 =item * -A false-positive warning that was issued when using a -numerically-quantified sub-pattern in a recursive regex has been -silenced. L<[perl #131868]|https://rt.perl.org/Public/Bug/Display.html?id=131868> - -=item * - -The warning about useless use of a concatenation operator in void context -is now generated for expressions with multiple concatenations, such as -C<$a.$b.$c>, which used to mistakenly not warn. -L<[perl #6997]|https://rt.perl.org/Ticket/Display.html?id=6997> - -=item * - -Warnings that a variable or subroutine "masks earlier declaration in same -...", or that an C<our> variable has been redeclared, have been moved to a -new warnings category "shadow". Previously they were in category "misc". - -=item * - -The deprecation warning from C<Sys::Hostname::hostname()> saying that -it doesn't accept arguments now states the Perl version in which the -warning will be upgraded to an error. -L<[perl #124349]|https://rt.perl.org/Ticket/Display.html?id=124349> - -=item * - -The L<perldiag> entry for the error regarding a set-id script has been -expanded to make clear that the error is reporting a specific security -vulnerability, and to advise how to fix it. - -=item * - -The C<< Unable to flush stdout >> error message was missing a trailing -newline. [debian #875361] +XXX =back -=head1 Utility Changes - -=head2 L<perlbug> - -=over 4 +=head1 Known Problems -=item * +XXX Descriptions of platform agnostic bugs we know we can't fix go here. Any +tests that had to be C<TODO>ed for the release would be noted here. Unfixed +platform specific bugs also go here. -C<--help> and C<--version> options have been added. - -=back - -=head1 Configuration and Compilation +[ List each fix as an =item entry ] =over 4 -=item * C89 requirement - -Perl has been documented as requiring a C89 compiler to build since October -1998. A variety of simplifications have now been made to Perl's internals to -rely on the features specified by the C89 standard. We believe that this -internal change hasn't altered the set of platforms that Perl builds on, but -please report a bug if Perl now has new problems building on your platform. - =item * -On GCC, C<-Werror=pointer-arith> is now enabled by default, -disallowing arithmetic on void and function pointers. - -=item * - -Where an HTML version of the documentation is installed, the HTML -documents now use relative links to refer to each other. Links from -the index page of L<perlipc> to the individual section documents are -now correct. -L<[perl #110056]|https://rt.perl.org/Ticket/Display.html?id=110056> - -=item * - -F<lib/unicore/mktables> now correctly canonicalizes the names of the -dependencies stored in the files it generates. - -F<regen/mk_invlists.pl>, unlike the other F<regen/*.pl> scripts, used -C<$0> to name itself in the dependencies stored in the files it -generates. It now uses a literal so that the path stored in the -generated files doesn't depend on how F<regen/mk_invlists.pl> is -invoked. - -This lack of canonical names could cause test failures in F<t/porting/regen.t>. -L<[perl #132925]|https://rt.perl.org/Ticket/Display.html?id=132925> - -=item * New probes - -=over 2 - -=item HAS_BUILTIN_ADD_OVERFLOW - -=item HAS_BUILTIN_MUL_OVERFLOW - -=item HAS_BUILTIN_SUB_OVERFLOW - -=item HAS_THREAD_SAFE_NL_LANGINFO_L - -=item HAS_LOCALECONV_L - -=item HAS_MBRLEN - -=item HAS_MBRTOWC - -=item HAS_MEMRCHR - -=item HAS_NANOSLEEP - -=item HAS_STRNLEN - -=item HAS_STRTOLD_L - -=item I_WCHAR - -=back +XXX =back -=head1 Testing +=head1 Errata From Previous Releases =over 4 =item * -Testing of the XS-APItest directory is now done in parallel, where -applicable. - -=item * - -Perl now includes a default F<.travis.yml> file for Travis CI testing -on github mirrors. -L<[perl #123981]|https://rt.perl.org/Ticket/Display.html?id=123981> - -=item * - -The watchdog timer count in F<re/pat_psycho.t> can now be overridden. - -This test can take a long time to run, so there is a timer to keep -this in check (currently, 5 minutes). This commit adds checking -the environment variable C<< PERL_TEST_TIME_OUT_FACTOR >>; if set, -the time out setting is multiplied by its value. - -=item * - -F<harness> no longer waits for 30 seconds when running F<t/io/openpid.t>. -L<[perl #121028]|https://rt.perl.org/Ticket/Display.html?id=121028> -L<[perl #132867]|https://rt.perl.org/Ticket/Display.html?id=132867> +XXX Add anything here that we forgot to add, or were mistaken about, in +the perldelta of a previous release. =back -=head1 Packaging - -For the past few years we have released perl using three different archive -formats: bzip (C<.bz2>), LZMA2 (C<.xz>) and gzip (C<.gz>). Since xz compresses -better and decompresses faster, and gzip is more compatible and uses less -memory, we have dropped the C<.bz2> archive format with this release. -(If this poses a problem, do let us know; see L</Reporting Bugs>, below.) - -=head1 Platform Support - -=head2 Discontinued Platforms - -=over 4 - -=item PowerUX / Power MAX OS - -Compiler hints and other support for these apparently long-defunct -platforms has been removed. - -=back - -=head2 Platform-Specific Notes - -=over 4 - -=item CentOS - -Compilation on CentOS 5 is now fixed. - -=item Cygwin - -A build with the quadmath library can now be done on Cygwin. - -=item Darwin - -Perl now correctly uses reentrant functions, like C<asctime_r>, on -versions of Darwin that have support for them. - -=item FreeBSD - -FreeBSD's F<< /usr/share/mk/sys.mk >> specifies C<< -O2 >> for -architectures other than ARM and MIPS. By default, perl is now compiled -with the same optimization levels. +=head1 Obituary -=item VMS - -Several fix-ups for F<configure.com>, marking function VMS has -(or doesn't have). - -CRTL features can now be set by embedders before invoking Perl by using -the C<decc$feature_set> and C<decc$feature_set_value> functions. -Previously any attempt to set features after image initialization were -ignored. - -=item Windows - -=over 4 - -=item * - -Support for compiling perl on Windows using Microsoft Visual Studio 2017 -(containing Visual C++ 14.1) has been added. - -=item * - -Visual C++ compiler version detection has been improved to work on non-English -language systems. - -=item * - -We now set C<$Config{libpth}> correctly for 64-bit builds using Visual C++ -versions earlier than 14.1. - -=back - -=back - -=head1 Internal Changes - -=over 4 - -=item * - -A new optimisation phase has been added to the compiler, -C<optimize_optree()>, which does a top-down scan of a complete optree -just before the peephole optimiser is run. This phase is not currently -hookable. - -=item * - -An C<OP_MULTICONCAT> op has been added. At C<optimize_optree()> time, a -chain of C<OP_CONCAT> and C<OP_CONST> ops, together optionally with an -C<OP_STRINGIFY> and/or C<OP_SASSIGN>, are combined into a single -C<OP_MULTICONCAT> op. The op is of type C<UNOP_AUX>, and the aux array -contains the argument count, plus a pointer to a constant string and a set -of segment lengths. For example with - - my $x = "foo=$foo, bar=$bar\n"; - -the constant string would be C<"foo=, bar=\n"> and the segment lengths -would be (4,6,1). If the string contains characters such as C<\x80>, whose -representation changes under utf8, two sets of strings plus lengths are -precomputed and stored. - -=item * - -Direct access to L<C<PL_keyword_plugin>|perlapi/PL_keyword_plugin> is not -safe in the presence of multithreading. A new -L<C<wrap_keyword_plugin>|perlapi/wrap_keyword_plugin> function has been -added to allow XS modules to safely define custom keywords even when -loaded from a thread, analogous to L<C<PL_check>|perlapi/PL_check> / -L<C<wrap_op_checker>|perlapi/wrap_op_checker>. - -=item * - -The C<PL_statbuf> interpreter variable has been removed. - -=item * - -The deprecated function C<to_utf8_case()>, accessible from XS code, has -been removed. - -=item * - -A new function -L<C<is_utf8_invariant_string_loc()>|perlapi/is_utf8_invariant_string_loc> -has been added that is like -L<C<is_utf8_invariant_string()>|perlapi/is_utf8_invariant_string> -but takes an extra pointer parameter into which is stored the location -of the first variant character, if any are found. - -=item * - -A new function, L<C<Perl_langinfo()>|perlapi/Perl_langinfo> has been -added. It is an (almost) drop-in replacement for the system -C<nl_langinfo(3)>, but works on platforms that lack that; as well as -being more thread-safe, and hiding some gotchas with locale handling -from the caller. Code that uses this, needn't use L<C<localeconv(3)>> -(and be affected by the gotchas) to find the decimal point, thousands -separator, or currency symbol. See L<perlapi/Perl_langinfo>. - -=item * - -A new API function L<C<sv_rvunweaken()>|perlapi/sv_rvunweaken> has -been added to complement L<C<sv_rvweaken()>|perlapi/sv_rvweaken>. -The implementation was taken from L<Scalar::Util/unweaken>. - -=item * - -A new flag, C<SORTf_UNSTABLE>, has been added. This will allow a -future commit to make mergesort unstable when the user specifies ‘no -sort stable’, since it has been decided that mergesort should remain -stable by default. - -=item * - -XS modules can now automatically get reentrant versions of system -functions on threaded perls. - -By adding - - #define PERL_REENTRANT - -near the beginning of an C<XS> file, it will be compiled so that -whatever reentrant functions perl knows about on that system will -automatically and invisibly be used instead of the plain, non-reentrant -versions. For example, if you write C<getpwnam()> in your code, on a -system that has C<getpwnam_r()> all calls to the former will be translated -invisibly into the latter. This does not happen except on threaded -perls, as they aren't needed otherwise. Be aware that which functions -have reentrant versions varies from system to system. - -=item * - -The C<PERL_NO_OP_PARENT> build define is no longer supported, which means -that perl is now always built with C<PERL_OP_PARENT> enabled. - -=item * - -The format and content of the non-utf8 transliteration table attached to -the C<op_pv> field of C<OP_TRANS>/C<OP_TRANSR> ops has changed. It's now a -C<struct OPtrans_map>. - -=item * - -A new compiler C<#define>, C<dTHX_DEBUGGING>. has been added. This is -useful for XS or C code that only need the thread context because their -debugging statements that get compiled only under C<-DDEBUGGING> need -one. - -=item * - -A new API function L<perlapi/Perl_setlocale> has been added. - -=item * - -L<perlapi/sync_locale> has been revised to return a boolean as to -whether the system was using the global locale or not. - -=item * - -A new kind of magic scalar, called a "nonelem" scalar, has been introduced. -It is stored in an array to denote a non-existent element, whenever such an -element is accessed in a potential lvalue context. It replaces the -existing "defelem" (deferred element) magic wherever this is possible, -being significantly more efficient. This means that -C<some_sub($sparse_array[$nonelem])> no longer has to create a new magic -defelem scalar each time, as long as the element is within the array. - -It partially fixes the rare bug of deferred elements getting out of synch -with their arrays when the array is shifted or unshifted. -L<[perl #132729]|https://rt.perl.org/Ticket/Display.html?id=132729> - -=back - -=head1 Selected Bug Fixes - -=over 4 - -=item * - -List assignment (C<aassign>) could in some rare cases allocate an -entry on the mortals stack and leave the entry uninitialized, leading to -possible crashes. -L<[perl #131570]|https://rt.perl.org/Ticket/Display.html?id=131570> - -=item * - -Attempting to apply an attribute to an C<our> variable where a -function of that name already exists could result in a NULL pointer -being supplied where an SV was expected, crashing perl. -L<[perl #131597]|https://rt.perl.org/Ticket/Display.html?id=131597> - -=item * - -C<split ' '> now correctly handles the argument being split when in the -scope of the L<< C<unicode_strings>|feature/"The 'unicode_strings' feature" ->> feature. Previously, when a string using the single-byte internal -representation contained characters that are whitespace by Unicode rules but -not by ASCII rules, it treated those characters as part of fields rather -than as field separators. -L<[perl #130907]|https://rt.perl.org/Ticket/Display.html?id=130907> - -=item * - -Several built-in functions previously had bugs that could cause them to -write to the internal stack without allocating room for the item being -written. In rare situations, this could have led to a crash. These bugs have -now been fixed, and if any similar bugs are introduced in future, they will -be detected automatically in debugging builds. - -These internal stack usage checks introduced are also done -by the C<entersub> operator when calling XSUBs. This means we can -report which XSUB failed to allocate enough stack space. -L<[perl #131975]|https://rt.perl.org/Public/Bug/Display.html?id=131975> - -=item * - -Using a symbolic ref with postderef syntax as the key in a hash lookup was -yielding an assertion failure on debugging builds. -L<[perl #131627]|https://rt.perl.org/Ticket/Display.html?id=131627> - -=item * - -Array and hash variables whose names begin with a caret now admit indexing -inside their curlies when interpolated into strings, as in C<< -"${^CAPTURE[0]}" >> to index C<@{^CAPTURE}>. -L<[perl #131664]|https://rt.perl.org/Ticket/Display.html?id=131664> - -=item * - -Fetching the name of a glob that was previously UTF-8 but wasn't any -longer would return that name flagged as UTF-8. -L<[perl #131263]|https://rt.perl.org/Ticket/Display.html?id=131263> - -=item * - -The perl C<sprintf()> function (via the underlying C function -C<Perl_sv_vcatpvfn_flags()>) has been heavily reworked to fix many minor -bugs, including the integer wrapping of large width and precision -specifiers and potential buffer overruns. It has also been made faster in -many cases. - -=item * - -Exiting from an C<eval>, whether normally or via an exception, now always -frees temporary values (possibly calling destructors) I<before> setting -C<$@>. For example: - - sub DESTROY { eval { die "died in DESTROY"; } } - eval { bless []; }; - # $@ used to be equal to "died in DESTROY" here; it's now "". - -=item * - -Fixed a duplicate symbol failure with C<-flto -mieee-fp> builds. -F<pp.c> defined C<_LIB_VERSION> which C<-lieee> already defines. -L<[perl #131786]|https://rt.perl.org/Ticket/Display.html?id=131786> - -=item * - -The tokenizer no longer consumes the exponent part of a floating -point number if it's incomplete. -L<[perl #131725]|https://rt.perl.org/Ticket/Display.html?id=131725> - -=item * - -On non-threaded builds, for C<m/$null/> where C<$null> is an empty -string is no longer treated as if the C</o> flag was present when the -previous matching match operator included the C</o> flag. The -rewriting used to implement this behavior could confuse the -interpreter. This matches the behaviour of threaded builds. -L<[perl #124368]|https://rt.perl.org/Ticket/Display.html?id=124368> - -=item * - -Parsing a C<sub> definition could cause a use after free if the C<sub> -keyword was followed by whitespace including newlines (and comments.) -L<[perl #131836]|https://rt.perl.org/Public/Bug/Display.html?id=131836> - -=item * - -The tokenizer now correctly adjusts a parse pointer when skipping -whitespace in a C<< ${identifier} >> construct. -L<[perl #131949]|https://rt.perl.org/Public/Bug/Display.html?id=131949> - -=item * - -Accesses to C<${^LAST_FH}> no longer assert after using any of a -variety of I/O operations on a non-glob. -L<[perl #128263]|https://rt.perl.org/Public/Bug/Display.html?id=128263> - -=item * - -The XS-level C<Copy()>, C<Move()>, C<Zero()> macros and their variants now -assert if the pointers supplied are C<NULL>. ISO C considers -supplying NULL pointers to the functions these macros are built upon -as undefined behaviour even when their count parameters are zero. -Based on these assertions and the original bug report three macro -calls were made conditional. -L<[perl #131746]|https://rt.perl.org/Public/Bug/Display.html?id=131746> -L<[perl #131892]|https://rt.perl.org/Public/Bug/Display.html?id=131892> - -=item * - -Only the C<=> operator is permitted for defining defaults for -parameters in subroutine signatures. Previously other assignment -operators, e.g. C<+=>, were also accidentally permitted. -L<[perl #131777]|https://rt.perl.org/Public/Bug/Display.html?id=131777> - -=item * - -Package names are now always included in C<:prototype> warnings -L<[perl #131833]|https://rt.perl.org/Public/Bug/Display.html?id=131833> - -=item * - -The C<je_old_stack_hwm> field, previously only found in the C<jmpenv> -structure on debugging builds, has been added to non-debug builds as -well. This fixes an issue with some CPAN modules caused by the size of -this structure varying between debugging and non-debugging builds. -L<[perl #131942]|https://rt.perl.org/Public/Bug/Display.html?id=131942> - -=item * - -The arguments to the C<ninstr()> macro are now correctly parenthesized. - -=item * - -A NULL pointer dereference in the C<S_regmatch()> function has been -fixed. -L<[perl #132017]|https://rt.perl.org/Public/Bug/Display.html?id=132017> - -=item * - -Calling L<exec PROGRAM LIST|perlfunc/exec PROGRAM LIST> with an empty C<LIST> -has been fixed. This should call C<execvp()> with an empty C<argv> array -(containing only the terminating C<NULL> pointer), but was instead just -returning false (and not setting L<C<$!>|perlvar/$!>). -L<[perl #131730]|https://rt.perl.org/Public/Bug/Display.html?id=131730> - -=item * - -The C<gv_fetchmeth_sv> C function stopped working properly in Perl 5.22 when -fetching a constant with a UTF-8 name if that constant subroutine was stored in -the stash as a simple scalar reference, rather than a full typeglob. This has -been corrected. - -=item * - -Single-letter debugger commands followed by an argument which starts with -punctuation (e.g. C<p$^V> and C<x@ARGV>) now work again. They had been -wrongly requiring a space between the command and the argument. -L<[perl #120174]|https://rt.perl.org/Public/Bug/Display.html?id=120174> - -=item * - -L<splice|perlfunc/splice ARRAY,OFFSET,LENGTH,LIST> now throws an exception -("Modification of a read-only value attempted") when modifying a read-only -array. Until now it had been silently modifying the array. The new behaviour -is consistent with the behaviour of L<push|perlfunc/push ARRAY,LIST> and -L<unshift|perlfunc/unshift ARRAY,LIST>. -L<[perl #131000]|https://rt.perl.org/Public/Bug/Display.html?id=131000> - -=item * - -C<stat()>, C<lstat()>, and file test operators now fail if given a -filename containing a nul character, in the same way that C<open()> -already fails. - -=item * - -C<stat()>, C<lstat()>, and file test operators now reliably set C<$!> when -failing due to being applied to a closed or otherwise invalid file handle. - -=item * - -File test operators for Unix permission bits that don't exist on a -particular platform, such as C<-k> (sticky bit) on Windows, now check that -the file being tested exists before returning the blanket false result, -and yield the appropriate errors if the argument doesn't refer to a file. - -=item * - -Fixed a 'read before buffer' overrun when parsing a range starting with -C<\N{}> at the beginning of the character set for the transliteration -operator. -L<[perl #132245]|https://rt.perl.org/Ticket/Display.html?id=132245> - -=item * - -Fixed a leaked scalar when parsing an empty C<\N{}> at compile-time. -L<[perl #132245]|https://rt.perl.org/Ticket/Display.html?id=132245> - -=item * - -Calling C<do $path> on a directory or block device now yields a meaningful -error code in C<$!>. -L<[perl #125774]|https://rt.perl.org/Ticket/Display.html?id=125774> - -=item * - -Regexp substitution using an overloaded replacement value that provides -a tainted stringification now correctly taints the resulting string. -L<[perl #115266]|https://rt.perl.org/Ticket/Display.html?id=115266> - -=item * - -Lexical sub declarations in C<do> blocks such as C<do { my sub lex; 123 }> -could corrupt the stack, erasing items already on the stack in the -enclosing statement. This has been fixed. -L<[perl #132442]|https://rt.perl.org/Ticket/Display.html?id=132442> - -=item * - -C<pack> and C<unpack> can now handle repeat counts and lengths that -exceed two billion. -L<[perl #119367]|https://rt.perl.org/Ticket/Display.html?id=119367> - -=item * - -Digits past the radix point in octal and binary floating point literals -now have the correct weight on platforms where a floating point -significand doesn't fit into an integer type. - -=item * - -The canonical truth value no longer has a spurious special meaning as a -callable subroutine. It used to be a magic placeholder for a missing -C<import> or C<unimport> method, but is now treated like any other string -C<1>. -L<[perl #126042]|https://rt.perl.org/Ticket/Display.html?id=126042> - -=item * - -C<system> now reduces its arguments to strings in the parent process, so -any effects of stringifying them (such as overload methods being called -or warnings being emitted) are visible in the way the program expects. -L<[perl #121105]|https://rt.perl.org/Ticket/Display.html?id=121105> - -=item * - -The C<readpipe()> built-in function now checks at compile time that -it has only one parameter expression, and puts it in scalar context, -thus ensuring that it doesn't corrupt the stack at runtime. -L<[perl #4574]|https://rt.perl.org/Ticket/Display.html?id=4574> - -=item * - -C<sort> now performs correct reference counting when aliasing C<$a> and -C<$b>, thus avoiding premature destruction and leakage of scalars if they -are re-aliased during execution of the sort comparator. -L<[perl #92264]|https://rt.perl.org/Ticket/Display.html?id=92264> - -=item * - -C<reverse> with no operand, reversing C<$_> by default, is no longer in -danger of corrupting the stack. -L<[perl #132544]|https://rt.perl.org/Ticket/Display.html?id=132544> - -=item * - -C<exec>, C<system>, et al are no longer liable to have their argument -lists corrupted by reentrant calls and by magic such as tied scalars. -L<[perl #129888]|https://rt.perl.org/Ticket/Display.html?id=129888> - -=item * - -Perl's own C<malloc> no longer gets confused by attempts to allocate -more than a gigabyte on a 64-bit platform. -L<[perl #119829]|https://rt.perl.org/Ticket/Display.html?id=119829> - -=item * - -Stacked file test operators in a sort comparator expression no longer -cause a crash. -L<[perl #129347]|https://rt.perl.org/Ticket/Display.html?id=129347> - -=item * - -An identity C<tr///> transformation on a reference is no longer mistaken -for that reference for the purposes of deciding whether it can be -assigned to. -L<[perl #130578]|https://rt.perl.org/Ticket/Display.html?id=130578> - -=item * - -Lengthy hexadecimal, octal, or binary floating point literals no -longer cause undefined behaviour when parsing digits that are of such -low significance that they can't affect the floating point value. -L<[perl #131894]|https://rt.perl.org/Ticket/Display.html?id=131894> - -=item * - -C<open $$scalarref...> and similar invocations no longer leak the file -handle. -L<[perl #115814]|https://rt.perl.org/Ticket/Display.html?id=115814> - -=item * - -Some convoluted kinds of regexp no longer cause an arithmetic overflow -when compiled. -L<[perl #131893]|https://rt.perl.org/Ticket/Display.html?id=131893> - -=item * - -The default typemap, by avoiding C<newGVgen>, now no longer leaks when -XSUBs return file handles (C<PerlIO *> or C<FILE *>). -L<[perl #115814]|https://rt.perl.org/Ticket/Display.html?id=115814> - -=item * - -Creating a C<BEGIN> block as an XS subroutine with a prototype no longer -crashes because of the early freeing of the subroutine. - -=item * - -The C<printf> format specifier C<%.0f> no longer rounds incorrectly -L<[perl #47602]|https://rt.perl.org/Ticket/Display.html?id=47602>, -and now shows the correct sign for a negative zero. - -=item * - -Fixed an issue where the error C<< Scalar value @arrayname[0] better -written as $arrayname >> would give an error C<< Cannot printf Inf with 'c' >> -when arrayname starts with C<< Inf >>. -L<[perl #132645]|https://rt.perl.org/Ticket/Display.html?id=132645> - -=item * - -The Perl implementation of C<< getcwd() >> in C<< Cwd >> in the PathTools -distribution now behaves the same as XS implementation on errors: it -returns an error, and sets C<< $! >>. -L<[perl #132648]|https://rt.perl.org/Ticket/Display.html?id=132648> - -=item * - -Vivify array elements when putting them on the stack. -Fixes L<[perl #8910]|https://rt.perl.org/Ticket/Display.html?id=8910> -(reported in April 2002). - -=item * - -Fixed parsing of braced subscript after parens. Fixes -L<[perl #8045]|https://rt.perl.org/Ticket/Display.html?id=8045> -(reported in December 2001). - -=item * - -C<tr/non_utf8/long_non_utf8/c> could give the wrong results when the -length of the replacement character list was greater than 0x7fff. - -=item * - -C<tr/non_utf8/non_utf8/cd> failed to add the implied -C<\x{100}-\x{7fffffff}> to the search character list. - -=item * - -Compilation failures within "perl-within-perl" constructs, such as with -string interpolation and the right part of C<s///e>, now cause -compilation to abort earlier. - -Previously compilation could continue in order to report other errors, -but the failed sub-parse could leave partly parsed constructs on the -parser shift-reduce stack, confusing the parser, leading to perl -crashes. -L<[perl #125351]|https://rt.perl.org/Ticket/Display.html?id=125351> - -=item * - -On threaded perls where the decimal point (radix) character is not a -dot, it has been possible for a race to occur between threads when one -needs to use the real radix character (such as with C<sprintf>). This has -now been fixed by use of a mutex on systems without thread-safe locales, -and the problem just doesn't come up on those with thread-safe locales. - -=item * - -Errors while compiling a regex character class could sometime trigger an -assertion failure. -L<[perl #132163]|https://rt.perl.org/Ticket/Display.html?id=132163> - -=back +XXX If any significant core contributor or member of the CPAN community has +died, add a short obituary here. =head1 Acknowledgements -Perl 5.28.0 represents approximately 13 months of development since Perl -5.26.0 and contains approximately 730,000 lines of changes across 2,200 -files from 77 authors. - -Excluding auto-generated files, documentation and release tools, there were -approximately 580,000 lines of changes to 1,300 .pm, .t, .c and .h files. - -Perl continues to flourish into its fourth decade thanks to a vibrant -community of users and developers. The following people are known to have -contributed the improvements that became Perl 5.28.0: - -Aaron Crane, Abigail, Ævar Arnfjörð Bjarmason, Alberto Simões, Alexandr -Savca, Andrew Fresh, Andy Dougherty, Andy Lester, Aristotle Pagaltzis, Ask -Bjørn Hansen, Chris 'BinGOs' Williams, Craig A. Berry, Dagfinn Ilmari -Mannsåker, Dan Collins, Daniel Dragan, David Cantrell, David Mitchell, -Dmitry Ulanov, Dominic Hargreaves, E. Choroba, Eric Herman, Eugen Konkov, -Father Chrysostomos, Gene Sullivan, George Hartzell, Graham Knop, Harald -Jörg, H.Merijn Brand, Hugo van der Sanden, Jacques Germishuys, James E -Keenan, Jarkko Hietaniemi, Jerry D. Hedden, J. Nick Koston, John Lightsey, -John Peacock, John P. Linderman, John SJ Anderson, Karen Etheridge, Karl -Williamson, Ken Brown, Ken Cotterill, Leon Timmermans, Lukas Mai, Marco -Fontani, Marc-Philip Werner, Matthew Horsfall, Neil Bowers, Nicholas Clark, -Nicolas R., Niko Tyni, Pali, Paul Marquess, Peter John Acklam, Reini Urban, -Renee Baecker, Ricardo Signes, Robin Barker, Sawyer X, Scott Lanning, Sergey -Aleynikov, Shirakata Kentaro, Shoichi Kaji, Slaven Rezic, Smylers, Steffen -Müller, Steve Hay, Sullivan Beck, Thomas Sibley, Todd Rinaldo, Tomasz -Konojacki, Tom Hukins, Tom Wyant, Tony Cook, Vitali Peil, 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. +XXX Generate this with: + + perl Porting/acknowledgements.pl v5.27.11..HEAD =head1 Reporting Bugs diff --git a/vms/descrip_mms.template b/vms/descrip_mms.template index a9940f09fc..6da3727d43 100644 --- a/vms/descrip_mms.template +++ b/vms/descrip_mms.template @@ -307,7 +307,7 @@ utils : $(utils1) $(utils2) $(utils3) $(utils4) $(utils5) extra.pods : miniperl @ @extra_pods.com -PERLDELTA_CURRENT = [.pod]perl5280delta.pod +PERLDELTA_CURRENT = [.pod]perl5281delta.pod $(PERLDELTA_CURRENT) : [.pod]perldelta.pod Copy/NoConfirm/Log $(MMS$SOURCE) $(PERLDELTA_CURRENT) diff --git a/win32/GNUmakefile b/win32/GNUmakefile index 495f3825c9..8086cfc8cc 100644 --- a/win32/GNUmakefile +++ b/win32/GNUmakefile @@ -1679,7 +1679,7 @@ utils: $(HAVEMINIPERL) ..\utils\Makefile copy ..\README.tw ..\pod\perltw.pod copy ..\README.vos ..\pod\perlvos.pod copy ..\README.win32 ..\pod\perlwin32.pod - copy ..\pod\perldelta.pod ..\pod\perl5280delta.pod + copy ..\pod\perldelta.pod ..\pod\perl5281delta.pod $(MINIPERL) -I..\lib $(PL2BAT) $(UTILS) $(MINIPERL) -I..\lib ..\autodoc.pl .. $(MINIPERL) -I..\lib ..\pod\perlmodlib.PL -q .. @@ -1777,7 +1777,7 @@ distclean: realclean -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS -cd $(PODDIR) && del /f *.html *.bat roffitall \ - perl5280delta.pod perlaix.pod perlamiga.pod perlandroid.pod \ + perl5281delta.pod perlaix.pod perlamiga.pod perlandroid.pod \ perlapi.pod perlbs2000.pod perlce.pod perlcn.pod perlcygwin.pod \ perldos.pod perlfreebsd.pod perlhaiku.pod perlhpux.pod \ perlhurd.pod perlintern.pod perlirix.pod perljp.pod perlko.pod \ diff --git a/win32/Makefile b/win32/Makefile index 610782591d..6c5bc4d8c1 100644 --- a/win32/Makefile +++ b/win32/Makefile @@ -1282,7 +1282,7 @@ utils: $(PERLEXE) ..\utils\Makefile copy ..\README.tw ..\pod\perltw.pod copy ..\README.vos ..\pod\perlvos.pod copy ..\README.win32 ..\pod\perlwin32.pod - copy ..\pod\perldelta.pod ..\pod\perl5280delta.pod + copy ..\pod\perldelta.pod ..\pod\perl5281delta.pod cd ..\win32 $(PERLEXE) $(PL2BAT) $(UTILS) $(MINIPERL) -I..\lib ..\autodoc.pl .. @@ -1382,7 +1382,7 @@ distclean: realclean -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS -cd $(PODDIR) && del /f *.html *.bat roffitall \ - perl5280delta.pod perlaix.pod perlamiga.pod perlandroid.pod \ + perl5281delta.pod perlaix.pod perlamiga.pod perlandroid.pod \ perlapi.pod perlbs2000.pod perlce.pod perlcn.pod perlcygwin.pod \ perldos.pod perlfreebsd.pod perlhaiku.pod perlhpux.pod \ perlhurd.pod perlintern.pod perlirix.pod perljp.pod perlko.pod \ diff --git a/win32/makefile.mk b/win32/makefile.mk index b1dd13f1c0..7d409bbbc6 100644 --- a/win32/makefile.mk +++ b/win32/makefile.mk @@ -1622,7 +1622,7 @@ utils: $(HAVEMINIPERL) ..\utils\Makefile copy ..\README.tw ..\pod\perltw.pod copy ..\README.vos ..\pod\perlvos.pod copy ..\README.win32 ..\pod\perlwin32.pod - copy ..\pod\perldelta.pod ..\pod\perl5280delta.pod + copy ..\pod\perldelta.pod ..\pod\perl5281delta.pod $(MINIPERL) -I..\lib $(PL2BAT) $(UTILS) $(MINIPERL) -I..\lib ..\autodoc.pl .. $(MINIPERL) -I..\lib ..\pod\perlmodlib.PL -q .. @@ -1720,7 +1720,7 @@ distclean: realclean -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS -cd $(PODDIR) && del /f *.html *.bat roffitall \ - perl5280delta.pod perlaix.pod perlamiga.pod perlandroid.pod \ + perl5281delta.pod perlaix.pod perlamiga.pod perlandroid.pod \ perlapi.pod perlbs2000.pod perlce.pod perlcn.pod perlcygwin.pod \ perldos.pod perlfreebsd.pod perlhaiku.pod perlhpux.pod \ perlhurd.pod perlintern.pod perlirix.pod perljp.pod perlko.pod \ diff --git a/win32/pod.mak b/win32/pod.mak index 4638153d9d..4b21cd9448 100644 --- a/win32/pod.mak +++ b/win32/pod.mak @@ -53,7 +53,7 @@ POD = perl.pod \ perl5260delta.pod \ perl5261delta.pod \ perl5262delta.pod \ - perl5280delta.pod \ + perl5281delta.pod \ perl561delta.pod \ perl56delta.pod \ perl581delta.pod \ @@ -202,7 +202,7 @@ MAN = perl.man \ perl5260delta.man \ perl5261delta.man \ perl5262delta.man \ - perl5280delta.man \ + perl5281delta.man \ perl561delta.man \ perl56delta.man \ perl581delta.man \ @@ -351,7 +351,7 @@ HTML = perl.html \ perl5260delta.html \ perl5261delta.html \ perl5262delta.html \ - perl5280delta.html \ + perl5281delta.html \ perl561delta.html \ perl56delta.html \ perl581delta.html \ @@ -500,7 +500,7 @@ TEX = perl.tex \ perl5260delta.tex \ perl5261delta.tex \ perl5262delta.tex \ - perl5280delta.tex \ + perl5281delta.tex \ perl561delta.tex \ perl56delta.tex \ perl581delta.tex \ |