In perl.git, the branch blead has been updated <http://perl5.git.perl.org/perl.git/commitdiff/d140c31c14a293eb1c6aa8aa84e624b656e09212?hp=fd6afd6bd875aa4fbcbfb537381e18bcdfc95edf>
- Log ----------------------------------------------------------------- commit d140c31c14a293eb1c6aa8aa84e624b656e09212 Author: Aaron Crane <a...@cpan.org> Date: Sat May 16 17:05:42 2015 +0100 perldelta: typo fixes and wordsmithing ----------------------------------------------------------------------- Summary of changes: pod/perldelta.pod | 294 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 153 insertions(+), 141 deletions(-) diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 50a4c7e..2c57317 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -60,14 +60,14 @@ See L<perlrebackslash/\b{}, \b, \B{}, \B> for details. =head2 C<no re> covers more and is lexical -Previously running C<no re> would only turn off a few things. Now it +Previously running C<no re> would turn off only a few things. Now it turns off all the enabled things. For example, previously, you couldn't turn off debugging, once enabled, inside the same block. =head2 Non-Capturing Regular Expression Flag Regular expressions now support a C</n> flag that disables capturing -and filling in C<$1>, C<$2>, etc... inside of groups: +and filling in C<$1>, C<$2>, etc inside of groups: "hello" =~ /(hi|hello)/n; # $1 is not set @@ -78,12 +78,12 @@ See L<perlre/"n"> for more information. =head2 C<use re 'strict'> This applies stricter syntax rules to regular expression patterns -compiled within its scope, which hopefully will alert you to typos and +compiled within its scope. This will hopefully alert you to typos and other unintentional behavior that backwards-compatibility issues prevent -us from doing in normal regular expression compilations. Because the +us from reporting in normal regular expression compilations. Because the behavior of this is subject to change in future Perl releases as we gain -experience, using this pragma will raise a category -C<experimental::re_strict> warning. +experience, using this pragma will raise a warning of category +C<experimental::re_strict>. See L<'strict' in re|re/'strict' mode>. =head2 Unicode 7.0 (with correction) is now supported @@ -129,7 +129,8 @@ Variables and subroutines can now be aliased by assigning to a reference: \$c = \$d; \&x = \&y; -Or by using a backslash before a C<foreach> iterator variable, which is +Aliasing can also be accomplished +by using a backslash before a C<foreach> iterator variable; this is perhaps the most useful idiom this feature provides: foreach \%hash (@array_of_hash_refs) { ... } @@ -145,9 +146,9 @@ See L<perlref/Assigning to References> C<prototype()> with no arguments now infers C<$_>. L<[perl #123514]|https://rt.perl.org/Ticket/Display.html?id=123514>. -=head2 New "const" subroutine attribute +=head2 New C<:const> subroutine attribute -The "const" attribute can be applied to an anonymous subroutine. It +The C<const> attribute can be applied to an anonymous subroutine. It causes the new sub to be executed immediately whenever one is created (i.e. when the C<sub> expression is evaluated). Its value is captured and used to create a new constant subroutine that is returned. This @@ -191,10 +192,10 @@ as the left-hand side is a valid lvalue. This allows S<C<(undef,undef,$foo) =head2 Infinity and NaN (not-a-number) handling improved -Floating point values are able to hold the special values infinity (also --infinity), and NaN (not-a-number). Now we more robustly recognize and -propagate the value in computations, and on output normalize them to C<Inf> and -C<NaN>. +Floating point values are able to hold the special values infinity, negative +infinity, and NaN (not-a-number). Now we more robustly recognize and +propagate the value in computations, and on output normalize them to C<Inf>, +C<-Inf>, or C<NaN>. See also the L<POSIX> enhancements. @@ -204,7 +205,8 @@ Parsing and printing of floating point values has been improved. As a completely new feature, hexadecimal floating point literals (like C<0x1.23p-4>) are now supported, and they can be output with -C<printf %a>. +C<printf "%a">. See L<perldata/Scalar value constructors> for more +details. =head2 Packing infinity or not-a-number into a character is now fatal @@ -260,9 +262,10 @@ and OS X has enforced the same for many years. =head2 Subroutine signatures moved before attributes The experimental sub signatures feature, as introduced in 5.20, parsed -signatures after attributes. In this release, the positioning has been -moved such that signatures occur after the subroutine name (if any) and -before the attribute list (if any). +signatures after attributes. In this release, following feedback from users +of the experimental feature, the positioning has been moved such that +signatures occur after the subroutine name (if any) and before the attribute +list (if any). =head2 C<&> and C<\&> prototypes accepts only subs @@ -286,10 +289,10 @@ unrelated modules that are included in the same program. =head2 List slices returning empty lists -List slices return an empty list now only if the original list was empty +List slices now return an empty list only if the original list was empty (or if there are no indices). Formerly, a list slice would return an empty list if all indices fell outside the original list; now it returns a list -of undef values. +of undef values in that case. L<[perl #114498]|https://rt.perl.org/Ticket/Display.html?id=114498>. =head2 C<\N{}> with a sequence of multiple spaces is now a fatal error @@ -300,7 +303,7 @@ This has been deprecated since v5.18. =head2 S<C<use UNIVERSAL '...'>> is now a fatal error Importing functions from C<UNIVERSAL> has been deprecated since v5.12, and -is now a fatal error. S<C<"use UNIVERSAL">> without any arguments is still +is now a fatal error. S<C<use UNIVERSAL>> without any arguments is still allowed. =head2 In double-quotish C<\cI<X>>, I<X> must now be a printable ASCII character @@ -355,14 +358,14 @@ Really old Perl let you omit the C<@> on array names and the C<%> on hash names in some spots. This has issued a deprecation warning since Perl 5.000, and is no longer permitted. -=head2 C<"$!"> text is now in English outside C<"use locale"> scope +=head2 C<"$!"> text is now in English outside the scope of C<use locale> Previously, the text, unlike almost everything else, always came out based on the current underlying locale of the program. (Also affected -on some systems is C<"$^E>".) For programs that are unprepared to -handle locale, this can cause garbage text to be displayed. It's better -to display text that is translatable via some tool than garbage text -which is much harder to figure out. +on some systems is C<"$^E">.) For programs that are unprepared to +handle locale differences, this can cause garbage text to be displayed. +It's better to display text that is translatable via some tool than +garbage text which is much harder to figure out. =head2 C<"$!"> text will be returned in UTF-8 when appropriate @@ -371,20 +374,20 @@ when the text is actually non-ASCII UTF-8. This will enable programs that are set up to be locale-aware to properly output messages in the user's native language. Code that needs to continue the 5.20 and earlier behavior can do the stringification within the scopes of both -S<C<'use bytes'>> and S<C<'use locale ":messages">>. No other Perl +S<C<use bytes>> and S<C<use locale ":messages">>. No other Perl operations will be affected by locale; only C<$!> and C<$^E> stringification. The -'bytes' pragma causes the UTF-8 flag to not be set, just as in previous +C<bytes> pragma causes the UTF-8 flag to not be set, just as in previous Perl releases. This resolves L<[perl #112208]|https://rt.perl.org/Ticket/Display.html?id=112208>. =head2 Support for C<?PATTERN?> without explicit operator has been removed -Starting regular expressions matching only once directly with the -question mark delimiter is now a syntax error, so that the question mark -can be available for use in new operators. Write C<m?PATTERN?> instead, -explicitly using the C<m> operator: the question mark delimiter still -invokes match-once behaviour. +The C<m?PATTERN?> construct, which allows matching a regex only once, +previously had an alternative form that was written directly with a question +mark delimiter, omitting the explicit C<m> operator. This usage has produced +a deprecation warning since 5.14.0. It is now a syntax error, so that the +question mark can be available for use in new operators. =head2 C<defined(@array)> and C<defined(%hash)> are now fatal errors @@ -417,8 +420,8 @@ which brings it into conformity with similarly prototyped built-in functions: =head2 Setting C<${^ENCODING}> to anything but C<undef> -This variable allows Perl scripts to be written in a non-ASCII, -non-UTF-8 encoding. However, it affects all modules globally, leading +This variable allows Perl scripts to be written in an encoding other than +ASCII or UTF-8. However, it affects all modules globally, leading to wrong answers and segmentation faults. New scripts should be written in UTF-8; old scripts should be converted to UTF-8, which is easily done with the L<encoding> pragma. @@ -430,8 +433,8 @@ for longer variable names, allowing the one-character name to be a punctuation character or even invisible (a non-graphic). Perl v5.20 deprecated the ASCII-range controls as such a name. Now, all non-graphic characters that formerly were allowed are deprecated. -The practical effect of this occurs only when not under C<S<"use -utf8">>, and affects just the C1 controls (code points 0x80 through +The practical effect of this occurs only when not under C<S<use +utf8>>, and affects just the C1 controls (code points 0x80 through 0xFF), NO-BREAK SPACE, and SOFT HYPHEN. =head2 Inlining of C<sub () { $var }> with observable side-effects @@ -490,7 +493,7 @@ It is now deprecated to say something like any of the following: That is, now C<x> should only occur once in any string of contiguous regular expression pattern modifiers. We do not believe there are any occurrences of this in all of CPAN. This is in preparation for a future -Perl release having C</xx> mean to allow white-space for readability in +Perl release having C</xx> permit white-space for readability in bracketed character classes (those enclosed in square brackets: C<[...]>). @@ -513,7 +516,7 @@ release; it will allow future extensions to the language to happen. =head2 Making all warnings fatal is discouraged The documentation for L<fatal warnings|warnings/Fatal Warnings> notes that -C<< use warnings FATAL => 'all' >> is discouraged and provides stronger +C<< use warnings FATAL => 'all' >> is discouraged, and provides stronger language about the risks of fatal warnings in general. =head1 Performance Enhancements @@ -539,7 +542,8 @@ C<(...)x1>, C<("constant")x0> and C<($scalar)x0> are now optimised in list context. If the right-hand argument is a constant 1, the repetition operator disappears. If the right-hand argument is a constant 0, the whole expression is optimised to the empty list, so long as the left-hand -argument is a simple scalar or constant. C<(foo())x0> is not optimised. +argument is a simple scalar or constant. (That is, C<(foo())x0> is not +subject to this optimisation.) =item * @@ -569,19 +573,20 @@ used to sometimes. =item * -C<length> is up to 20% faster for non-magical/non-tied scalars containing a -string if it is a non-utf8 string or if is in scope of C<use bytes>. +There is a performance improvement of up to 20% when C<length> is applied to +a non-magical, non-tied string, and either C<use bytes> is in scope or the +string doesn't use UTF-8 internally. =item * -On most perl builds with 64 bit integers, non-magical/non-tied scalars -that contain only a floating point value now use between 8 and 32 less bytes -of memory, depending on OS. +On most perl builds with 64-bit integers, memory usage for non-magical, +non-tied scalars containing only a floating point value has been reduced +by between 8 and 32 bytes, depending on OS. =item * -In C<@array = split>, the assignment can be optimized away with C<split> -writing directly to the array. This optimisation was happening only for +In C<@array = split>, the assignment can be optimized away, so that C<split> +writes directly to the array. This optimisation was happening only for package arrays other than C<@_>, and only sometimes. Now this optimisation happens almost all the time. @@ -590,7 +595,7 @@ optimisation happens almost all the time. C<join> is now subject to constant folding. So for example C<join "-", "a", "b"> is converted at compile-time to C<"a-b">. Moreover, C<join> with a scalar or constant for the separator and a -single-item list to join is simplified to a stringification. The +single-item list to join is simplified to a stringification, and the separator doesn't even get evaluated. =item * @@ -624,7 +629,7 @@ Hash lookups where the key is a constant are faster. =item * -Subroutines with an empty prototype and bodies containing just C<undef> are now +Subroutines with an empty prototype and a body containing just C<undef> are now eligible for inlining. L<[perl #122728]|https://rt.perl.org/Ticket/Display.html?id=122728> @@ -651,7 +656,7 @@ platforms. Win32 Perl uses 8 KB less of per-process memory than before for every perl process, because some data is now memory mapped from disk and shared -between perl processes from the same perl binary. +between processes from the same perl binary. =back @@ -731,7 +736,8 @@ Clarify where C<NUL> may be embedded or is required to terminate a string. =item * -Previously missing documentation due to formatting errors are now included. +Some documentation that was previously missing due to formatting errors is +now included. =item * @@ -793,8 +799,8 @@ L<[perl #121523]|https://rt.perl.org/Ticket/Display.html?id=121523> =item * Note that C<exec LIST> and C<system LIST> may fall back to the shell on -Win32. Only C<exec PROGRAM LIST> and C<system PROGRAM LIST> indirect object -syntax will reliably avoid using the shell. +Win32. Only the indirect-object syntax C<exec PROGRAM LIST> and +C<system PROGRAM LIST> will reliably avoid using the shell. This has also been noted in L<perlport>. @@ -831,13 +837,14 @@ Information on EBCDIC handling has been added =item * -Documentation has been added illustrating the perils of assuming the contents -of static memory pointed to by the return values of Perl wrappers for C library -functions doesn't change. +Documentation has been added illustrating the perils of assuming that +there is no change to the contents of static memory pointed to by the +return values of Perl's wrappers for C library functions. =item * -Recommended replacements for tmpfile, atoi, strtol, and strtoul added. +Replacements for C<tmpfile>, C<atoi>, C<strtol>, and C<strtoul> are now +recommended. =item * @@ -880,7 +887,7 @@ set out. =item * -Out-of-date VMS-specific information has been fixed/simplified. +Out-of-date VMS-specific information has been fixed and/or simplified. =item * @@ -894,8 +901,8 @@ Notes about EBCDIC have been added. =item * -The C</x> modifier has been clarified to note that comments cannot be continued -onto the next line by escaping them. +The description of the C</x> modifier has been clarified to note that +comments cannot be continued onto the next line by escaping them. =back @@ -1855,7 +1862,7 @@ C<USE_CPLUSPLUS> to the value "define". =item * -List form of pipe open has been implemented for Win32. Note: unlike +The list form of piped open has been implemented for Win32. Note: unlike C< system LIST >> this does not fall back to the shell. L<[perl #121159]|https://rt.perl.org/Ticket/Display.html?id=121159> @@ -1882,8 +1889,8 @@ already not supported by F<Configure> on POSIX systems. =item * -Between 2 and 6 ms and 7 I/O calls have been saved per attempt to open a perl -module for each path in C<@INC>. +Between 2 and 6 milliseconds and seven I/O calls have been saved per attempt +to open a perl module for each path in C<@INC>. =item * @@ -1896,8 +1903,8 @@ C<%I64d> is now being used instead of C<%lld> for MinGW. =item * In the experimental C<:win32> layer, a crash in C<open> was fixed. Also -opening C</dev/null>, which works the Win32 Perl's normal C<:unix> layer, was -implemented for C<:win32>. +opening C</dev/null> (which works under Win32 Perl's default C<:unix> +layer) was implemented for C<:win32>. L<[perl #122224]|https://rt.perl.org/Ticket/Display.html?id=122224> =item * @@ -1936,8 +1943,8 @@ L<[perl #120120]|https://rt.perl.org/Ticket/Display.html?id=120120> =item * -C<c99> options have been cleaned up, hints look for C<solstudio> -as well as C<SUNWspro>, and support for native C<setenv> has been added. +C<c99> options have been cleaned up; hints look for C<solstudio> +as well as C<SUNWspro>; and support for native C<setenv> has been added. =back @@ -1974,7 +1981,7 @@ should now be written as: for (; OpHAS_SIBLING(kid); kid = OpSIBLING(kid)) { ... } -For altering optrees, A general-purpose function C<op_sibling_splice()> +For altering optrees, a general-purpose function C<op_sibling_splice()> has been added, which allows for manipulation of a chain of sibling ops. By analogy with the Perl function C<splice()>, it allows you to cut out zero or more ops from a sibling chain and replace them with zero or more @@ -1991,7 +1998,7 @@ C<op_sibling_splice()> these macros won't maintain consistency in the parent at the same time (e.g. by updating C<op_first> and C<op_last> where appropriate). -A C-level C<Perl_op_parent()> function and a perl-level C<B::OP::parent()> +A C-level C<Perl_op_parent()> function and a Perl-level C<B::OP::parent()> method have been added. The C function only exists under C<-DPERL_OP_PARENT> builds (using it is build-time error on vanilla perls). C<B::OP::parent()> exists always, but on a vanilla build it @@ -2072,22 +2079,24 @@ L<[perl #123103]|https://rt.perl.org/Ticket/Display.html?id=123103>. =item * -Accessing L<perlapi/CvPADLIST> in an XSUB is now forbidden. -C<CvPADLIST> has been reused for a different internal purpose for XSUBs. Guard all -C<CvPADLIST> expressions with C<CvISXSUB()> if your code doesn't already block -XSUB CV*s from going through optree CV* expecting code. +Accessing L<perlapi/CvPADLIST> on an XSUB is now forbidden. + +C<CvPADLIST> has been reused for a different internal purpose for XSUBs. +Padlist-inspecting code that isn't otherwise prevented from seeing an XSUB +C<CV*> should guard all C<CvPADLIST> expressions with C<CvISXSUB()>. =item * -SVs of type SVt_NV are now bodyless when a build configure and platform allow -it, specifically C<sizeof(NV) <= sizeof(IV)>. The bodyless trick is the same one -as for IVs since 5.9.2, but for NVs, unlike IVs, is not guaranteed on all -platforms and build configurations. +SVs of type C<SVt_NV> are now bodyless when the build configuration and +platform allow it; specifically, bodyless NVs require C<< sizeof(NV) <= +sizeof(IV) >>. The bodyless trick is the same one as used for IVs since +5.9.2 (though in the case of IVs, it is used of platform and build +configuration). =item * -The C<$DB::single>, C<$DB::signal> and C<$DB::trace> now have set and -get magic that stores their values as IVs and those IVs are used when +The C<$DB::single>, C<$DB::signal> and C<$DB::trace> now have set- and +get-magic that stores their values as IVs, and those IVs are used when testing their values in C<pp_dbstate>. This prevents perl from recursing infinitely if an overloaded object is assigned to any of those variables. @@ -2095,9 +2104,9 @@ L<[perl #122445]|https://rt.perl.org/Ticket/Display.html?id=122445>. =item * -C<Perl_tmps_grow> which is marked as public API but is undocumented, has been -removed from public API. If you use C<EXTEND_MORTAL> macro in your XS code to -preextend the mortal stack, you are unaffected by this change. +C<Perl_tmps_grow>, which is marked as public API but is undocumented, has +been removed from the public API. This change does not affect XS code that +uses the C<EXTEND_MORTAL> macro to preextend the mortal stack. =item * @@ -2107,13 +2116,13 @@ should be fully qualified. See L<perlapi/cv_name>. =item * -Internally Perl no longer uses the C<SVs_PADMY> flag. C<SvPADMY()> now -returns a true value for anything not marked PADTMP. C<SVs_PADMY> is now +Perl's internals no longer uses the C<SVs_PADMY> flag. C<SvPADMY()> now +returns a true value for anything not marked C<PADTMP>. C<SVs_PADMY> is now defined as 0. =item * -The macros SETsv and SETsvUN have been removed. They were no longer used +The macros C<SETsv> and C<SETsvUN> have been removed. They were no longer used in the core since commit 6f1401dc2a, and have not been found present on CPAN. @@ -2131,10 +2140,10 @@ respectively. =item * A new opcode class, C<< METHOP >>, has been introduced. It holds -class/method related info needed at runtime to improve performance +information used at runtime for improve the performance of class/object method calls. -C<< OP_METHOD >> and C<< OP_METHOD_NAMED >> are moved from being +C<< OP_METHOD >> and C<< OP_METHOD_NAMED >> have changed from being C<< UNOP/SVOP >> to being C<< METHOP >>. =item * @@ -2169,9 +2178,10 @@ L<[perl #120441]|https://rt.perl.org/Ticket/Display.html?id=120441> =item * -Added L<perlapi/sync_locale>. Changing the program's locale should be avoided -by XS code. Nevertheless, certain non-Perl libraries called from XS, such as -C<Gtk> do so. When this happens, Perl needs to be told that the locale has +The L<perlapi/sync_locale> function has been added to the public API. +Changing the program's locale should be avoided by XS code. Nevertheless, +certain non-Perl libraries called from XS need to do so, such as C<Gtk>. +When this happens, Perl needs to be told that the locale has changed. Use this function to do so, before returning to Perl. =item * @@ -2180,8 +2190,8 @@ The defines and labels for the flags in the C<op_private> field of OPs are now auto-generated from data in F<regen/op_private>. The noticeable effect of this is that some of the flag output of C<Concise> might differ slightly, and the flag output of C<perl -Dx> may differ considerably (they both use the same set -of labels now). Also in debugging builds, there is a new assert in -C<op_free()> that checks that the op doesn't have any unrecognized flags set in +of labels now). Also, debugging builds now have a new assertion in +C<op_free()> to ensure that the op doesn't have any unrecognized flags set in C<op_private>. =item * @@ -2216,7 +2226,7 @@ C<Perl_cast_ulong>, C<Perl_cast_i32>, C<Perl_cast_iv>, C<Perl_cast_uv>, C<Perl_cv_const_sv>, C<Perl_mg_find>, C<Perl_mg_findext>, C<Perl_mg_magical>, C<Perl_mini_mktime>, C<Perl_my_dirfd>, C<Perl_sv_backoff>, C<Perl_utf8_hop>. -Users of the public API prefix-less calls remain unaffected. +Uses of the prefix-less calls that form the public API remain unaffected. =item * @@ -2259,7 +2269,8 @@ index is still done using C<aelemfast>. =item * C<pack("D", $x)> and C<pack("F", $x)> now zero the padding on x86 long double -builds. GCC 4.8 and later, under some build options, would either overwrite +builds. Under some build options on GCC 4.8 and later, they would either +overwrite the zero-initialized padding, or bypass the initialized buffer entirely. This caused F<op/pack.t> to fail. L<[perl #123971]|https://rt.perl.org/Ticket/Display.html?id=123971> @@ -2296,8 +2307,8 @@ L<[perl #124099]|https://rt.perl.org/Ticket/Display.html?id=124099> =item * -UTF-8 variable names used in array indexes, unquoted UTF-8 HERE-document -terminators and UTF-8 function names all now work correctly. +UTF-8 now works correctly in function names, in unquoted HERE-document +terminators, and in variable names used as array indexes. L<[perl #124113]|https://rt.perl.org/Ticket/Display.html?id=124113> =item * @@ -2317,7 +2328,7 @@ L<[perl #123995]|https://rt.perl.org/Ticket/Display.html?id=123995> =item * -C<split> in the scope of lexical C<$>_ has been fixed not to fail assertions. +C<split> in the scope of lexical C<$_> has been fixed not to fail assertions. L<[perl #123763]|https://rt.perl.org/Ticket/Display.html?id=123763> =item * @@ -2348,8 +2359,8 @@ L<[perl #124004]|https://rt.perl.org/Ticket/Display.html?id=124004> =item * -A regression in the behaviour of the C<readline> built-in function, caused by -the introduction of the C<< <<>> >> operator, has been fixed. +A regression has been fixed in the behaviour of the C<readline> built-in +function, caused by the introduction of the C<<< <<>> >>> operator. L<[perl #123990]|https://rt.perl.org/Ticket/Display.html?id=123990> =item * @@ -2446,8 +2457,8 @@ L<[perl #100819]|https://rt.cpan.org/Ticket/Display.html?id=100819>. A bug in regular expression patterns that could lead to segfaults and other crashes has been fixed. This occurred only in patterns compiled -with C<"/i">, while taking into account the current POSIX locale (this usually -means they have to be compiled within the scope of C<S<"use locale">>), +with C</i> while taking into account the current POSIX locale (which usually +means they have to be compiled within the scope of C<S<use locale>>), and there must be a string of at least 128 consecutive bytes to match. L<[perl #123539]|https://rt.perl.org/Ticket/Display.html?id=123539>. @@ -2484,7 +2495,7 @@ longer do. =item * Some cases of nested lexical state subs inside anonymous subs could cause -'Bizarre copy' errors or possibly even crash. +'Bizarre copy' errors or possibly even crashes. =item * @@ -2495,7 +2506,7 @@ L<[perl #123553]|https://rt.perl.org/Ticket/Display.html?id=123553>. =item * -Certain syntax errors in substitutions, such as C<< s/${E<lt>E<gt>{})// >>, would +Certain syntax errors in substitutions, such as C<< s/${<>{})// >>, would crash, and had done so since Perl 5.10. (In some cases the crash did not start happening till 5.16.) The crash has, of course, been fixed. L<[perl #123542]|https://rt.perl.org/Ticket/Display.html?id=123542>. @@ -2530,13 +2541,13 @@ L<[perl #122703]|https://rt.perl.org/Ticket/Display.html?id=122703>. =item * -op_free() no longer crashes due to a stack overflow when freeing a +C<op_free()> no longer crashes due to a stack overflow when freeing a deeply recursive op tree. L<[perl #108276]|https://rt.perl.org/Ticket/Display.html?id=108276>. =item * -scalarvoid() would crash due to a stack overflow when processing a +C<scalarvoid()> would crash due to a stack overflow when processing a deeply recursive op tree. L<[perl #108276]|https://rt.perl.org/Ticket/Display.html?id=108276>. @@ -2560,7 +2571,7 @@ L<[perl #122695]|https://rt.perl.org/Ticket/Display.html?id=122695>. =item * -Sometimes the assignment in C<@array = split> gets optimised and C<split> +Sometimes the assignment in C<@array = split> gets optimised so that C<split> itself writes directly to the array. This caused a bug, preventing this assignment from being used in lvalue context. So C<(@a=split//,"foo")=bar()> was an error. (This bug probably goes back to @@ -2570,7 +2581,7 @@ L<[perl #123057]|https://rt.perl.org/Ticket/Display.html?id=123057>. =item * -When argument lists that fail the checks installed by subroutine +When an argument list fails the checks installed by subroutine signatures, the resulting error messages now give the file and line number of the caller, not of the called subroutine. L<[perl #121374]|https://rt.perl.org/Ticket/Display.html?id=121374>. @@ -2601,7 +2612,7 @@ $_. =item * C<(...) x ...> in scalar context used to corrupt the stack if one operand -were an object with "x" overloading, causing erratic behaviour. +was an object with "x" overloading, causing erratic behaviour. L<[perl #121827]|https://rt.perl.org/Ticket/Display.html?id=121827>. =item * @@ -2617,7 +2628,7 @@ and C<setpgrp>. =item * List assignments were sometimes buggy if the same scalar ended up on both -sides of the assignment due to used of C<tied>, C<values> or C<each>. The +sides of the assignment due to use of C<tied>, C<values> or C<each>. The result would be the wrong value getting assigned. =item * @@ -2647,8 +2658,8 @@ throw the attributes away. An exception is made for the little-known =item * Inlining of subs with an empty prototype is now more consistent than -before. Previously, a sub with multiple statements, all but the last -optimised away, would be inlinable only if it were an anonymous sub +before. Previously, a sub with multiple statements, of which all but the last +were optimised away, would be inlinable only if it were an anonymous sub containing a string C<eval> or C<state> declaration or closing over an outer lexical variable (or any anonymous sub under the debugger). Now any sub that gets folded to a single constant after statements have been @@ -2740,12 +2751,12 @@ fixed. =item * -system() and friends should now work properly on more Android builds. +C<system()> and friends should now work properly on more Android builds. Due to an oversight, the value specified through C<-Dtargetsh> to F<Configure> would end up being ignored by some of the build process. This caused perls cross-compiled for Android to end up with defective versions of C<system()>, -exec() and backticks: the commands would end up looking for C</bin/sh> +C<exec()> and backticks: the commands would end up looking for C</bin/sh> instead of C</system/bin/sh>, and so would fail for the vast majority of devices, leaving C<$!> as C<ENOENT>. @@ -2763,7 +2774,7 @@ mirror character. =item * -C<< s///e >> on tainted utf8 strings got C<< pos() >> messed up. This bug, +C<< s///e >> on tainted utf8 strings corrupted C<< pos() >>. This bug, introduced in 5.20, is now fixed. L<[perl #122148]|https://rt.perl.org/Ticket/Display.html?id=122148>. @@ -2815,7 +2826,7 @@ L<[perl #69456]|https://rt.perl.org/Ticket/Display.html?id=69456> =item * -When parsing a funny character (C<$> C<@> C<%> C<&)> followed by braces, +When parsing a sigil (C<$> C<@> C<%> C<&)> followed by braces, the parser no longer tries to guess whether it is a block or a hash constructor (causing a syntax error when it guesses the latter), since it can only be a block. @@ -2900,10 +2911,10 @@ compilation were being output more than once. This has now been fixed. =item * -A regression has been fixed that was introduced in Perl 5.20.0 (fixed in Perl -5.20.1 as well as here) in which a UTF-8 encoded regular expression pattern -that contains a single ASCII lowercase letter does not match its uppercase -counterpart. +Perl 5.20.0 introduced a regression in which a UTF-8 encoded regular +expression pattern that contains a single ASCII lowercase letter did not +match its uppercase counterpart. That has been fixed in both 5.20.1 and +5.22.0. L<[perl #122655]|https://rt.perl.org/Ticket/Display.html?id=122655> =item * @@ -2938,7 +2949,8 @@ as C<"(unknown)">. =item * -C<sort subname LIST> now supports lexical subs for the comparison routine. +C<sort subname LIST> now supports using a lexical sub as the comparison +routine. =item * @@ -2956,11 +2968,11 @@ ago. =item * -An optimization in C<split> to treat C<split/^/> like C<split/^/m> had the -unfortunate side-effect of also treating C<split/\A/> like C<split/^/m>, which -it should not. This has been fixed. (Note, however, that C<split/^x/> does -not behave like C<split/^x/m>, which is also considered to be a bug and will be -fixed in a future version.) +An optimization in C<split> to treat C<split /^/> like C<split /^/m> had the +unfortunate side-effect of also treating C<split /\A/> like C<split /^/m>, +which it should not. This has been fixed. (Note, however, that C<split /^x/> +does not behave like C<split /^x/m>, which is also considered to be a bug and +will be fixed in a future version.) L<[perl #122761]|https://rt.perl.org/Ticket/Display.html?id=122761> =item * @@ -3018,7 +3030,7 @@ results. =item * In S<C<() = @array = split>>, the S<C<() =>> at the beginning no longer confuses -the optimizer, making it assume a limit of 1. +the optimizer into assuming a limit of 1. =item * @@ -3027,14 +3039,14 @@ L<[perl #122966]|https://rt.perl.org/Ticket/Display.html?id=122966>. =item * -Fixed a NaN double to long double conversion error on VMS. For quiet NaNs +Fixed a NaN double-to-long-double conversion error on VMS. For quiet NaNs (and only on Itanium, not Alpha) negative infinity instead of NaN was produced. =item * -Fixed the issue that caused C<< make distclean >> to leave files behind -that shouldn't. +Fixed the issue that caused C<< make distclean >> to incorrectly leave some +files behind. L<[perl #122820]|https://rt.perl.org/Ticket/Display.html?id=122820>. =item * @@ -3047,33 +3059,33 @@ L<[cpan #85570]|https://rt.cpan.org/Ticket/Display.html?id=85570>. =item * During the pattern optimization phase, we no longer recurse into -C<GOSUB>/C<GOSTART> when not C<SCF_DO_SUBSTR>. This prevents the optimizer -to run "forever" and exhaust all memory. +C<GOSUB>/C<GOSTART> when C<SCF_DO_SUBSTR> is false. This prevents the +optimizer from running "forever" and exhausting all memory. L<[perl #122283]|https://rt.perl.org/Ticket/Display.html?id=122283>. =item * -F<< t/op/crypt.t >> now performs SHA-256 algorithm if the default one +F<< t/op/crypt.t >> now uses the SHA-256 algorithm if the default one is disabled. L<[perl #121591]|https://rt.perl.org/Ticket/Display.html?id=121591>. =item * -Fixed an off-by-one error when setting the size of shared array. +Fixed an off-by-one error when setting the size of a shared array. L<[perl #122950]|https://rt.perl.org/Ticket/Display.html?id=122950>. =item * -Fixed a bug that could cause perl to execute an infinite loop during +Fixed a bug that could cause perl to enter an infinite loop during compilation. L<[perl #122995]|https://rt.perl.org/Ticket/Display.html?id=122995>. =item * -On Win32, restoring in a child pseudo-process a variable that was -C<local()>ed in a parent pseudo-process before the C<fork> happened caused -memory corruption and a crash in the child pseudo-process (and therefore OS -process). +On Win32, if a variable was C<local>-ized in a pseudo-process that then +forked, restoring the original value in the child pseudo-process caused +memory corruption and a crash in the child pseudo-process (and therefore the +OS process). L<[perl #40565]|https://rt.perl.org/Ticket/Display.html?id=40565>. =item * @@ -3085,8 +3097,8 @@ L<[perl #123245]|https://rt.perl.org/Ticket/Display.html?id=123245>. =item * -Non-ASCII lexical sub names (use in error messages) on longer have extra -junk on the end. +Non-ASCII lexical sub names now appear without trailing junk when they +appear in error messages. =item * @@ -3121,7 +3133,7 @@ global variable even with a lexical variable in scope. =item * In perl 5.20.0, C<sort CORE::fake> where 'fake' is anything other than a -keyword started chopping of the last 6 characters and treating the result +keyword started chopping off the last 6 characters and treating the result as a sort sub name. The previous behaviour of treating "CORE::fake" as a sort sub name has been restored. L<[perl #123410]|https://rt.perl.org/Ticket/Display.html?id=123410>. @@ -3173,7 +3185,7 @@ characters. Ranges containing C<\N{...}> in the C<tr///> (and C<y///>) transliteration operators are treated differently than the equivalent -ranges in regular expression pattersn. They should, but don't, cause +ranges in regular expression patterns. They should, but don't, cause the values in the ranges to all be treated as Unicode code points, and not native ones. (L<perlre/Version 8 Regular Expressions> gives details as to how it should work.) -- Perl5 Master Repository