diff options
author | Ricardo Signes <rjbs@cpan.org> | 2016-04-07 08:39:20 -0400 |
---|---|---|
committer | Ricardo Signes <rjbs@cpan.org> | 2016-04-10 19:38:48 -0400 |
commit | f3ed8cbf4370a4d22345bef0e4d1f5614133cf0b (patch) | |
tree | 9a424ca67d58f706eea02d4f9fabe8523db70c96 | |
parent | ac96e11d353e84778fd73e5cb2fe4a7f22b58f5f (diff) | |
download | perl-f3ed8cbf4370a4d22345bef0e4d1f5614133cf0b.tar.gz |
put perl5240delta into place
-rw-r--r-- | Porting/perl5240delta.pod | 1741 | ||||
-rw-r--r-- | pod/perldelta.pod | 1659 |
2 files changed, 1489 insertions, 1911 deletions
diff --git a/Porting/perl5240delta.pod b/Porting/perl5240delta.pod deleted file mode 100644 index 28a0ee89c9..0000000000 --- a/Porting/perl5240delta.pod +++ /dev/null @@ -1,1741 +0,0 @@ -=encoding utf8 - -=head1 NAME - -perl5240delta - what is new for perl v5.24.0 - -=head1 DESCRIPTION - -This document describes the differences between the 5.22.0 release and the -5.24.0 release. - -=head1 Core Enhancements - -=head2 Postfix dereferencing is no longer experimental - -Using the C<postderef> and C<postderef_qq> features no longer emits a -warning. Existing code that disables the C<experimental::postderef> warning -category that they previously used will continue to work. The C<postderef> -feature has no effect; all Perl code can use postfix dereferencing, -regardless of what feature declarations are in scope. The C<5.24> feature -bundle now includes the C<postderef_qq> feature. - -=head2 Unicode 8.0 is now supported - -For details on what is in this release, see -L<http://www.unicode.org/versions/Unicode8.0.0/>. - -=head2 perl will now croak when closing an in-place output file fails - -Until now, failure to close the output file for an in-place edit was not -detected, meaning that the input file could be clobbered without the edit being -successfully completed. Now, when the output file cannot be closed -successfully, an exception is raised. - -=head2 New C<\b{lb}> boundary in regular expressions - -C<lb> stands for Line Break. It is a Unicode property -that determines where a line of text is suitable to break (typically so -that it can be output without overflowing the available horizontal -space). This capability has long been furnished by the -L<Unicode::LineBreak> module, but now a light-weight, non-customizable -version that is suitable for many purposes is in core Perl. - -=head2 C<qr/(?[ ])/> now works in UTF-8 locales - -L<Extended Bracketed Character Classes|perlrecharclass/Extended Bracketed Character Classes> -now will successfully compile when S<C<use locale>> is in effect. The compiled -pattern will use standard Unicode rules. If the runtime locale is not a -UTF-8 one, a warning is raised and standard Unicode rules are used -anyway. No tainting is done since the outcome does not actually depend -on the locale. - -=head2 Integer shift (C<< << >> and C<< >> >>) now more explicitly defined - -Negative shifts are reverse shifts: left shift becomes right shift, -and right shift becomes left shift. - -Shifting by the number of bits in a native integer (or more) is zero, -except when the "overshift" is right shifting a negative value under -C<use integer>, in which case the result is -1 (arithmetic shift). - -Until now negative shifting and overshifting have been undefined -because they have relied on whatever the C implementation happens -to do. For example, for the overshift a common C behavior is -"modulo shift": - - 1 >> 64 == 1 >> (64 % 64) == 1 >> 0 == 1 # Common C behavior. - - # And the same for <<, while Perl now produces 0 for both. - -Now these behaviors are well-defined under Perl, regardless of what -the underlying C implementation does. Note, however, that you cannot -escape the native integer width, you need to know how far left you -can go. You can use for example: - - use Config; - my $wordbits = $Config{uvsize} * 8; # Or $Config{uvsize} << 3. - -If you need a more bits on the left shift, you can use for example -the C<bigint> pragma, or the C<Bit::Vector> module from CPAN. - -=head2 printf and sprintf now allow reordered precision arguments - -That is, C<< sprintf '|%.*2$|', 2, 3 >> now returns C<|002|>. This extends -the existing reordering mechanism (which allows reordering for arguments -that are used as format fields, widths, and vector separators). - -=head2 More fields provided to C<sigaction> callback with C<SA_SIGINFO> - -When passing the C<SA_SIGINFO> flag to L<sigaction|POSIX/sigaction>, the -C<errno>, C<status>, C<uid>, C<pid>, C<addr> and C<band> fields are now -included in the hash passed to the handler, if supported by the -platform. - -=head1 Security - -=head2 Set proper umask before calling C<mkstemp(3)> - -In 5.22 perl started setting umask to 0600 before calling C<mkstemp(3)> -and restoring it afterwards. This wrongfully tells open(2) to strip -the owner read and write bits from the given mode before applying it, -rather than the intended negation of leaving only those bits in place. - -Systems that use mode 0666 in C<mkstemp(3)> (like old versions of -glibc) create a file with permissions 0066, leaving world read and -write permissions regardless of current umask. - -This has been fixed by using umask 0177 instead. [perl #127322] - -=head2 fix out of boundary access in Win32 path handling - -This is CVE-2015-8608. For more information see -L<[perl #126755]|https://rt.perl.org/Ticket/Display.html?id=126755> - -=head2 fix loss of taint in canonpath - -This is CVE-2015-8607. For more information see -L<[perl #126862]|https://rt.perl.org/Ticket/Display.html?id=126862> - -=head2 Avoid accessing uninitialized memory in win32 C<crypt()> - -Added validation that will detect both a short salt and invalid characters -in the salt. -L<[perl #126922]|https://rt.perl.org/Ticket/Display.html?id=126922> - -=head2 Remove duplicate environment variables from C<environ> - -Previously, if an environment variable appeared more than once in -C<environ[]>, C<%ENV> would contain the last entry for that name, -while a typical C<getenv()> would return the first entry. We now -make sure C<%ENV> contains the same as what C<getenv> returns. - -Second, we remove duplicates from C<environ[]>, so if a setting -with that name is set in C<%ENV> we won't pass an unsafe value -to a child process. - -[CVE-2016-2381] - -=head1 Incompatible Changes - -=head2 The C<autoderef> feature has been removed - -The experimental C<autoderef> feature (which allowed calling C<push>, -C<pop>, C<shift>, C<unshift>, C<splice>, C<keys>, C<values>, and C<each> on -a scalar argument) has been deemed unsuccessful. It has now been removed; -trying to use the feature (or to disable the C<experimental::autoderef> -warning it previously triggered) now yields an exception. - -=head2 Lexical $_ has been removed - -C<my $_> was introduced in Perl 5.10, and subsequently caused much confusion -with no obvious solution. In Perl 5.18.0, it was made experimental on the -theory that it would either be removed or redesigned in a less confusing (but -backward-incompatible) way. Over the following years, no alternatives were -proposed. The feature has now been removed and will fail to compile. - -=head2 C<qr/\b{wb}/> is now tailored to Perl expectations - -This is now more suited to be a drop-in replacement for plain C<\b>, but -giving better results for parsing natural language. Previously it -strictly followed the current Unicode rules which calls for it to match -between each white space character. Now it doesn't generally match -within spans of white space, behaving like C<\b> does. See -L<perlrebackslash/\b{wb}> - -=head2 Regular expression compilation errors - -Some regular expression patterns that had runtime errors now -don't compile at all. - -Almost all Unicode properties using the C<\p{}> and C<\P{}> regular -expression pattern constructs are now checked for validity at pattern -compilation time, and invalid ones will cause the program to not -compile. In earlier releases, this check was often deferred until run -time. Whenever an error check is moved from run- to compile time, -erroneous code is caught 100% of the time, whereas before it would only -get caught if and when the offending portion actually gets executed, -which for unreachable code might be never. - -=head2 C<qr/\N{}/> now disallowed under C<use re "strict"> - -An empty C<\N{}> makes no sense, but for backwards compatibility is -silently accepted as doing nothing. But now this is a fatal error under -the experimental feature L<re/'strict' mode>. - -=head2 Nested declarations are now disallowed - -A C<my>, C<our>, or C<state> declaration is no longer allowed inside -of another C<my>, C<our>, or C<state> declaration. - -For example, these are now fatal: - - my ($x, my($y)); - our (my $x); - -L<[perl #125587]|https://rt.perl.org/Ticket/Display.html?id=125587> - -L<[perl #121058]|https://rt.perl.org/Ticket/Display.html?id=121058> - -=head2 The C</\C/> character class has been removed. - -This regular expression character class was deprecated in v5.20.0 and has -produced a deprecation warning since v5.22.0. It is now a compile-time -error. If you need to examine the individual bytes that make up a -UTF8-encoded character, then use C<utf8::encode()> on the string (or a -copy) first. - -=head2 C<chdir('')> no longer chdirs home - -Using C<chdir('')> or C<chdir(undef)> to chdir home has been deprecated since -perl v5.8, and will now fail. Use C<chdir()> instead. - -=head2 ASCII characters in variable names must now be all visible - -It was legal until now on ASCII platforms for variable names to contain -non-graphical ASCII control characters (ordinals 0 through 31, and 127, -which are the C0 controls and C<DELETE>). This usage has been -deprecated since v5.20, and as of now causes a syntax error. The -variables these names referred to are special, reserved by Perl for -whatever use it may choose, now, or in the future. Each such variable -has an alternative way of spelling it. Instead of the single -non-graphic control character, a two character sequence beginning with a -caret is used, like C<$^]> and C<${^GLOBAL_PHASE}>. Details are at -L<perlvar>. It remains legal, though unwise and deprecated (raising a -deprecation warning), to use certain non-graphic non-ASCII characters in -variables names when not under S<C<use utf8>>. No code should do this, -as all such variables are reserved by Perl, and Perl doesn't currently -define any of them (but could at any time, without notice). - -=head2 An off by one issue in C<$Carp::MaxArgNums> has been fixed - -C<$Carp::MaxArgNums> is supposed to be the number of arguments to display. -Prior to this version, it was instead showing C<$Carp::MaxArgNums> + 1 arguments, -contrary to the documentation. - -=head2 Only blanks and tabs are now allowed within C<[...]> within C<(?[...])>. - -The experimental Extended Bracketed Character Classes can contain regular -bracketed character classes within them. These differ from regular ones in -that white space is generally ignored, unless escaped by preceding it with a -backslash. The white space that is ignored is now limited to just tab C<\t> -and SPACE characters. Previously, it was any white space. See -L<perlrecharclass/Extended Bracketed Character Classes>. - -=head1 Deprecations - -=head2 Using code points above the platform's C<IV_MAX> is now deprecated - -Unicode defines code points in the range C<0..0x10FFFF>. Some standards -at one time defined them up to 2**31 - 1, but Perl has allowed them to -be as high as anything that will fit in a word on the platform being -used. However, use of those above the platform's C<IV_MAX> is broken in -some constructs, notably C<tr///>, regular expression patterns involving -quantifiers, and in some arithmetic and comparison operations, such as -being the upper limit of a loop. Now the use of such code points raises -a deprecation warning, unless that warning category is turned off. -C<IV_MAX> is typically 2**31 -1 on 32-bit platforms, and 2**63-1 on -64-bit ones. - -=head2 Doing bitwise operations on strings containing code points above -0xFF is deprecated - -The string bitwise operators treat their operands as strings of bytes, -and values beyond 0xFF are nonsensical in this context. To operate on -encoded bytes, first encode the strings. To operate on code points' -numeric values, use C<split> and C<map ord>. In the future, this -warning will be replaced by an exception. - -=head2 sysread(), syswrite(), recv() and send() are deprecated on -:utf8 handles - -The sysread(), recv(), syswrite() and send() operators -are deprecated on handles that have the C<:utf8> layer, either -explicitly, or implicitly, eg., with the C<:encoding(UTF-16LE)> layer. - -Both sysread() and recv() currently use only the C<:utf8> flag for the -stream, ignoring the actual layers. Since sysread() and recv() do no -UTF-8 validation they can end up creating invalidly encoded scalars. - -Similarly, syswrite() and send() use only the C<:utf8> flag, otherwise -ignoring any layers. If the flag is set, both write the value UTF-8 -encoded, even if the layer is some different encoding, such as the -example above. - -Ideally, all of these operators would completely ignore the C<:utf8> -state, working only with bytes, but this would result in silently -breaking existing code. To avoid this a future version of perl will -throw an exception when any of sysread(), recv(), syswrite() or send() -are called on handle with the C<:utf8> layer. - -=head1 Performance Enhancements - -=over 4 - -=item * - -The overhead of scope entry and exit has been considerably reduced, so -for example subroutine calls, loops and basic blocks are all faster now. -This empty function call now takes about a third less time to execute: - - sub f{} f(); - -=item * - -Many languages, such as Chinese, are caseless. Perl now knows about -most modern commercially important ones, and skips much of the work when -a program tries to change case in them (like C<ucfirst()>) or match -caselessly (C<qr//i>). This will speed up a program, such as a web -server, that can operate on multiple languages, while operating on a -caseless one. - -=item * - -C</fixed-substr/> has been made much faster. - -On platforms with a libc memchr() implementation which makes good use of -underlying hardware support, patterns which include fixed substrings will now -often be much faster; for example with glibc on a recent x86_64 CPU, this: - - $s = "a" x 1000 . "wxyz"; - $s =~ /wxyz/ for 1..30000 - -is now about 7 times faster. On systems with slow memchr(), e.g. 32-bit ARM -Raspberry Pi, there will be a small or little speedup. Conversely, some -pathological cases, such as C<"ab" x 1000 =~ /aa/> will be slower now; up to 3 -times slower on the rPi, 1.5x slower on x86_64. - -=item * - -Faster addition, subtraction and multiplication. - -Since 5.8.0, arithmetic became slower due to the need to support -64-bit integers. To deal with 64-bit integers, a lot more corner -cases need to be checked, which adds time. We now detect common -cases where there is no need to check for those corner cases, -and special-case them. - -=item * - -Preincrement, predecrement, postincrement, and postdecrement have been -made faster by internally splitting the functions which handled multiple -cases into different functions. - -=item * - -Creating Perl debugger data structures (see L<perldebguts/"Debugger Internals">) -for XSUBs and const subs has been removed. This removed one glob/scalar combo -for each unique C<.c> file that XSUBs and const subs came from. On startup -(C<perl -e"0">) about half a dozen glob/scalar debugger combos were created. -Loading XS modules created more glob/scalar combos. These things were created -regardless if the perl debugger was being used or not, unlike for pure perl -subs, and ignores that the perl debugger can not debug C code. - -=item * - -On Win32, C<stat>ing or C<-X>ing a path, if the file or directory does not -exist, is now 3.5x faster than before. - -=item * - -Single arguments in list assign are now slightly faster: - - ($x) = (...); - (...) = ($x); - -=item * - -Less peak memory is now used when compiling regular expression patterns. - -=back - -=head1 Modules and Pragmata - -=head2 Updated Modules and Pragmata - -XXX: todo - -=head1 Documentation - -=head2 Changes to Existing Documentation - -=head3 L<perlapi> - -=over 4 - -=item * - -The process of using undocumented globals has been documented, namely, that one -should send email to L<perl5-porters@perl.org|mailto:perl5-porters@perl.org> -first to get the go-ahead for documenting and using an undocumented function or -global variable. - -=back - -=head3 L<perlcall> - -=over 4 - -=item * - -A number of cleanups have been made to perlcall, including: - -=over 4 - -=item * - -use EXTEND(SP, n) and PUSHs() instead of XPUSHs() where applicable -and update prose to match - -=item * - -add POPu, POPul and POPpbytex to the "complete list of POP macros" -and clarify the documentation for some of the existing entries, and -a note about side-effects - -=item * - -add API documentation for POPu and POPul - -=item * - -use ERRSV more efficiently - -=item * - -approaches to thread-safety storage of SVs. - -=back - -=back - -=head3 L<perlfunc> - -=over 4 - -=item * - -The documentation of C<hex> has been revised to clarify valid inputs. - -=item * - -Better explain meaning of negative PIDs in C<waitpid>. -L<[perl #127080]|https://rt.perl.org/Ticket/Display.html?id=127080> - -=item * - -General cleanup: there's more consistency now (in POD usage, grammar, code -examples), better practices in code examples (use of C<my>, removal of bareword -filehandles, dropped usage of C<&> when calling subroutines, ...), etc. - -=back - -=head3 L<perlguts> - -=over 4 - -=item * - -A new section has been added, L<perlguts/"Dynamic Scope and the Context -Stack">, which explains how the perl context stack works. - -=back - -=head3 L<perlmodlib> - -=over 4 - -=item * - -We now recommend contacting the module-authors list or PAUSE in seeking -guidance on the naming of modules. - -=back - -=head3 L<perlop> - -=over 4 - -=item * - -The documentation of C<qx//> now describes how C<$?> is affected. - -=back - -=head3 L<perlpolicy> - -=over 4 - -=item * - -This note has been added to perlpolicy: - - While civility is required, kindness is encouraged; if you have any doubt - about whether you are being civil, simply ask yourself, "Am I being kind?" - and aspire to that. - -=back - -=head3 L<perlreftut> - -=over 4 - -=item * - -Fix some examples to be L<strict> clean. - -=back - -=head3 L<perlrebackslash> - -=over 4 - -=item * - -Clarify that in languages like Japanese and Thai, dictionary lookup -is required to determine word boundaries. - -=back - -=head3 L<perlsub> - -=over 4 - -=item * - -Updated to note that anonymous subroutines can have signatures. - -=back - -=head3 L<perlsyn> - -=over 4 - -=item * - -Fixed a broken example where C<=> was used instead of -C<==> in conditional in do/while example. - -=back - -=head3 L<perltie> - -=over 4 - -=item * - -The usage of C<FIRSTKEY> and C<NEXTKEY> has been clarified. - -=back - -=head3 L<perlunicode> - -=over 4 - -=item * - -Discourage use of 'In' prefix for Unicode Block property. - -=back - -=head3 L<perlvar> - -=over 4 - -=item * - -The documentation of C<$@> was reworded to clarify that it is not just for -syntax errors in C<eval>. -L<[perl #124034]|https://rt.perl.org/Ticket/Display.html?id=124034> - -=item * - -The specific true value of C<$!{E...}> is now documented, noting that it is -subject to change and not guaranteed. - -=item * - -Use of C<$OLD_PERL_VERSION> is now discouraged. - -=back - -=head3 L<perlxs> - -=over 4 - -=item * - -The documentation of C<PROTOTYPES> has been corrected; they are I<disabled> -by default, not I<enabled>. - -=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<%s must not be a named sequence in transliteration operator|perldiag/"%s must not be a named sequence in transliteration operator"> - -(F) Transliteration (C<tr///> and C<y///>) transliterates individual -characters. But a named sequence by definition is more than an -individual charater, and hence doing this operation on it doesn't make -sense. - -=item * - -L<Can't find Unicode property definition "%s" in regex;|perldiag/"Can't find Unicode property definition "%s" in regex; marked by <-- HERE in m/%s/"> - -=item * - -L<Can't redeclare "%s" in "%s"|perldiag/"Can't redeclare "%s" in "%s""> - -(F) A "my", "our" or "state" declaration was found within another declaration, -such as C<my ($x, my($y), $z)> or C<our (my $x)>. - -=item * - -L<Character following \p must be '{' or a single-character Unicode property name in regex;|perldiag/"Character following \%c must be '{' or a single-character Unicode property name in regex; marked by <-- HERE in m/%s/"> - -=item * - -L<Empty \%c in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol> -|perldiag/"Empty \%c in regex; marked by <-- HERE in mE<sol>%sE<sol>"> - -=item * - -L<Illegal user-defined property name|perldiag/"Illegal user-defined property name"> - -=item * - -L<Invalid number '%s' for -C option.|perldiag/"Invalid number '%s' for -C option."> - -(F) You supplied a number to the -C option that either has extra leading -zeroes or overflows perl's unsigned integer representation. - -=item * - -L<<< Sequence (?... not terminated in regex; marked by S<<-- HERE> in mE<sol>%sE<sol>|perldiag/"Sequence (?... not terminated in regex; marked by <-- HERE in mE<sol>%sE<sol>" >>> - -=item * - -L<<< Sequence (?PE<lt>... not terminated in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol> -|perldiag/"Sequence (?PE<lt>... not terminated in regex; marked by <-- HERE in mE<sol>%sE<sol>" >>> - -=item * - -L<Sequence (?PE<gt>... not terminated in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol> -|perldiag/"Sequence (?PE<gt>... not terminated in regex; marked by <-- HERE in mE<sol>%sE<sol>"> - -=back - -=head3 New Warnings - -=over 4 - -=item * - -L<Assuming NOT a POSIX class since %s in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol>| -perldiag/Assuming NOT a POSIX class since %s in regex; marked by <-- HERE in mE<sol>%sE<sol>> - -=item * - -L<%s() is deprecated on :utf8 handles|perldiag/"%s() is deprecated on :utf8 handles"> - -(W deprecated) The sysread(), recv(), syswrite() and send() operators -are deprecated on handles that have the C<:utf8> layer, either -explicitly, or implicitly, eg., with the C<:encoding(UTF-16LE)> layer. - -Both sysread() and recv() currently use only the C<:utf8> flag for the -stream, ignoring the actual layers. Since sysread() and recv() do no -UTF-8 validation they can end up creating invalidly encoded scalars. - -Similarly, syswrite() and send() use only the C<:utf8> flag, otherwise -ignoring any layers. If the flag is set, both write the value UTF-8 -encoded, even if the layer is some different encoding, such as the -example above. - -Ideally, all of these operators would completely ignore the C<:utf8> -state, working only with bytes, but this would result in silently -breaking existing code. To avoid this a future version of perl will -throw an exception when any of sysread(), recv(), syswrite() or send() -are called on handle with the C<:utf8> layer. - -=back - -=head2 Changes to Existing Diagnostics - -=over 4 - -=item * - -Accessing the C<IO> part of a glob as C<FILEHANDLE> instead of C<IO> is no -longer deprecated. It is discouraged to encourage uniformity (so that, for -example, one can grep more easily) but it will not be removed. -L<[perl #127060]|https://rt.perl.org/Ticket/Display.html?id=127060> - -=item * - -The diagnostic C<< Hexadecimal float: internal error >> has been changed to -C<< Hexadecimal float: internal error (%s) >> to include more information. - -=item * - -L<Can't modify non-lvalue subroutine call of &%s|perldiag/"Can't modify non-lvalue subroutine call of &%s"> - -This error now reports the name of the non-lvalue subroutine you attempted to -use as an lvalue. - -=item * - -When running out of memory during an attempt the increase the stack -size, previously, perl would die using the cryptic message -C<< panic: av_extend_guts() negative count (-9223372036854775681) >>. -This has been fixed to show the prettier message: -L<< Out of memory during stack extend|perldiag/"Out of memory during %s extend" >> - -=back - -=head1 Configuration and Compilation - -=over 4 - -=item * - -C<Configure> now acts as if the C<-O> option is always passed, allowing command -line options to override saved configuration. This should eliminate confusion -when command line options are ignored for no obvious reason. C<-O> is now -permitted, but ignored. - -=item * - -Bison 3.0 is now supported. - -=item * - -F<Configure> no longer probes for F<libnm> by default. Originally -this was the "New Math" library, but the name has been re-used by the -GNOME NetworkManager. -L<[perl #127131]|https://rt.perl.org/Ticket/Display.html?id=127131> - -=item * - -Added F<Configure> probes for C<newlocale>, C<freelocale>, and C<uselocale>. - -=item * - -C<< PPPort.so/PPPort.dll >> no longer get installed, as they are -not used by C<< PPPort.pm >>, only by its test files. - -=item * - -It is now possible to specify which compilation date to show on -C<< perl -V >> output, by setting the macro C<< PERL_BUILD_DATE >>. - -=item * - -Using the C<NO_HASH_SEED> define in combination with the default hash algorithm -C<PERL_HASH_FUNC_ONE_AT_A_TIME_HARD> resulted in a fatal error while compiling -the interpreter, since Perl 5.17.10. This has been fixed. - -=item * - -F<Configure> should handle spaces in paths a little better. - -=item * - -No longer generate EBCDIC POSIX-BC tables. We don't believe anyone is -using Perl and POSIX-BC at this time, and by not generating these tables -it saves time during development, and makes the resulting tar ball smaller. - -=item * - -The GNU Make makefile for Win32 now supports parallel builds. [perl #126632] - -=item * - -You can now build perl with MSVC++ on Win32 using GNU Make. [perl #126632] - -=item * - -The Win32 miniperl now has a real C<getcwd> which increases build performance -resulting in C<getcwd()> being 605x faster in Win32 miniperl. - -=back - -=head1 Testing - -=over 4 - -=item * - -A new test (F<t/op/aassign.t>) has been added to test the list assignment operator -C<OP_AASSIGN>. - -=item * - -Parallel building has been added to the dmake C<makefile.mk> makefile. All -Win32 compilers are supported. - -=back - -=head1 Platform Support - -=head2 Platform-Specific Notes - -=over 4 - -=item AmigaOS - -The AmigaOS port has been reintegrated into the main tree, based off of -Perl 5.22.1. - -=item Cygwin - -Tests are more robust against unusual cygdrive prefixes. -L<[perl #126834]|https://rt.perl.org/Ticket/Display.html?id=126834> - -=item EBCDIC - -=over 4 - -=item UTF-EBCDIC extended - -UTF-EBCDIC is like UTF-8, but for EBCDIC platforms. It now has been -extended so that it can represent code points up to 2 ** 64 - 1 on -platforms with 64-bit words. This brings it into parity with UTF-8. -This enhancement requires an incompatible change to the representation -of code points in the range 2 ** 30 to 2 ** 31 -1 (the latter was the -previous maximum representable code point). This means that a file that -contains one of these code points, written out with previous versions of -perl cannot be read in, without conversion, by a perl containing this -change. We do not believe any such files are in existence, but if you -do have one, submit a ticket at L<perlbug@perl.org|mailto:perlbug@perl.org>, -and we will write a conversion script for you. - -=item EBCDIC C<cmp()> and C<sort()> fixed for UTF-EBCDIC strings - -Comparing two strings that were both encoded in UTF-8 (or more -precisely, UTF-EBCDIC) did not work properly until now. Since C<sort()> -uses C<cmp()>, this fixes that as well. - -=item EBCDIC C<tr///> and C<y///> fixed for C<\N{}>, and C<S<use utf8>> ranges - -Perl v5.22 introduced the concept of portable ranges to regular -expression patterns. A portable range matches the same set of -characters no matter what platform is being run on. This concept is now -extended to C<tr///>. See -C<L<trE<sol>E<sol>E<sol>|perlop/trE<sol>SEARCHLISTE<sol>REPLACEMENTLISTE<sol>cdsr>>. - -There were also some problems with these operations under S<C<use -utf8>>, which are now fixed - -=back - -=item FreeBSD - -=over - -=item * - -Use the C<fdclose()> function from FreeBSD if it is available. -L<[perl #126847]|https://rt.perl.org/Ticket/Display.html?id=126847> - -=back - -=item IRIX - -=over - -=item * - -Under some circumstances IRIX stdio fgetc() and fread() set the errno to -C<ENOENT>, which made no sense according to either IRIX or POSIX docs. Errno -is now cleared in such cases. -L<[perl #123977]|https://rt.perl.org/Ticket/Display.html?id=123977> - -=item * - -Problems when multiplying long doubles by infinity have been fixed. -L<[perl #126396]|https://rt.perl.org/Ticket/Display.html?id=126396> - -=back - -=item MacOS X - -=over - -=item * - -Until now OS X builds of perl have specified a link target of 10.3 (Panther, -2003) but have not specified a compiler target. From now on, builds of perl on -OS X 10.6 or later (Snow Leopard, 2008) by default capture the current OS X -version and specify that as the explicit build target in both compiler and -linker flags, thus preserving binary compatibility for extensions built later -regardless of changes in OS X, SDK, or compiler and linker versions. To -override the default value used in the build and preserved in the flags, -specify C<export MACOSX_DEPLOYMENT_TARGET=10.N> before configuring and building -perl, where 10.N is the version of OS X you wish to target. In OS X 10.5 or -earlier there is no change to the behavior present when those systems were -current; the link target is still OS X 10.3 and there is no explicit compiler -target. - -=item * - -Builds with both -DDEBUGGING and threading enabled would fail with a -"panic: free from wrong pool" error when built or tested from Terminal -on OS X. This was caused by perl's internal management of the -environment conflicting with an atfork handler using the libc -setenv() function to update the environment. - -Perl now uses setenv()/unsetenv() to update the environment on OS X. -L<[perl #126240]|https://rt.perl.org/Ticket/Display.html?id=126240> - -=back - -=item Solaris - -All Solaris now builds shared libperl. - -Solaris and variants like OpenIndiana now always build with the shared -Perl library (Configure -Duseshrplib). This was required for the -OpenIndiana builds, but this has also been the setting for Oracle/Sun -Perl builds for several years. - -=item Tru64 - -Workaround where Tru64 balks when prototypes are listed as -C<< PERL_STATIC_INLINE >>, but where the test is build with -C<< -DPERL_NO_INLINE_FUNCTIONS >>. - -=item VMS - -=over - -=item * - -On VMS, the math function prototypes in C<math.h> are now visible under C++. -Now building the POSIX extension with C++ will no longer crash. - -=item * - -VMS has had C<setenv/unsetenv> since v7.0 (released in 1996), C<Perl_vmssetenv> -now always uses C<setenv/unsetenv>. - -=item * - -Perl now implements its own C<killpg> by scanning for processes in the -specified process group, which may not mean exactly the same thing as a Unix -process group, but allows us to send a signal to a parent (or master) process -and all of its sub-processes. At the perl level, this means we can now send a -negative pid like so: - - kill SIGKILL, -$pid; - -to signal all processes in the same group as C<$pid>. - -=item * - -For those C<%ENV> elements based on the CRTL environ array, we've always -preserved case when setting them but did look-ups only after upcasing the -key first, which made lower- or mixed-case entries go missing. This problem -has been corrected by making C<%ENV> elements derived from the environ array -case-sensitive on look-up as well as case-preserving on store. - -=item * - -Environment look-ups for C<PERL5LIB> and C<PERLLIB> previously only -considered logical names, but now consider all sources of C<%ENV> as -determined by C<PERL_ENV_TABLES> and as documented in L<perlvms/%ENV>. - -=item * - -The minimum supported version of VMS is now v7.3-2, released in 2003. As a -side effect of this change, VAX is no longer supported as the terminal -release of OpenVMS VAX was v7.3 in 2001. - -=back - -=item Win32 - -=over - -=item * - -A new build option C<USE_NO_REGISTRY> has been added to the makefiles. This -option is off by default, meaning the default is to do Windows registry -lookups. This option stops Perl from looking inside the registry for anything. -For what values are looked up in the registry see L<perlwin32>. Internally, in -C, the name of this option is C<WIN32_NO_REGISTRY>. - -=item * - -The behavior of Perl using C<HKEY_CURRENT_USER\Software\Perl> and -C<HKEY_LOCAL_MACHINE\Software\Perl> to lookup certain values, including C<%ENV> -vars starting with C<PERL> has changed. Previously, the 2 keys were checked -for entries at all times through Perl processes life time even if they did not -exist. For performance reasons, now, if the root key (i.e. -C<HKEY_CURRENT_USER\Software\Perl> or C<HKEY_LOCAL_MACHINE\Software\Perl>) does -not exist at process start time, it will not be checked again for C<%ENV> -override entries for the remainder of the Perl processes life. This more -closely matches Unix behaviour in that the environment is copied or inherited -on startup and changing the variable in the parent process or another process -or editing F<.bashrc> will not change the environmental variable in other -existing, running, processes. - -=item * - -One glob fetch was removed for each C<-X> or C<stat> call whether done from -Perl code or internally from Perl's C code. The glob being looked up was -C<${^WIN32_SLOPPY_STAT}> which is a special variable. This makes C<-X> and -C<stat> slightly faster. - -=item * - -During miniperl's process startup, during the build process, 4 to 8 IO calls -related to the process starting F<.pl> and the F<buildcustomize.pl> file were -removed from the code opening and executing the first 1 or 2 F<.pl> files. - -=item * - -Builds using Microsoft Visual C++ 2003 and earlier no longer produce -an "INTERNAL COMPILER ERROR" message. [perl #126045] - -=item * - -Visual C++ 2013 builds will now execute on XP and higher. Previously they would -only execute on Vista and higher. - -=item * - -You can now build perl with GNU Make and GCC. [perl #123440] - -=item * - -C<truncate($filename, $size)> now works for files over 4GB in size. -[perl #125347] - -=item * - -Parallel building has been added to the dmake C<makefile.mk> makefile. All -Win32 compilers are supported. - -=item * - -Building a 64-bit perl with a 64-bit GCC but a 32-bit gmake would -result in an invalid C<$Config{archname}> for the resulting perl. -[perl #127584] - -=item * - -Errors set by Winsock functions are now put directly into C<$^E>, and the -relevant C<WSAE*> error codes are now exported from the L<Errno> and L<POSIX> -modules for testing this against. - -The previous behaviour of putting the errors (converted to POSIX-style C<E*> -error codes since Perl 5.20.0) into C<$!> was buggy due to the non-equivalence -of like-named Winsock and POSIX error constants, a relationship between which -has unfortunately been established in one way or another since Perl 5.8.0. - -The new behaviour provides a much more robust solution for checking Winsock -errors in portable software without accidentally matching POSIX tests that were -intended for other OSes and may have different meanings for Winsock. - -The old behaviour is currently retained, warts and all, for backwards -compatibility, but users are encouraged to change any code that tests C<$!> -against C<E*> constants for Winsock errors to instead test C<$^E> against -C<WSAE*> constants. After a suitable deprecation period, the old behaviour may -be removed, leaving C<$!> unchanged after Winsock function calls, to avoid any -possible confusion over which error variable to check. - -=back - -=item ppc64el floating point - -The floating point format of ppc64el (Debian naming for little-endian -PowerPC) is now detected correctly. - -=back - -=head1 Internal Changes - -=over 4 - -=item * - -The implementation of perl's context stack system, and its internal API, -have been heavily reworked. Note that no significant changes have been -made to any external APIs, but XS code which relies on such internal -details may need to be fixed. The main changes are: - -=over 4 - -=item * - -The C<PUSHBLOCK()>, C<POPSUB()> etc. macros have been replaced with static -inline functions such as C<cx_pushblock()>, C<cx_popsub()> etc. These use -function args rather than implicitly relying on local vars such as -C<gimme> and C<newsp> being available. Also their functionality has -changed: in particular, C<cx_popblock()> no longer decrements -C<cxstack_ix>. The ordering of the steps in the C<pp_leave*> functions -involving C<cx_popblock()>, C<cx_popsub()> etc. has changed. See the new -documentation, L<perlguts/"Dynamic Scope and the Context Stack">, for -details on how to use them. - -=item * - -Various macros, which now consistently have a CX_ prefix, have been added: - - CX_CUR(), CX_LEAVE_SCOPE(), CX_POP() - -or renamed: - - CX_POP_SAVEARRAY(), CX_DEBUG(), CX_PUSHSUBST(), CX_POPSUBST() - -=item * - -C<cx_pushblock()> now saves C<PL_savestack_ix> and C<PL_tmps_floor>, so -C<pp_enter*> and C<pp_leave*> no longer do - - ENTER; SAVETMPS; ....; LEAVE - -=item * - -C<cx_popblock()> now also restores C<PL_curpm>. - -=item * - -In C<dounwind()> for every context type, the current savestack frame is -now processed before each context is popped; formerly this was only done -for sub-like context frames. This action has been removed from -C<cx_popsub()> and placed into its own macro, C<CX_LEAVE_SCOPE(cx)>, which -must be called before C<cx_popsub()> etc. - -C<dounwind()> now also does a C<cx_popblock()> on the last popped frame -(formerly it only did the C<cx_popsub()> etc. actions on each frame). - -=item * - -The temps stack is now freed on scope exit; previously, temps created -during the last statement of a block wouldn't be freed until the next -C<nextstate> following the block (apart from an existing hack that did -this for recursive subs in scalar context); and in something like -C<f(g())>, the temps created by the last statement in C<g()> would -formerly not be freed until the statement following the return from -C<f()>. - -=item * - -Most values that were saved on the savestack on scope entry are now -saved in suitable new fields in the context struct, and saved and -restored directly by C<cx_pushfoo()> and C<cx_popfoo()>, which is much -faster. - -=item * - -Various context struct fields have been added, removed or modified. - -=item * - -The handling of C<@_> in C<cx_pushsub()> and C<cx_popsub()> has been -considerably tidied up, including removing the C<argarray> field from the -context struct, and extracting out some common (but rarely used) code into -a separate function, C<clear_defarray()>. Also, useful subsets of -C<cx_popsub()> which had been unrolled in places like C<pp_goto> have been -gathered into the new functions C<cx_popsub_args()> and -C<cx_popsub_common()>. - -=item * - -C<pp_leavesub> and C<pp_leavesublv> now use the same function as the rest -of the C<pp_leave*>'s to process return args. - -=item * - -C<CXp_FOR_PAD> and C<CXp_FOR_GV> flags have been added, and -C<CXt_LOOP_FOR> has been split into C<CXt_LOOP_LIST>, C<CXt_LOOP_ARY>. - -=item * - -Some variables formerly declared by C<dMULTICALL> (but not documented) have -been removed. - -=back - -=item * - -The obscure C<PL_timesbuf> variable, effectively a vestige of Perl 1, has -been removed. It was documented as deprecated in Perl 5.20, with a statement -that it would be removed early in the 5.21.x series; that has now finally -happened. -L<[perl #121351]|https://rt.perl.org/Ticket/Display.html?id=121351> - -=item * - -Remove unwarranted assertion in C<Perl_newATTRSUB_x()>. If a stub subroutine -definition with a prototype has been seen, then any subsequent stub (or -definition) of the same subroutine with an attribute was causing an assertion -failure because of a null pointer. -L<[perl #126845]|https://rt.perl.org/Ticket/Display.html?id=126845> - -=item * - -Replace C<::> with C<__> in C<ExtUtils::ParseXS> like it's done for -parameters/return values. This is more consistent, and simplifies writing XS -code wrapping C++ classes into a nested Perl namespace (it requires only -a typedef for C<Foo__Bar> rather than two, one for C<Foo_Bar> and the other -for C<Foo::Bar>). - -=item * - -Deprecate the C<to_utf8_case()> function, see -L<http://nntp.perl.org/group/perl.perl5.porters/233287>. - -=item * - -Perl core code and the threads extension have been annotated so that, -if Perl is configured to use threads, then during compile-time clang (3.6 -or later) will warn about suspicious uses of mutexes. -See L<http://clang.llvm.org/docs/ThreadSafetyAnalysis.html> for more -information. - -=item * - -The C<signbit()> emulation has been enhanced. This will help older -and/or more exotic platforms or configurations. - -=item * - -The C<to_utf8_case> function is discouraged in favor of C<toUPPER_utf8>, -C<toTITLE_utf8>, C<toLOWER_utf8>, and C<toFOLD_utf8>. - -=item * - -EBCDIC code paths have largely been unified to avoid repetition. - -=item * - -MSWin32 code for C<$^X> has been moved out of the F<win32> directory to -F<caretx.c>, where other operating systems set that variable. - -=item * - -C<< sv_ref() >> is now part of the API. - -=item * - -L<perlapi/sv_backoff> had its return type changed from C<int> to C<void>. It -previously has always returned C<0> since Perl 5.000 stable but that was -undocumented. Although C<sv_backoff> is marked as public API, XS code is not -expected to be impacted since the proper API call would be through public API -C<sv_setsv(sv, &PL_sv_undef)>, or quasi-public C<SvOOK_off>, or non-public -C<SvOK_off> calls, and the return value of C<sv_backoff> was previously a -meaningless constant that can be rewritten as C<(sv_backoff(sv),0)>. - -=item * - -The C<EXTEND> and C<MEXTEND> macros have been improved to avoid various issues -with integer truncation and wrapping. In particular, some casts formerly used -within the macros have been removed. This means for example that passing an -unsigned nitems argument is likely to raise a compiler warning now (it's always -been documented to require a signed value; formerly int, lately SSize_t). - -=item * - -C<PL_sawalias> and C<GPf_ALIASED_SV> have been removed. - -=item * - -C<GvASSIGN_GENERATION> and C<GvASSIGN_GENERATION_set> have been removed. - -=back - -=head1 Selected Bug Fixes - -=over 4 - -=item * - -It now works properly to specify a user-defined property, such as - - qr/\p{mypkg1::IsMyProperty}/i - -with C</i> caseless matching, an explicit package name, and -I<IsMyProperty> not defined at the time of the pattern compilation. - -=item * - -Perl's memcpy(), memmove(), memset() and memcmp() fallbacks are now -more compatible with the originals. [perl #127619] - -=item * - -Fixed the issue where a C<< s///r >>) with B<< -DPERL_NO_COW >> attempts -to modify the source SV, resulting in the program dying. [perl #127635] - -=item * - -Fixed a spurious warning about posix character classes. [perl #127581] - -=item * - -Fixed an obscure case where a pattern could fail to match. This only -occurred when matching characters from the set of C1 controls, when -the target matched string was in UTF-8, and only on EBCDIC platforms. - -=item * - -Fixed over eager warnings for C<< /[.foo.]/ >>. - -This prevents Perl from warning about constructs like C<< /[.].*[.]/ >>. -[perl #127582, #127604] - -=item * - -Narrow the filename check in F<strict.pm> and F<warnings.pm>. Previously, -it assumed that if the filename (without the F<.pmc?> extension) differed -from the package name, if was a misspelled use statement (i.e. C<use Strict> -instead of C<use strict>). We now check whether there's really a -miscapitalization happening, and not another issue. - -=item * - -Turn an assertion into a more user friendly failure when parsing -regexes. [perl #127599] - -=item * - -Correctly raise an error when trying to compile patterns with -unterminated character classes while there are trailing backslashes. -[perl #126141]. - -=item * - -Line numbers larger than 2**31-1 but less than 2**32 are no longer -returned by caller() as negative numbers. [perl #126991] - -=item * - -C<< unless ( I<assignment> ) >> now properly warns when syntax -warnings are enabled. [perl #127122] - -=item * - -Setting an C<ISA> glob to an array reference now properly adds -C<isaelem> magic to any existing elements. Previously modifying such -an element would not update the ISA cache, so method calls would call -the wrong function. Perl would also crash if the C<ISA> glob was -destroyed, since new code added in 5.23.7 would try to release the -C<isaelem> magic from the elements. [perl #127351] - -=item * - -If a here-doc was found while parsing another operator, the parser had -already read end of file, and the here-doc was not terminated, perl -could produce an assertion or a segmentation fault. This now reliably -complains about the unterminated here-doc. [perl #125540] - -=item * - -untie() would sometimes return the last value returned by the UNTIE() -handler as well as it's normal value, messing up the stack. [perl -#126621] - -=item * - -Fixed an operator precedence problem when C< castflags & 2> is true. -[perl #127474] - -=item * - -Caching of DESTROY methods could result in a non-pointer or a -non-STASH stored in the SvSTASH() slot of a stash, breaking the B -STASH() method. The DESTROY method is now cached in the MRO metadata -for the stash. [perl #126410] - -=item * - -The AUTOLOAD method is now called when searching for a DESTROY method, -and correctly sets C<$AUTOLOAD> too. [perl #124387] [perl #127494] - -=item * - -Avoid parsing beyond the end of the buffer when processing a C<#line> -directive with no filename. [perl #127334] - -=item * - -Perl now raises a warning when a regular expression pattern looks like -it was supposed to contain a POSIX class, like C<qr/[[:alpha:]]/>, but -there was some slight defect in its specification which causes it to -instead be treated as a regular bracketed character class. An example -would be missing the second colon in the above like this: -C<qr/[[:alpha]]/>. This compiles to match a sequence of two characters. -The second is C<"]">, and the first is any of: C<"[">, C<":">, C<"a">, -C<"h">, C<"l">, or C<"p">. This is unlikely to be the intended -meaning, and now a warning is raised. No warning is raised unless the -specification is very close to one of the 14 legal POSIX classes. (See -L<perlrecharclass/POSIX Character Classes>.) -[perl #8904] - -=item * - -Certain regex patterns involving a complemented POSIX class in an -inverted bracketed character class, and matching something else -optionally would improperly fail to match. An example of one that could -fail is C</qr/_?[^\Wbar]\x{100}/>. This has been fixed. -[perl #127537] - -=item * - -Perl 5.22 added support to the C99 hexadecimal floating point notation, -but sometimes misparses hex floats. This has been fixed. -[perl #127183] - -=item * - -A regression that allowed undeclared barewords in hash keys to work despite -strictures has been fixed. -L<[perl #126981]|https://rt.perl.org/Ticket/Display.html?id=126981> - -=item * - -Calls to the placeholder C<&PL_sv_yes> used internally when an C<import()> -or C<unimport()> method isn't found now correctly handle scalar context. -L<[perl #126042]|https://rt.perl.org/Ticket/Display.html?id=126042> - -=item * - -Report more context when we see an array where we expect to see an -operator and avoid an assertion failure. -L<[perl #123737]|https://rt.perl.org/Ticket/Display.html?id=123737> - -=item * - -Modifying an array that was previously a package C<@ISA> no longer -causes assertion failures or crashes. -L<[perl #123788]|https://rt.perl.org/Ticket/Display.html?id=123788> - -=item * - -Retain binary compatibility across plain and DEBUGGING perl builds. -L<[perl #127212]|https://rt.perl.org/Ticket/Display.html?id=127212> - -=item * - -Avoid leaking memory when setting C<$ENV{foo}> on darwin. -L<[perl #126240]|https://rt.perl.org/Ticket/Display.html?id=126240> - -=item * - -C</...\G/> no longer crashes on utf8 strings. When C<\G> is a fixed number -of characters from the start of the regex, perl needs to count back that -many characters from the current C<pos()> position and start matching from -there. However, it was counting back bytes rather than characters, which -could lead to panics on utf8 strings. - -=item * - -In some cases operators that return integers would return negative -integers as large positive integers. -L<[perl #126635]|https://rt.perl.org/Ticket/Display.html?id=126635> - -=item * - -The C<pipe()> operator would assert for DEBUGGING builds instead of -producing the correct error message. The condition asserted on is -detected and reported on correctly without the assertions, so the -assertions were removed. -L<[perl #126480]|https://rt.perl.org/Ticket/Display.html?id=126480> - -=item * - -In some cases, failing to parse a here-doc would attempt to use freed -memory. This was caused by a pointer not being restored correctly. -L<[perl #126443]|https://rt.perl.org/Ticket/Display.html?id=126443> - -=item * - -C<< @x = sort { *a = 0; $a <=> $b } 0 .. 1 >> no longer frees the GP -for *a before restoring its SV slot. -L<[perl #124097]|https://rt.perl.org/Ticket/Display.html?id=124097> - -=item * - -Multiple problems with the new hexadecimal floating point printf -format C<%a> were fixed: -L<[perl #126582]|https://rt.perl.org/Ticket/Display.html?id=126582>, -L<[perl #126586]|https://rt.perl.org/Ticket/Display.html?id=126586>, -L<[perl #126822]|https://rt.perl.org/Ticket/Display.html?id=126822> - -=item * - -Calling mg_set() in leave_scope() no longer leaks. - -=item * - -A regression from Perl v5.20 was fixed in which debugging output of regular -expression compilation was wrong. (The pattern was correctly compiled, but -what got displayed for it was wrong.) - -=item * - -C<\b{sb}> works much better. In Perl v5.22.0, this new construct didn't -seem to give the expected results, yet passed all the tests in the -extensive suite furnished by Unicode. It turns out that it was because -these were short input strings, and the failures had to do with longer -inputs. This was fixed in Perl 5.23.4, but the improvement was not -noticed until after that was released, so is included here now. - -=item * - -Certain syntax errors in -L<perlrecharclass/Extended Bracketed Character Classes> caused panics -instead of the proper error message. This has now been fixed. [perl -#126481] - -=item * - -An earlier commit added a message when a quantifier in a regular -expression was useless, but then caused the parser to skip it; -this caused the surplus quantifier to be silently ignored, instead -of throwing an error. This is now fixed. [perl #126253] - -=item * - -The switch to building non-XS modules last in win32/makefile.mk (introduced -by design as part of the changes to enable parallel building) caused the -build of POSIX to break due to problems with the version module. This -is now fixed. - -=item * - -Improved parsing of hex float constants. - -=item * - -Fixed an issue with C<< pack >> where C<< pack "H" >> (and C<< pack "h" >>) -could read past the source when given a non-utf8 source, and a utf8 target. -[perl #126325] - -=item * - -Fixed several cases where perl would abort due to a segmentation fault, -or a C-level assert. [perl #126615], [perl #126602], [perl #126193]. - -=item * - -There were places in regular expression patterns where comments (C<(?#...)>) -weren't allowed, but should have been. This is now fixed. -L<[perl #116639]|https://rt.perl.org/Ticket/Display.html?id=116639> - -=item * - -Some regressions from Perl 5.20 have been fixed, in which some syntax errors in -L<C<(?[...])>|perlrecharclass/Extended Bracketed Character Classes> constructs -within regular expression patterns could cause a segfault instead of a proper -error message. -L<[perl #126180]|https://rt.perl.org/Ticket/Display.html?id=126180> -L<[perl #126404]|https://rt.perl.org/Ticket/Display.html?id=126404> - -=item * - -Another problem with -L<C<(?[...])>|perlrecharclass/Extended Bracketed Character Classes> -constructs has been fixed wherein things like C<\c]> could cause panics. -L<[perl #126181]|https://rt.perl.org/Ticket/Display.html?id=126181> - -=item * - -Some problems with attempting to extend the perl stack to around 2G or 4G -entries have been fixed. This was particularly an issue on 32-bit perls built -to use 64-bit integers, and was easily noticeable with the list repetition -operator, e.g. - - @a = (1) x $big_number - -Formerly perl may have crashed, depending on the exact value of C<$big_number>; -now it will typically raise an exception. -L<[perl #125937]|https://rt.perl.org/Ticket/Display.html?id=125937> - -=item * - -In a regex conditional expression C<(?(condition)yes-pattern|no-pattern)>, if -the condition is C<(?!)> then perl failed the match outright instead of -matching the no-pattern. This has been fixed. -L<[perl #126222]|https://rt.perl.org/Ticket/Display.html?id=126222> - -=item * - -The special backtracking control verbs C<(*VERB:ARG)> now all allow an optional -argument and set C<REGERROR>/C<REGMARK> appropriately as well. -L<[perl #126186]|https://rt.perl.org/Ticket/Display.html?id=126186> - -=item * - -Several bugs, including a segmentation fault, have been fixed with the bounds -checking constructs (introduced in Perl 5.22) C<\b{gcb}>, C<\b{sb}>, C<\b{wb}>, -C<\B{gcb}>, C<\B{sb}>, and C<\B{wb}>. All the C<\B{}> ones now match an empty -string; none of the C<\b{}> ones do. -L<[perl #126319]|https://rt.perl.org/Ticket/Display.html?id=126319> - -=item * - -Duplicating a closed file handle for write no longer creates a -filename of the form F<GLOB(0xXXXXXXXX)>. [perl #125115] - -=item * - -Warning fatality is now ignored when rewinding the stack. This -prevents infinite recursion when the now fatal error also causes -rewinding of the stack. [perl #123398] - -=item * - -In perl v5.22.0, the logic changed when parsing a numeric parameter to the -C -option, such that the successfully parsed number was not saved as the option -value if it parsed to the end of the argument. [perl #125381] - -=item * - -The PadlistNAMES macro is an lvalue again. - -=item * - -Zero -DPERL_TRACE_OPS memory for sub-threads. - -perl_clone_using() was missing Zero init of PL_op_exec_cnt[]. This -caused sub-threads in threaded -DPERL_TRACE_OPS builds to spew exceedingly -large op-counts at destruct. These counts would print %x as "ABABABAB", -clearly a mem-poison value. - -=item * - -A leak in the XS typemap caused one scalar to be leaked each time a C<FILE *> -or a C<PerlIO *> was C<OUTPUT:>ed or imported to Perl, since perl 5.000. These -particular typemap entries are thought to be extremely rarely used by XS -modules. [perl #124181] - -=item * - -C<alarm()> and C<sleep()> will now warn if the argument is a negative number -and return undef. Previously they would pass the negative value to the -underlying C function which may have set up a timer with a surprising value. - -=item * - -Perl can again be compiled with any Unicode version. This used to -(mostly) work, but was lost in v5.18 through v5.20. The property -C<Name_Alias> did not exist prior to Unicode 5.0. L<Unicode::UCD> -incorrectly said it did. This has been fixed. - -=item * - -Very large code-points (beyond Unicode) in regular expressions no -longer cause a buffer overflow in some cases when converted to UTF-8. -L<[perl #125826]|https://rt.perl.org/Ticket/Display.html?id=125826> - -=item * - -The integer overflow check for the range operator (...) in list -context now correctly handles the case where the size of the range is -larger than the address space. This could happen on 32-bits with --Duse64bitint. -L<[perl #125781]|https://rt.perl.org/Ticket/Display.html?id=125781> - -=item * - -A crash with C<< %::=(); J->${\"::"} >> has been fixed. -L<[perl #125541]|https://rt.perl.org/Ticket/Display.html?id=125541> - -=item * - -C<qr/(?[ () ])/> no longer segfaults, giving a syntax error message instead. -[perl #125805] - -=item * - -Regular expression possessive quantifier v5.20 regression now fixed. -C<qr/>I<PAT>C<{>I<min>,I<max>C<}+>C</> is supposed to behave identically -to C<qr/(?E<gt>>I<PAT>C<{>I<min>,I<max>C<})/>. Since v5.20, this didn't -work if I<min> and I<max> were equal. [perl #125825] - -=item * - -C<< BEGIN <> >> no longer segfaults and properly produces an error -message. [perl #125341] - -=item * - -In C<tr///> an illegal backwards range like C<tr/\x{101}-\x{100}//> was -not always detected, giving incorrect results. This is now fixed. - -=back - -=head1 Acknowledgements - -[ XXX: generate this just in time, Ricardo! ] - -=head1 Reporting Bugs - -If you find what you think is a bug, you might check the articles recently -posted to the comp.lang.perl.misc newsgroup and the perl bug database at -https://rt.perl.org/ . There may also be information at -http://www.perl.org/ , the Perl Home Page. - -If you believe you have an unreported bug, please run the L<perlbug> program -included with your release. Be sure to trim your bug down to a tiny but -sufficient test case. Your bug report, along with the output of C<perl -V>, -will be sent off to perlbug@perl.org to be analysed by the Perl porting team. - -If the bug you are reporting has security implications, which make it -inappropriate to send to a publicly archived mailing list, then please send it -to perl5-security-report@perl.org. This points to a closed subscription -unarchived mailing list, which includes all the core committers, who will be -able to help assess the impact of issues, figure out a resolution, and help -co-ordinate the release of patches to mitigate or fix the problem across all -platforms on which Perl is supported. Please only use this address for -security issues in the Perl core, not for modules independently distributed on -CPAN. - -=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 4dcc7af6f5..e0ae30f4f4 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -2,166 +2,591 @@ =head1 NAME -[ this is a template for a new perldelta file. Any text flagged as XXX needs -to be processed before release. ] - -perldelta - what is new for perl v5.23.10 +perldelta - what is new for perl v5.24.0 =head1 DESCRIPTION -This document describes differences between the 5.23.9 release and the 5.23.10 -release. +This document describes the differences between the 5.22.0 release and the +5.24.0 release. -If you are upgrading from an earlier release such as 5.23.8, first read -L<perl5239delta>, which describes differences between 5.23.8 and 5.23.9. +=head1 Core Enhancements -=head1 Notice +=head2 Postfix dereferencing is no longer experimental -XXX Any important notices here +Using the C<postderef> and C<postderef_qq> features no longer emits a +warning. Existing code that disables the C<experimental::postderef> warning +category that they previously used will continue to work. The C<postderef> +feature has no effect; all Perl code can use postfix dereferencing, +regardless of what feature declarations are in scope. The C<5.24> feature +bundle now includes the C<postderef_qq> feature. -=head1 Core Enhancements +=head2 Unicode 8.0 is now supported + +For details on what is in this release, see +L<http://www.unicode.org/versions/Unicode8.0.0/>. + +=head2 perl will now croak when closing an in-place output file fails + +Until now, failure to close the output file for an in-place edit was not +detected, meaning that the input file could be clobbered without the edit being +successfully completed. Now, when the output file cannot be closed +successfully, an exception is raised. + +=head2 New C<\b{lb}> boundary in regular expressions + +C<lb> stands for Line Break. It is a Unicode property +that determines where a line of text is suitable to break (typically so +that it can be output without overflowing the available horizontal +space). This capability has long been furnished by the +L<Unicode::LineBreak> module, but now a light-weight, non-customizable +version that is suitable for many purposes is in core Perl. + +=head2 C<qr/(?[ ])/> now works in UTF-8 locales + +L<Extended Bracketed Character Classes|perlrecharclass/Extended Bracketed Character Classes> +now will successfully compile when S<C<use locale>> is in effect. The compiled +pattern will use standard Unicode rules. If the runtime locale is not a +UTF-8 one, a warning is raised and standard Unicode rules are used +anyway. No tainting is done since the outcome does not actually depend +on the locale. + +=head2 Integer shift (C<< << >> and C<< >> >>) now more explicitly defined + +Negative shifts are reverse shifts: left shift becomes right shift, +and right shift becomes left shift. + +Shifting by the number of bits in a native integer (or more) is zero, +except when the "overshift" is right shifting a negative value under +C<use integer>, in which case the result is -1 (arithmetic shift). + +Until now negative shifting and overshifting have been undefined +because they have relied on whatever the C implementation happens +to do. For example, for the overshift a common C behavior is +"modulo shift": + + 1 >> 64 == 1 >> (64 % 64) == 1 >> 0 == 1 # Common C behavior. + + # And the same for <<, while Perl now produces 0 for both. + +Now these behaviors are well-defined under Perl, regardless of what +the underlying C implementation does. Note, however, that you cannot +escape the native integer width, you need to know how far left you +can go. You can use for example: + + use Config; + my $wordbits = $Config{uvsize} * 8; # Or $Config{uvsize} << 3. + +If you need a more bits on the left shift, you can use for example +the C<bigint> pragma, or the C<Bit::Vector> module from CPAN. + +=head2 printf and sprintf now allow reordered precision arguments + +That is, C<< sprintf '|%.*2$|', 2, 3 >> now returns C<|002|>. This extends +the existing reordering mechanism (which allows reordering for arguments +that are used as format fields, widths, and vector separators). -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. +=head2 More fields provided to C<sigaction> callback with C<SA_SIGINFO> -[ List each enhancement as a =head2 entry ] +When passing the C<SA_SIGINFO> flag to L<sigaction|POSIX/sigaction>, the +C<errno>, C<status>, C<uid>, C<pid>, C<addr> and C<band> fields are now +included in the hash passed to the handler, if supported by the +platform. =head1 Security -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 Set proper umask before calling C<mkstemp(3)> -[ List each security issue as a =head2 entry ] +In 5.22 perl started setting umask to 0600 before calling C<mkstemp(3)> +and restoring it afterwards. This wrongfully tells open(2) to strip +the owner read and write bits from the given mode before applying it, +rather than the intended negation of leaving only those bits in place. + +Systems that use mode 0666 in C<mkstemp(3)> (like old versions of +glibc) create a file with permissions 0066, leaving world read and +write permissions regardless of current umask. + +This has been fixed by using umask 0177 instead. [perl #127322] + +=head2 fix out of boundary access in Win32 path handling + +This is CVE-2015-8608. For more information see +L<[perl #126755]|https://rt.perl.org/Ticket/Display.html?id=126755> + +=head2 fix loss of taint in canonpath + +This is CVE-2015-8607. For more information see +L<[perl #126862]|https://rt.perl.org/Ticket/Display.html?id=126862> + +=head2 Avoid accessing uninitialized memory in win32 C<crypt()> + +Added validation that will detect both a short salt and invalid characters +in the salt. +L<[perl #126922]|https://rt.perl.org/Ticket/Display.html?id=126922> + +=head2 Remove duplicate environment variables from C<environ> + +Previously, if an environment variable appeared more than once in +C<environ[]>, C<%ENV> would contain the last entry for that name, +while a typical C<getenv()> would return the first entry. We now +make sure C<%ENV> contains the same as what C<getenv> returns. + +Second, we remove duplicates from C<environ[]>, so if a setting +with that name is set in C<%ENV> we won't pass an unsafe value +to a child process. + +[CVE-2016-2381] =head1 Incompatible Changes -XXX For a release on a stable branch, this section aspires to be: +=head2 The C<autoderef> feature has been removed + +The experimental C<autoderef> feature (which allowed calling C<push>, +C<pop>, C<shift>, C<unshift>, C<splice>, C<keys>, C<values>, and C<each> on +a scalar argument) has been deemed unsuccessful. It has now been removed; +trying to use the feature (or to disable the C<experimental::autoderef> +warning it previously triggered) now yields an exception. + +=head2 Lexical $_ has been removed + +C<my $_> was introduced in Perl 5.10, and subsequently caused much confusion +with no obvious solution. In Perl 5.18.0, it was made experimental on the +theory that it would either be removed or redesigned in a less confusing (but +backward-incompatible) way. Over the following years, no alternatives were +proposed. The feature has now been removed and will fail to compile. + +=head2 C<qr/\b{wb}/> is now tailored to Perl expectations + +This is now more suited to be a drop-in replacement for plain C<\b>, but +giving better results for parsing natural language. Previously it +strictly followed the current Unicode rules which calls for it to match +between each white space character. Now it doesn't generally match +within spans of white space, behaving like C<\b> does. See +L<perlrebackslash/\b{wb}> + +=head2 Regular expression compilation errors + +Some regular expression patterns that had runtime errors now +don't compile at all. + +Almost all Unicode properties using the C<\p{}> and C<\P{}> regular +expression pattern constructs are now checked for validity at pattern +compilation time, and invalid ones will cause the program to not +compile. In earlier releases, this check was often deferred until run +time. Whenever an error check is moved from run- to compile time, +erroneous code is caught 100% of the time, whereas before it would only +get caught if and when the offending portion actually gets executed, +which for unreachable code might be never. - 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 C<qr/\N{}/> now disallowed under C<use re "strict"> -[ List each incompatible change as a =head2 entry ] +An empty C<\N{}> makes no sense, but for backwards compatibility is +silently accepted as doing nothing. But now this is a fatal error under +the experimental feature L<re/'strict' mode>. + +=head2 Nested declarations are now disallowed + +A C<my>, C<our>, or C<state> declaration is no longer allowed inside +of another C<my>, C<our>, or C<state> declaration. + +For example, these are now fatal: + + my ($x, my($y)); + our (my $x); + +L<[perl #125587]|https://rt.perl.org/Ticket/Display.html?id=125587> + +L<[perl #121058]|https://rt.perl.org/Ticket/Display.html?id=121058> + +=head2 The C</\C/> character class has been removed. + +This regular expression character class was deprecated in v5.20.0 and has +produced a deprecation warning since v5.22.0. It is now a compile-time +error. If you need to examine the individual bytes that make up a +UTF8-encoded character, then use C<utf8::encode()> on the string (or a +copy) first. + +=head2 C<chdir('')> no longer chdirs home + +Using C<chdir('')> or C<chdir(undef)> to chdir home has been deprecated since +perl v5.8, and will now fail. Use C<chdir()> instead. + +=head2 ASCII characters in variable names must now be all visible + +It was legal until now on ASCII platforms for variable names to contain +non-graphical ASCII control characters (ordinals 0 through 31, and 127, +which are the C0 controls and C<DELETE>). This usage has been +deprecated since v5.20, and as of now causes a syntax error. The +variables these names referred to are special, reserved by Perl for +whatever use it may choose, now, or in the future. Each such variable +has an alternative way of spelling it. Instead of the single +non-graphic control character, a two character sequence beginning with a +caret is used, like C<$^]> and C<${^GLOBAL_PHASE}>. Details are at +L<perlvar>. It remains legal, though unwise and deprecated (raising a +deprecation warning), to use certain non-graphic non-ASCII characters in +variables names when not under S<C<use utf8>>. No code should do this, +as all such variables are reserved by Perl, and Perl doesn't currently +define any of them (but could at any time, without notice). + +=head2 An off by one issue in C<$Carp::MaxArgNums> has been fixed + +C<$Carp::MaxArgNums> is supposed to be the number of arguments to display. +Prior to this version, it was instead showing C<$Carp::MaxArgNums> + 1 arguments, +contrary to the documentation. + +=head2 Only blanks and tabs are now allowed within C<[...]> within C<(?[...])>. + +The experimental Extended Bracketed Character Classes can contain regular +bracketed character classes within them. These differ from regular ones in +that white space is generally ignored, unless escaped by preceding it with a +backslash. The white space that is ignored is now limited to just tab C<\t> +and SPACE characters. Previously, it was any white space. See +L<perlrecharclass/Extended Bracketed Character Classes>. =head1 Deprecations -=head2 \N{} with nothing between the braces is deprecated +=head2 Using code points above the platform's C<IV_MAX> is now deprecated + +Unicode defines code points in the range C<0..0x10FFFF>. Some standards +at one time defined them up to 2**31 - 1, but Perl has allowed them to +be as high as anything that will fit in a word on the platform being +used. However, use of those above the platform's C<IV_MAX> is broken in +some constructs, notably C<tr///>, regular expression patterns involving +quantifiers, and in some arithmetic and comparison operations, such as +being the upper limit of a loop. Now the use of such code points raises +a deprecation warning, unless that warning category is turned off. +C<IV_MAX> is typically 2**31 -1 on 32-bit platforms, and 2**63-1 on +64-bit ones. + +=head2 Doing bitwise operations on strings containing code points above +0xFF is deprecated + +The string bitwise operators treat their operands as strings of bytes, +and values beyond 0xFF are nonsensical in this context. To operate on +encoded bytes, first encode the strings. To operate on code points' +numeric values, use C<split> and C<map ord>. In the future, this +warning will be replaced by an exception. + +=head2 sysread(), syswrite(), recv() and send() are deprecated on +:utf8 handles + +The sysread(), recv(), syswrite() and send() operators +are deprecated on handles that have the C<:utf8> layer, either +explicitly, or implicitly, eg., with the C<:encoding(UTF-16LE)> layer. + +Both sysread() and recv() currently use only the C<:utf8> flag for the +stream, ignoring the actual layers. Since sysread() and recv() do no +UTF-8 validation they can end up creating invalidly encoded scalars. + +Similarly, syswrite() and send() use only the C<:utf8> flag, otherwise +ignoring any layers. If the flag is set, both write the value UTF-8 +encoded, even if the layer is some different encoding, such as the +example above. + +Ideally, all of these operators would completely ignore the C<:utf8> +state, working only with bytes, but this would result in silently +breaking existing code. To avoid this a future version of perl will +throw an exception when any of sysread(), recv(), syswrite() or send() +are called on handle with the C<:utf8> layer. -This had been illegal until v5.22, and will be illegal again in a future -Perl version. +=head1 Performance Enhancements -=head2 Module removals +=over 4 -XXX Remove this section if inapplicable. +=item * -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 overhead of scope entry and exit has been considerably reduced, so +for example subroutine calls, loops and basic blocks are all faster now. +This empty function call now takes about a third less time to execute: -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. + sub f{} f(); -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. +=item * -=over +Many languages, such as Chinese, are caseless. Perl now knows about +most modern commercially important ones, and skips much of the work when +a program tries to change case in them (like C<ucfirst()>) or match +caselessly (C<qr//i>). This will speed up a program, such as a web +server, that can operate on multiple languages, while operating on a +caseless one. -=item XXX +=item * + +C</fixed-substr/> has been made much faster. + +On platforms with a libc memchr() implementation which makes good use of +underlying hardware support, patterns which include fixed substrings will now +often be much faster; for example with glibc on a recent x86_64 CPU, this: + + $s = "a" x 1000 . "wxyz"; + $s =~ /wxyz/ for 1..30000 + +is now about 7 times faster. On systems with slow memchr(), e.g. 32-bit ARM +Raspberry Pi, there will be a small or little speedup. Conversely, some +pathological cases, such as C<"ab" x 1000 =~ /aa/> will be slower now; up to 3 +times slower on the rPi, 1.5x slower on x86_64. + +=item * + +Faster addition, subtraction and multiplication. + +Since 5.8.0, arithmetic became slower due to the need to support +64-bit integers. To deal with 64-bit integers, a lot more corner +cases need to be checked, which adds time. We now detect common +cases where there is no need to check for those corner cases, +and special-case them. + +=item * + +Preincrement, predecrement, postincrement, and postdecrement have been +made faster by internally splitting the functions which handled multiple +cases into different functions. + +=item * + +Creating Perl debugger data structures (see L<perldebguts/"Debugger Internals">) +for XSUBs and const subs has been removed. This removed one glob/scalar combo +for each unique C<.c> file that XSUBs and const subs came from. On startup +(C<perl -e"0">) about half a dozen glob/scalar debugger combos were created. +Loading XS modules created more glob/scalar combos. These things were created +regardless if the perl debugger was being used or not, unlike for pure perl +subs, and ignores that the perl debugger can not debug C code. + +=item * + +On Win32, C<stat>ing or C<-X>ing a path, if the file or directory does not +exist, is now 3.5x faster than before. + +=item * -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. +Single arguments in list assign are now slightly faster: + + ($x) = (...); + (...) = ($x); + +=item * + +Less peak memory is now used when compiling regular expression patterns. =back -[ List each other deprecation as a =head2 entry ] +=head1 Modules and Pragmata -=head1 Performance Enhancements +=head2 Updated Modules and Pragmata + +XXX: todo -XXX Changes which enhance performance without changing behaviour go here. -There may well be none in a stable release. +=head1 Documentation + +=head2 Changes to Existing Documentation -[ List each enhancement as a =item entry ] +=head3 L<perlapi> =over 4 =item * -XXX +The process of using undocumented globals has been documented, namely, that one +should send email to L<perl5-porters@perl.org|mailto:perl5-porters@perl.org> +first to get the go-ahead for documenting and using an undocumented function or +global variable. =back -=head1 Modules and Pragmata +=head3 L<perlcall> -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. +=over 4 -[ Within each section, list entries as a =item entry ] +=item * -=head2 New Modules and Pragmata +A number of cleanups have been made to perlcall, including: =over 4 =item * -XXX +use EXTEND(SP, n) and PUSHs() instead of XPUSHs() where applicable +and update prose to match + +=item * + +add POPu, POPul and POPpbytex to the "complete list of POP macros" +and clarify the documentation for some of the existing entries, and +a note about side-effects + +=item * + +add API documentation for POPu and POPul + +=item * + +use ERRSV more efficiently + +=item * + +approaches to thread-safety storage of SVs. =back -=head2 Updated Modules and Pragmata +=back + +=head3 L<perlfunc> =over 4 =item * -L<XXX> has been upgraded from version A.xx to B.yy. +The documentation of C<hex> has been revised to clarify valid inputs. + +=item * + +Better explain meaning of negative PIDs in C<waitpid>. +L<[perl #127080]|https://rt.perl.org/Ticket/Display.html?id=127080> + +=item * + +General cleanup: there's more consistency now (in POD usage, grammar, code +examples), better practices in code examples (use of C<my>, removal of bareword +filehandles, dropped usage of C<&> when calling subroutines, ...), etc. =back -=head2 Removed Modules and Pragmata +=head3 L<perlguts> =over 4 =item * -XXX +A new section has been added, L<perlguts/"Dynamic Scope and the Context +Stack">, which explains how the perl context stack works. =back -=head1 Documentation +=head3 L<perlmodlib> -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>. +=over 4 -=head2 New Documentation +=item * -XXX Changes which create B<new> files in F<pod/> go here. +We now recommend contacting the module-authors list or PAUSE in seeking +guidance on the naming of modules. -=head3 L<XXX> +=back -XXX Description of the purpose of the new file here +=head3 L<perlop> -=head2 Changes to Existing Documentation +=over 4 + +=item * + +The documentation of C<qx//> now describes how C<$?> is affected. + +=back + +=head3 L<perlpolicy> + +=over 4 + +=item * + +This note has been added to perlpolicy: + + While civility is required, kindness is encouraged; if you have any doubt + about whether you are being civil, simply ask yourself, "Am I being kind?" + and aspire to that. + +=back + +=head3 L<perlreftut> + +=over 4 + +=item * + +Fix some examples to be L<strict> clean. + +=back + +=head3 L<perlrebackslash> + +=over 4 + +=item * + +Clarify that in languages like Japanese and Thai, dictionary lookup +is required to determine word boundaries. + +=back + +=head3 L<perlsub> + +=over 4 + +=item * + +Updated to note that anonymous subroutines can have signatures. + +=back + +=head3 L<perlsyn> + +=over 4 + +=item * -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. +Fixed a broken example where C<=> was used instead of +C<==> in conditional in do/while example. -=head3 L<XXX> +=back + +=head3 L<perltie> =over 4 =item * -XXX Description of the change here +The usage of C<FIRSTKEY> and C<NEXTKEY> has been clarified. + +=back + +=head3 L<perlunicode> + +=over 4 + +=item * + +Discourage use of 'In' prefix for Unicode Block property. + +=back + +=head3 L<perlvar> + +=over 4 + +=item * + +The documentation of C<$@> was reworded to clarify that it is not just for +syntax errors in C<eval>. +L<[perl #124034]|https://rt.perl.org/Ticket/Display.html?id=124034> + +=item * + +The specific true value of C<$!{E...}> is now documented, noting that it is +subject to change and not guaranteed. + +=item * + +Use of C<$OLD_PERL_VERSION> is now discouraged. + +=back + +=head3 L<perlxs> + +=over 4 + +=item * + +The documentation of C<PROTOTYPES> has been corrected; they are I<disabled> +by default, not I<enabled>. =back @@ -171,21 +596,65 @@ The following additions or changes have been made to diagnostic output, including warnings and fatal error messages. For the complete list of diagnostic messages, see L<perldiag>. -XXX New or changed warnings emitted by the core's C<C> code go here. Also -include any changes in L<perldiag> that reconcile it to the C<C> code. - =head2 New Diagnostics -XXX Newly added diagnostic messages go under here, separated into New Errors -and New Warnings - =head3 New Errors =over 4 =item * -XXX L<message|perldiag/"message"> +L<%s must not be a named sequence in transliteration operator|perldiag/"%s must not be a named sequence in transliteration operator"> + +(F) Transliteration (C<tr///> and C<y///>) transliterates individual +characters. But a named sequence by definition is more than an +individual charater, and hence doing this operation on it doesn't make +sense. + +=item * + +L<Can't find Unicode property definition "%s" in regex;|perldiag/"Can't find Unicode property definition "%s" in regex; marked by <-- HERE in m/%s/"> + +=item * + +L<Can't redeclare "%s" in "%s"|perldiag/"Can't redeclare "%s" in "%s""> + +(F) A "my", "our" or "state" declaration was found within another declaration, +such as C<my ($x, my($y), $z)> or C<our (my $x)>. + +=item * + +L<Character following \p must be '{' or a single-character Unicode property name in regex;|perldiag/"Character following \%c must be '{' or a single-character Unicode property name in regex; marked by <-- HERE in m/%s/"> + +=item * + +L<Empty \%c in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol> +|perldiag/"Empty \%c in regex; marked by <-- HERE in mE<sol>%sE<sol>"> + +=item * + +L<Illegal user-defined property name|perldiag/"Illegal user-defined property name"> + +=item * + +L<Invalid number '%s' for -C option.|perldiag/"Invalid number '%s' for -C option."> + +(F) You supplied a number to the -C option that either has extra leading +zeroes or overflows perl's unsigned integer representation. + +=item * + +L<<< Sequence (?... not terminated in regex; marked by S<<-- HERE> in mE<sol>%sE<sol>|perldiag/"Sequence (?... not terminated in regex; marked by <-- HERE in mE<sol>%sE<sol>" >>> + +=item * + +L<<< Sequence (?PE<lt>... not terminated in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol> +|perldiag/"Sequence (?PE<lt>... not terminated in regex; marked by <-- HERE in mE<sol>%sE<sol>" >>> + +=item * + +L<Sequence (?PE<gt>... not terminated in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol> +|perldiag/"Sequence (?PE<gt>... not terminated in regex; marked by <-- HERE in mE<sol>%sE<sol>"> =back @@ -195,203 +664,1053 @@ XXX L<message|perldiag/"message"> =item * -XXX L<message|perldiag/"message"> +L<Assuming NOT a POSIX class since %s in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol>| +perldiag/Assuming NOT a POSIX class since %s in regex; marked by <-- HERE in mE<sol>%sE<sol>> + +=item * + +L<%s() is deprecated on :utf8 handles|perldiag/"%s() is deprecated on :utf8 handles"> + +(W deprecated) The sysread(), recv(), syswrite() and send() operators +are deprecated on handles that have the C<:utf8> layer, either +explicitly, or implicitly, eg., with the C<:encoding(UTF-16LE)> layer. + +Both sysread() and recv() currently use only the C<:utf8> flag for the +stream, ignoring the actual layers. Since sysread() and recv() do no +UTF-8 validation they can end up creating invalidly encoded scalars. + +Similarly, syswrite() and send() use only the C<:utf8> flag, otherwise +ignoring any layers. If the flag is set, both write the value UTF-8 +encoded, even if the layer is some different encoding, such as the +example above. + +Ideally, all of these operators would completely ignore the C<:utf8> +state, working only with bytes, but this would result in silently +breaking existing code. To avoid this a future version of perl will +throw an exception when any of sysread(), recv(), syswrite() or send() +are called on handle with the C<:utf8> layer. =back =head2 Changes to Existing Diagnostics -XXX Changes (i.e. rewording) of diagnostic messages go here - =over 4 =item * -XXX Describe change here - -=back +Accessing the C<IO> part of a glob as C<FILEHANDLE> instead of C<IO> is no +longer deprecated. It is discouraged to encourage uniformity (so that, for +example, one can grep more easily) but it will not be removed. +L<[perl #127060]|https://rt.perl.org/Ticket/Display.html?id=127060> -=head1 Utility Changes +=item * -XXX Changes to installed programs such as F<perlbug> and F<xsubpp> go here. -Most of these are built within the directory F<utils>. +The diagnostic C<< Hexadecimal float: internal error >> has been changed to +C<< Hexadecimal float: internal error (%s) >> to include more information. -[ 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. ] +=item * -=head2 L<XXX> +L<Can't modify non-lvalue subroutine call of &%s|perldiag/"Can't modify non-lvalue subroutine call of &%s"> -=over 4 +This error now reports the name of the non-lvalue subroutine you attempted to +use as an lvalue. =item * -XXX +When running out of memory during an attempt the increase the stack +size, previously, perl would die using the cryptic message +C<< panic: av_extend_guts() negative count (-9223372036854775681) >>. +This has been fixed to show the prettier message: +L<< Out of memory during stack extend|perldiag/"Out of memory during %s extend" >> =back =head1 Configuration and Compilation -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. +=over 4 -[ List changes as a =item entry ]. +=item * -=over 4 +C<Configure> now acts as if the C<-O> option is always passed, allowing command +line options to override saved configuration. This should eliminate confusion +when command line options are ignored for no obvious reason. C<-O> is now +permitted, but ignored. + +=item * + +Bison 3.0 is now supported. =item * -XXX +F<Configure> no longer probes for F<libnm> by default. Originally +this was the "New Math" library, but the name has been re-used by the +GNOME NetworkManager. +L<[perl #127131]|https://rt.perl.org/Ticket/Display.html?id=127131> + +=item * + +Added F<Configure> probes for C<newlocale>, C<freelocale>, and C<uselocale>. + +=item * + +C<< PPPort.so/PPPort.dll >> no longer get installed, as they are +not used by C<< PPPort.pm >>, only by its test files. + +=item * + +It is now possible to specify which compilation date to show on +C<< perl -V >> output, by setting the macro C<< PERL_BUILD_DATE >>. + +=item * + +Using the C<NO_HASH_SEED> define in combination with the default hash algorithm +C<PERL_HASH_FUNC_ONE_AT_A_TIME_HARD> resulted in a fatal error while compiling +the interpreter, since Perl 5.17.10. This has been fixed. + +=item * + +F<Configure> should handle spaces in paths a little better. + +=item * + +No longer generate EBCDIC POSIX-BC tables. We don't believe anyone is +using Perl and POSIX-BC at this time, and by not generating these tables +it saves time during development, and makes the resulting tar ball smaller. + +=item * + +The GNU Make makefile for Win32 now supports parallel builds. [perl #126632] + +=item * + +You can now build perl with MSVC++ on Win32 using GNU Make. [perl #126632] + +=item * + +The Win32 miniperl now has a real C<getcwd> which increases build performance +resulting in C<getcwd()> being 605x faster in Win32 miniperl. =back =head1 Testing -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 -[ List each test improvement as a =item entry ] +=item * -=over 4 +A new test (F<t/op/aassign.t>) has been added to test the list assignment operator +C<OP_AASSIGN>. =item * -XXX +Parallel building has been added to the dmake C<makefile.mk> makefile. All +Win32 compilers are supported. =back =head1 Platform Support -XXX Any changes to platform support should be listed in the sections below. +=head2 Platform-Specific Notes + +=over 4 + +=item AmigaOS + +The AmigaOS port has been reintegrated into the main tree, based off of +Perl 5.22.1. -[ Within the sections, list each platform as a =item entry with specific -changes as paragraphs below it. ] +=item Cygwin -=head2 New Platforms +Tests are more robust against unusual cygdrive prefixes. +L<[perl #126834]|https://rt.perl.org/Ticket/Display.html?id=126834> -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. +=item EBCDIC =over 4 -=item XXX-some-platform +=item UTF-EBCDIC extended + +UTF-EBCDIC is like UTF-8, but for EBCDIC platforms. It now has been +extended so that it can represent code points up to 2 ** 64 - 1 on +platforms with 64-bit words. This brings it into parity with UTF-8. +This enhancement requires an incompatible change to the representation +of code points in the range 2 ** 30 to 2 ** 31 -1 (the latter was the +previous maximum representable code point). This means that a file that +contains one of these code points, written out with previous versions of +perl cannot be read in, without conversion, by a perl containing this +change. We do not believe any such files are in existence, but if you +do have one, submit a ticket at L<perlbug@perl.org|mailto:perlbug@perl.org>, +and we will write a conversion script for you. + +=item EBCDIC C<cmp()> and C<sort()> fixed for UTF-EBCDIC strings -XXX +Comparing two strings that were both encoded in UTF-8 (or more +precisely, UTF-EBCDIC) did not work properly until now. Since C<sort()> +uses C<cmp()>, this fixes that as well. + +=item EBCDIC C<tr///> and C<y///> fixed for C<\N{}>, and C<S<use utf8>> ranges + +Perl v5.22 introduced the concept of portable ranges to regular +expression patterns. A portable range matches the same set of +characters no matter what platform is being run on. This concept is now +extended to C<tr///>. See +C<L<trE<sol>E<sol>E<sol>|perlop/trE<sol>SEARCHLISTE<sol>REPLACEMENTLISTE<sol>cdsr>>. + +There were also some problems with these operations under S<C<use +utf8>>, which are now fixed =back -=head2 Discontinued Platforms +=item FreeBSD -XXX List any platforms that this version of perl no longer compiles on. +=over -=over 4 +=item * + +Use the C<fdclose()> function from FreeBSD if it is available. +L<[perl #126847]|https://rt.perl.org/Ticket/Display.html?id=126847> + +=back + +=item IRIX -=item XXX-some-platform +=over + +=item * + +Under some circumstances IRIX stdio fgetc() and fread() set the errno to +C<ENOENT>, which made no sense according to either IRIX or POSIX docs. Errno +is now cleared in such cases. +L<[perl #123977]|https://rt.perl.org/Ticket/Display.html?id=123977> + +=item * -XXX +Problems when multiplying long doubles by infinity have been fixed. +L<[perl #126396]|https://rt.perl.org/Ticket/Display.html?id=126396> =back -=head2 Platform-Specific Notes +=item MacOS X -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 -=over 4 +=item * -=item XXX-some-platform +Until now OS X builds of perl have specified a link target of 10.3 (Panther, +2003) but have not specified a compiler target. From now on, builds of perl on +OS X 10.6 or later (Snow Leopard, 2008) by default capture the current OS X +version and specify that as the explicit build target in both compiler and +linker flags, thus preserving binary compatibility for extensions built later +regardless of changes in OS X, SDK, or compiler and linker versions. To +override the default value used in the build and preserved in the flags, +specify C<export MACOSX_DEPLOYMENT_TARGET=10.N> before configuring and building +perl, where 10.N is the version of OS X you wish to target. In OS X 10.5 or +earlier there is no change to the behavior present when those systems were +current; the link target is still OS X 10.3 and there is no explicit compiler +target. -XXX +=item * + +Builds with both -DDEBUGGING and threading enabled would fail with a +"panic: free from wrong pool" error when built or tested from Terminal +on OS X. This was caused by perl's internal management of the +environment conflicting with an atfork handler using the libc +setenv() function to update the environment. + +Perl now uses setenv()/unsetenv() to update the environment on OS X. +L<[perl #126240]|https://rt.perl.org/Ticket/Display.html?id=126240> =back -=head1 Internal Changes +=item Solaris -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. +All Solaris now builds shared libperl. -[ List each change as a =item entry ] +Solaris and variants like OpenIndiana now always build with the shared +Perl library (Configure -Duseshrplib). This was required for the +OpenIndiana builds, but this has also been the setting for Oracle/Sun +Perl builds for several years. -=over 4 +=item Tru64 + +Workaround where Tru64 balks when prototypes are listed as +C<< PERL_STATIC_INLINE >>, but where the test is build with +C<< -DPERL_NO_INLINE_FUNCTIONS >>. + +=item VMS + +=over + +=item * + +On VMS, the math function prototypes in C<math.h> are now visible under C++. +Now building the POSIX extension with C++ will no longer crash. + +=item * + +VMS has had C<setenv/unsetenv> since v7.0 (released in 1996), C<Perl_vmssetenv> +now always uses C<setenv/unsetenv>. + +=item * + +Perl now implements its own C<killpg> by scanning for processes in the +specified process group, which may not mean exactly the same thing as a Unix +process group, but allows us to send a signal to a parent (or master) process +and all of its sub-processes. At the perl level, this means we can now send a +negative pid like so: + + kill SIGKILL, -$pid; + +to signal all processes in the same group as C<$pid>. =item * -XXX +For those C<%ENV> elements based on the CRTL environ array, we've always +preserved case when setting them but did look-ups only after upcasing the +key first, which made lower- or mixed-case entries go missing. This problem +has been corrected by making C<%ENV> elements derived from the environ array +case-sensitive on look-up as well as case-preserving on store. + +=item * + +Environment look-ups for C<PERL5LIB> and C<PERLLIB> previously only +considered logical names, but now consider all sources of C<%ENV> as +determined by C<PERL_ENV_TABLES> and as documented in L<perlvms/%ENV>. + +=item * + +The minimum supported version of VMS is now v7.3-2, released in 2003. As a +side effect of this change, VAX is no longer supported as the terminal +release of OpenVMS VAX was v7.3 in 2001. =back -=head1 Selected Bug Fixes +=item Win32 -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>. +=over -[ List each fix as a =item entry ] +=item * -=over 4 +A new build option C<USE_NO_REGISTRY> has been added to the makefiles. This +option is off by default, meaning the default is to do Windows registry +lookups. This option stops Perl from looking inside the registry for anything. +For what values are looked up in the registry see L<perlwin32>. Internally, in +C, the name of this option is C<WIN32_NO_REGISTRY>. =item * -A race condition which occurred when computing C<"$!"> with threads -activated has been fixed. This showed up only on Darwin platforms. A -related problem on Cygwin platforms involving UTF-8 strings has also -been fixed. [perl #127708] +The behavior of Perl using C<HKEY_CURRENT_USER\Software\Perl> and +C<HKEY_LOCAL_MACHINE\Software\Perl> to lookup certain values, including C<%ENV> +vars starting with C<PERL> has changed. Previously, the 2 keys were checked +for entries at all times through Perl processes life time even if they did not +exist. For performance reasons, now, if the root key (i.e. +C<HKEY_CURRENT_USER\Software\Perl> or C<HKEY_LOCAL_MACHINE\Software\Perl>) does +not exist at process start time, it will not be checked again for C<%ENV> +override entries for the remainder of the Perl processes life. This more +closely matches Unix behaviour in that the environment is copied or inherited +on startup and changing the variable in the parent process or another process +or editing F<.bashrc> will not change the environmental variable in other +existing, running, processes. + +=item * + +One glob fetch was removed for each C<-X> or C<stat> call whether done from +Perl code or internally from Perl's C code. The glob being looked up was +C<${^WIN32_SLOPPY_STAT}> which is a special variable. This makes C<-X> and +C<stat> slightly faster. + +=item * + +During miniperl's process startup, during the build process, 4 to 8 IO calls +related to the process starting F<.pl> and the F<buildcustomize.pl> file were +removed from the code opening and executing the first 1 or 2 F<.pl> files. + +=item * + +Builds using Microsoft Visual C++ 2003 and earlier no longer produce +an "INTERNAL COMPILER ERROR" message. [perl #126045] + +=item * + +Visual C++ 2013 builds will now execute on XP and higher. Previously they would +only execute on Vista and higher. + +=item * + +You can now build perl with GNU Make and GCC. [perl #123440] + +=item * + +C<truncate($filename, $size)> now works for files over 4GB in size. +[perl #125347] + +=item * + +Parallel building has been added to the dmake C<makefile.mk> makefile. All +Win32 compilers are supported. + +=item * + +Building a 64-bit perl with a 64-bit GCC but a 32-bit gmake would +result in an invalid C<$Config{archname}> for the resulting perl. +[perl #127584] + +=item * + +Errors set by Winsock functions are now put directly into C<$^E>, and the +relevant C<WSAE*> error codes are now exported from the L<Errno> and L<POSIX> +modules for testing this against. + +The previous behaviour of putting the errors (converted to POSIX-style C<E*> +error codes since Perl 5.20.0) into C<$!> was buggy due to the non-equivalence +of like-named Winsock and POSIX error constants, a relationship between which +has unfortunately been established in one way or another since Perl 5.8.0. + +The new behaviour provides a much more robust solution for checking Winsock +errors in portable software without accidentally matching POSIX tests that were +intended for other OSes and may have different meanings for Winsock. + +The old behaviour is currently retained, warts and all, for backwards +compatibility, but users are encouraged to change any code that tests C<$!> +against C<E*> constants for Winsock errors to instead test C<$^E> against +C<WSAE*> constants. After a suitable deprecation period, the old behaviour may +be removed, leaving C<$!> unchanged after Winsock function calls, to avoid any +possible confusion over which error variable to check. + +=back + +=item ppc64el floating point + +The floating point format of ppc64el (Debian naming for little-endian +PowerPC) is now detected correctly. =back -=head1 Known Problems +=head1 Internal Changes -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. +=over 4 -[ List each fix as a =item entry ] +=item * + +The implementation of perl's context stack system, and its internal API, +have been heavily reworked. Note that no significant changes have been +made to any external APIs, but XS code which relies on such internal +details may need to be fixed. The main changes are: =over 4 =item * -XXX +The C<PUSHBLOCK()>, C<POPSUB()> etc. macros have been replaced with static +inline functions such as C<cx_pushblock()>, C<cx_popsub()> etc. These use +function args rather than implicitly relying on local vars such as +C<gimme> and C<newsp> being available. Also their functionality has +changed: in particular, C<cx_popblock()> no longer decrements +C<cxstack_ix>. The ordering of the steps in the C<pp_leave*> functions +involving C<cx_popblock()>, C<cx_popsub()> etc. has changed. See the new +documentation, L<perlguts/"Dynamic Scope and the Context Stack">, for +details on how to use them. + +=item * + +Various macros, which now consistently have a CX_ prefix, have been added: + + CX_CUR(), CX_LEAVE_SCOPE(), CX_POP() + +or renamed: + + CX_POP_SAVEARRAY(), CX_DEBUG(), CX_PUSHSUBST(), CX_POPSUBST() + +=item * + +C<cx_pushblock()> now saves C<PL_savestack_ix> and C<PL_tmps_floor>, so +C<pp_enter*> and C<pp_leave*> no longer do + + ENTER; SAVETMPS; ....; LEAVE + +=item * + +C<cx_popblock()> now also restores C<PL_curpm>. + +=item * + +In C<dounwind()> for every context type, the current savestack frame is +now processed before each context is popped; formerly this was only done +for sub-like context frames. This action has been removed from +C<cx_popsub()> and placed into its own macro, C<CX_LEAVE_SCOPE(cx)>, which +must be called before C<cx_popsub()> etc. + +C<dounwind()> now also does a C<cx_popblock()> on the last popped frame +(formerly it only did the C<cx_popsub()> etc. actions on each frame). + +=item * + +The temps stack is now freed on scope exit; previously, temps created +during the last statement of a block wouldn't be freed until the next +C<nextstate> following the block (apart from an existing hack that did +this for recursive subs in scalar context); and in something like +C<f(g())>, the temps created by the last statement in C<g()> would +formerly not be freed until the statement following the return from +C<f()>. + +=item * + +Most values that were saved on the savestack on scope entry are now +saved in suitable new fields in the context struct, and saved and +restored directly by C<cx_pushfoo()> and C<cx_popfoo()>, which is much +faster. + +=item * + +Various context struct fields have been added, removed or modified. + +=item * + +The handling of C<@_> in C<cx_pushsub()> and C<cx_popsub()> has been +considerably tidied up, including removing the C<argarray> field from the +context struct, and extracting out some common (but rarely used) code into +a separate function, C<clear_defarray()>. Also, useful subsets of +C<cx_popsub()> which had been unrolled in places like C<pp_goto> have been +gathered into the new functions C<cx_popsub_args()> and +C<cx_popsub_common()>. + +=item * + +C<pp_leavesub> and C<pp_leavesublv> now use the same function as the rest +of the C<pp_leave*>'s to process return args. + +=item * + +C<CXp_FOR_PAD> and C<CXp_FOR_GV> flags have been added, and +C<CXt_LOOP_FOR> has been split into C<CXt_LOOP_LIST>, C<CXt_LOOP_ARY>. + +=item * + +Some variables formerly declared by C<dMULTICALL> (but not documented) have +been removed. =back -=head1 Errata From Previous Releases +=item * -=over 4 +The obscure C<PL_timesbuf> variable, effectively a vestige of Perl 1, has +been removed. It was documented as deprecated in Perl 5.20, with a statement +that it would be removed early in the 5.21.x series; that has now finally +happened. +L<[perl #121351]|https://rt.perl.org/Ticket/Display.html?id=121351> + +=item * + +Remove unwarranted assertion in C<Perl_newATTRSUB_x()>. If a stub subroutine +definition with a prototype has been seen, then any subsequent stub (or +definition) of the same subroutine with an attribute was causing an assertion +failure because of a null pointer. +L<[perl #126845]|https://rt.perl.org/Ticket/Display.html?id=126845> + +=item * + +Replace C<::> with C<__> in C<ExtUtils::ParseXS> like it's done for +parameters/return values. This is more consistent, and simplifies writing XS +code wrapping C++ classes into a nested Perl namespace (it requires only +a typedef for C<Foo__Bar> rather than two, one for C<Foo_Bar> and the other +for C<Foo::Bar>). + +=item * + +Deprecate the C<to_utf8_case()> function, see +L<http://nntp.perl.org/group/perl.perl5.porters/233287>. + +=item * + +Perl core code and the threads extension have been annotated so that, +if Perl is configured to use threads, then during compile-time clang (3.6 +or later) will warn about suspicious uses of mutexes. +See L<http://clang.llvm.org/docs/ThreadSafetyAnalysis.html> for more +information. + +=item * + +The C<signbit()> emulation has been enhanced. This will help older +and/or more exotic platforms or configurations. =item * -XXX Add anything here that we forgot to add, or were mistaken about, in -the perldelta of a previous release. +The C<to_utf8_case> function is discouraged in favor of C<toUPPER_utf8>, +C<toTITLE_utf8>, C<toLOWER_utf8>, and C<toFOLD_utf8>. + +=item * + +EBCDIC code paths have largely been unified to avoid repetition. + +=item * + +MSWin32 code for C<$^X> has been moved out of the F<win32> directory to +F<caretx.c>, where other operating systems set that variable. + +=item * + +C<< sv_ref() >> is now part of the API. + +=item * + +L<perlapi/sv_backoff> had its return type changed from C<int> to C<void>. It +previously has always returned C<0> since Perl 5.000 stable but that was +undocumented. Although C<sv_backoff> is marked as public API, XS code is not +expected to be impacted since the proper API call would be through public API +C<sv_setsv(sv, &PL_sv_undef)>, or quasi-public C<SvOOK_off>, or non-public +C<SvOK_off> calls, and the return value of C<sv_backoff> was previously a +meaningless constant that can be rewritten as C<(sv_backoff(sv),0)>. + +=item * + +The C<EXTEND> and C<MEXTEND> macros have been improved to avoid various issues +with integer truncation and wrapping. In particular, some casts formerly used +within the macros have been removed. This means for example that passing an +unsigned nitems argument is likely to raise a compiler warning now (it's always +been documented to require a signed value; formerly int, lately SSize_t). + +=item * + +C<PL_sawalias> and C<GPf_ALIASED_SV> have been removed. + +=item * + +C<GvASSIGN_GENERATION> and C<GvASSIGN_GENERATION_set> have been removed. =back -=head1 Obituary +=head1 Selected Bug Fixes -XXX If any significant core contributor has died, we've added a short obituary -here. +=over 4 -=head1 Acknowledgements +=item * + +It now works properly to specify a user-defined property, such as + + qr/\p{mypkg1::IsMyProperty}/i + +with C</i> caseless matching, an explicit package name, and +I<IsMyProperty> not defined at the time of the pattern compilation. + +=item * + +Perl's memcpy(), memmove(), memset() and memcmp() fallbacks are now +more compatible with the originals. [perl #127619] + +=item * + +Fixed the issue where a C<< s///r >>) with B<< -DPERL_NO_COW >> attempts +to modify the source SV, resulting in the program dying. [perl #127635] + +=item * + +Fixed a spurious warning about posix character classes. [perl #127581] + +=item * + +Fixed an obscure case where a pattern could fail to match. This only +occurred when matching characters from the set of C1 controls, when +the target matched string was in UTF-8, and only on EBCDIC platforms. + +=item * + +Fixed over eager warnings for C<< /[.foo.]/ >>. + +This prevents Perl from warning about constructs like C<< /[.].*[.]/ >>. +[perl #127582, #127604] + +=item * + +Narrow the filename check in F<strict.pm> and F<warnings.pm>. Previously, +it assumed that if the filename (without the F<.pmc?> extension) differed +from the package name, if was a misspelled use statement (i.e. C<use Strict> +instead of C<use strict>). We now check whether there's really a +miscapitalization happening, and not another issue. + +=item * + +Turn an assertion into a more user friendly failure when parsing +regexes. [perl #127599] + +=item * + +Correctly raise an error when trying to compile patterns with +unterminated character classes while there are trailing backslashes. +[perl #126141]. + +=item * + +Line numbers larger than 2**31-1 but less than 2**32 are no longer +returned by caller() as negative numbers. [perl #126991] + +=item * + +C<< unless ( I<assignment> ) >> now properly warns when syntax +warnings are enabled. [perl #127122] + +=item * + +Setting an C<ISA> glob to an array reference now properly adds +C<isaelem> magic to any existing elements. Previously modifying such +an element would not update the ISA cache, so method calls would call +the wrong function. Perl would also crash if the C<ISA> glob was +destroyed, since new code added in 5.23.7 would try to release the +C<isaelem> magic from the elements. [perl #127351] + +=item * + +If a here-doc was found while parsing another operator, the parser had +already read end of file, and the here-doc was not terminated, perl +could produce an assertion or a segmentation fault. This now reliably +complains about the unterminated here-doc. [perl #125540] + +=item * + +untie() would sometimes return the last value returned by the UNTIE() +handler as well as it's normal value, messing up the stack. [perl +#126621] + +=item * + +Fixed an operator precedence problem when C< castflags & 2> is true. +[perl #127474] + +=item * + +Caching of DESTROY methods could result in a non-pointer or a +non-STASH stored in the SvSTASH() slot of a stash, breaking the B +STASH() method. The DESTROY method is now cached in the MRO metadata +for the stash. [perl #126410] + +=item * + +The AUTOLOAD method is now called when searching for a DESTROY method, +and correctly sets C<$AUTOLOAD> too. [perl #124387] [perl #127494] + +=item * + +Avoid parsing beyond the end of the buffer when processing a C<#line> +directive with no filename. [perl #127334] + +=item * + +Perl now raises a warning when a regular expression pattern looks like +it was supposed to contain a POSIX class, like C<qr/[[:alpha:]]/>, but +there was some slight defect in its specification which causes it to +instead be treated as a regular bracketed character class. An example +would be missing the second colon in the above like this: +C<qr/[[:alpha]]/>. This compiles to match a sequence of two characters. +The second is C<"]">, and the first is any of: C<"[">, C<":">, C<"a">, +C<"h">, C<"l">, or C<"p">. This is unlikely to be the intended +meaning, and now a warning is raised. No warning is raised unless the +specification is very close to one of the 14 legal POSIX classes. (See +L<perlrecharclass/POSIX Character Classes>.) +[perl #8904] + +=item * + +Certain regex patterns involving a complemented POSIX class in an +inverted bracketed character class, and matching something else +optionally would improperly fail to match. An example of one that could +fail is C</qr/_?[^\Wbar]\x{100}/>. This has been fixed. +[perl #127537] + +=item * + +Perl 5.22 added support to the C99 hexadecimal floating point notation, +but sometimes misparses hex floats. This has been fixed. +[perl #127183] + +=item * + +A regression that allowed undeclared barewords in hash keys to work despite +strictures has been fixed. +L<[perl #126981]|https://rt.perl.org/Ticket/Display.html?id=126981> + +=item * + +Calls to the placeholder C<&PL_sv_yes> used internally when an C<import()> +or C<unimport()> method isn't found now correctly handle scalar context. +L<[perl #126042]|https://rt.perl.org/Ticket/Display.html?id=126042> + +=item * + +Report more context when we see an array where we expect to see an +operator and avoid an assertion failure. +L<[perl #123737]|https://rt.perl.org/Ticket/Display.html?id=123737> + +=item * + +Modifying an array that was previously a package C<@ISA> no longer +causes assertion failures or crashes. +L<[perl #123788]|https://rt.perl.org/Ticket/Display.html?id=123788> + +=item * + +Retain binary compatibility across plain and DEBUGGING perl builds. +L<[perl #127212]|https://rt.perl.org/Ticket/Display.html?id=127212> + +=item * + +Avoid leaking memory when setting C<$ENV{foo}> on darwin. +L<[perl #126240]|https://rt.perl.org/Ticket/Display.html?id=126240> + +=item * + +C</...\G/> no longer crashes on utf8 strings. When C<\G> is a fixed number +of characters from the start of the regex, perl needs to count back that +many characters from the current C<pos()> position and start matching from +there. However, it was counting back bytes rather than characters, which +could lead to panics on utf8 strings. + +=item * + +In some cases operators that return integers would return negative +integers as large positive integers. +L<[perl #126635]|https://rt.perl.org/Ticket/Display.html?id=126635> + +=item * + +The C<pipe()> operator would assert for DEBUGGING builds instead of +producing the correct error message. The condition asserted on is +detected and reported on correctly without the assertions, so the +assertions were removed. +L<[perl #126480]|https://rt.perl.org/Ticket/Display.html?id=126480> + +=item * + +In some cases, failing to parse a here-doc would attempt to use freed +memory. This was caused by a pointer not being restored correctly. +L<[perl #126443]|https://rt.perl.org/Ticket/Display.html?id=126443> + +=item * + +C<< @x = sort { *a = 0; $a <=> $b } 0 .. 1 >> no longer frees the GP +for *a before restoring its SV slot. +L<[perl #124097]|https://rt.perl.org/Ticket/Display.html?id=124097> + +=item * + +Multiple problems with the new hexadecimal floating point printf +format C<%a> were fixed: +L<[perl #126582]|https://rt.perl.org/Ticket/Display.html?id=126582>, +L<[perl #126586]|https://rt.perl.org/Ticket/Display.html?id=126586>, +L<[perl #126822]|https://rt.perl.org/Ticket/Display.html?id=126822> + +=item * + +Calling mg_set() in leave_scope() no longer leaks. + +=item * + +A regression from Perl v5.20 was fixed in which debugging output of regular +expression compilation was wrong. (The pattern was correctly compiled, but +what got displayed for it was wrong.) + +=item * + +C<\b{sb}> works much better. In Perl v5.22.0, this new construct didn't +seem to give the expected results, yet passed all the tests in the +extensive suite furnished by Unicode. It turns out that it was because +these were short input strings, and the failures had to do with longer +inputs. This was fixed in Perl 5.23.4, but the improvement was not +noticed until after that was released, so is included here now. + +=item * + +Certain syntax errors in +L<perlrecharclass/Extended Bracketed Character Classes> caused panics +instead of the proper error message. This has now been fixed. [perl +#126481] + +=item * + +An earlier commit added a message when a quantifier in a regular +expression was useless, but then caused the parser to skip it; +this caused the surplus quantifier to be silently ignored, instead +of throwing an error. This is now fixed. [perl #126253] + +=item * -XXX Generate this with: +The switch to building non-XS modules last in win32/makefile.mk (introduced +by design as part of the changes to enable parallel building) caused the +build of POSIX to break due to problems with the version module. This +is now fixed. + +=item * + +Improved parsing of hex float constants. + +=item * + +Fixed an issue with C<< pack >> where C<< pack "H" >> (and C<< pack "h" >>) +could read past the source when given a non-utf8 source, and a utf8 target. +[perl #126325] + +=item * + +Fixed several cases where perl would abort due to a segmentation fault, +or a C-level assert. [perl #126615], [perl #126602], [perl #126193]. + +=item * + +There were places in regular expression patterns where comments (C<(?#...)>) +weren't allowed, but should have been. This is now fixed. +L<[perl #116639]|https://rt.perl.org/Ticket/Display.html?id=116639> + +=item * + +Some regressions from Perl 5.20 have been fixed, in which some syntax errors in +L<C<(?[...])>|perlrecharclass/Extended Bracketed Character Classes> constructs +within regular expression patterns could cause a segfault instead of a proper +error message. +L<[perl #126180]|https://rt.perl.org/Ticket/Display.html?id=126180> +L<[perl #126404]|https://rt.perl.org/Ticket/Display.html?id=126404> + +=item * + +Another problem with +L<C<(?[...])>|perlrecharclass/Extended Bracketed Character Classes> +constructs has been fixed wherein things like C<\c]> could cause panics. +L<[perl #126181]|https://rt.perl.org/Ticket/Display.html?id=126181> + +=item * + +Some problems with attempting to extend the perl stack to around 2G or 4G +entries have been fixed. This was particularly an issue on 32-bit perls built +to use 64-bit integers, and was easily noticeable with the list repetition +operator, e.g. + + @a = (1) x $big_number + +Formerly perl may have crashed, depending on the exact value of C<$big_number>; +now it will typically raise an exception. +L<[perl #125937]|https://rt.perl.org/Ticket/Display.html?id=125937> + +=item * + +In a regex conditional expression C<(?(condition)yes-pattern|no-pattern)>, if +the condition is C<(?!)> then perl failed the match outright instead of +matching the no-pattern. This has been fixed. +L<[perl #126222]|https://rt.perl.org/Ticket/Display.html?id=126222> + +=item * + +The special backtracking control verbs C<(*VERB:ARG)> now all allow an optional +argument and set C<REGERROR>/C<REGMARK> appropriately as well. +L<[perl #126186]|https://rt.perl.org/Ticket/Display.html?id=126186> + +=item * + +Several bugs, including a segmentation fault, have been fixed with the bounds +checking constructs (introduced in Perl 5.22) C<\b{gcb}>, C<\b{sb}>, C<\b{wb}>, +C<\B{gcb}>, C<\B{sb}>, and C<\B{wb}>. All the C<\B{}> ones now match an empty +string; none of the C<\b{}> ones do. +L<[perl #126319]|https://rt.perl.org/Ticket/Display.html?id=126319> + +=item * + +Duplicating a closed file handle for write no longer creates a +filename of the form F<GLOB(0xXXXXXXXX)>. [perl #125115] + +=item * + +Warning fatality is now ignored when rewinding the stack. This +prevents infinite recursion when the now fatal error also causes +rewinding of the stack. [perl #123398] + +=item * + +In perl v5.22.0, the logic changed when parsing a numeric parameter to the -C +option, such that the successfully parsed number was not saved as the option +value if it parsed to the end of the argument. [perl #125381] + +=item * + +The PadlistNAMES macro is an lvalue again. + +=item * + +Zero -DPERL_TRACE_OPS memory for sub-threads. + +perl_clone_using() was missing Zero init of PL_op_exec_cnt[]. This +caused sub-threads in threaded -DPERL_TRACE_OPS builds to spew exceedingly +large op-counts at destruct. These counts would print %x as "ABABABAB", +clearly a mem-poison value. + +=item * + +A leak in the XS typemap caused one scalar to be leaked each time a C<FILE *> +or a C<PerlIO *> was C<OUTPUT:>ed or imported to Perl, since perl 5.000. These +particular typemap entries are thought to be extremely rarely used by XS +modules. [perl #124181] + +=item * + +C<alarm()> and C<sleep()> will now warn if the argument is a negative number +and return undef. Previously they would pass the negative value to the +underlying C function which may have set up a timer with a surprising value. + +=item * + +Perl can again be compiled with any Unicode version. This used to +(mostly) work, but was lost in v5.18 through v5.20. The property +C<Name_Alias> did not exist prior to Unicode 5.0. L<Unicode::UCD> +incorrectly said it did. This has been fixed. + +=item * + +Very large code-points (beyond Unicode) in regular expressions no +longer cause a buffer overflow in some cases when converted to UTF-8. +L<[perl #125826]|https://rt.perl.org/Ticket/Display.html?id=125826> + +=item * + +The integer overflow check for the range operator (...) in list +context now correctly handles the case where the size of the range is +larger than the address space. This could happen on 32-bits with +-Duse64bitint. +L<[perl #125781]|https://rt.perl.org/Ticket/Display.html?id=125781> + +=item * + +A crash with C<< %::=(); J->${\"::"} >> has been fixed. +L<[perl #125541]|https://rt.perl.org/Ticket/Display.html?id=125541> + +=item * + +C<qr/(?[ () ])/> no longer segfaults, giving a syntax error message instead. +[perl #125805] + +=item * + +Regular expression possessive quantifier v5.20 regression now fixed. +C<qr/>I<PAT>C<{>I<min>,I<max>C<}+>C</> is supposed to behave identically +to C<qr/(?E<gt>>I<PAT>C<{>I<min>,I<max>C<})/>. Since v5.20, this didn't +work if I<min> and I<max> were equal. [perl #125825] + +=item * + +C<< BEGIN <> >> no longer segfaults and properly produces an error +message. [perl #125341] + +=item * + +In C<tr///> an illegal backwards range like C<tr/\x{101}-\x{100}//> was +not always detected, giving incorrect results. This is now fixed. + +=back + +=head1 Acknowledgements - perl Porting/acknowledgements.pl v5.23.9..HEAD +[ XXX: generate this just in time, Ricardo! ] =head1 Reporting Bugs If you find what you think is a bug, you might check the articles recently posted to the comp.lang.perl.misc newsgroup and the perl bug database at -L<https://rt.perl.org/> . There may also be information at -L<http://www.perl.org/> , the Perl Home Page. +https://rt.perl.org/ . There may also be information at +http://www.perl.org/ , the Perl Home Page. If you believe you have an unreported bug, please run the L<perlbug> program included with your release. Be sure to trim your bug down to a tiny but |