From 71e282305f9b71d09169003111711c272e0719fd Mon Sep 17 00:00:00 2001 From: "Philippe Bruhat (BooK)" Date: Wed, 11 Jun 2025 19:00:51 +0200 Subject: [PATCH 1/6] prepare perldelta for the release of v5.42.0 Co-authored-by: Thibault Duponchelle Co-authored-by: Eric Herman --- pod/perldelta.pod | 1270 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 1175 insertions(+), 95 deletions(-) diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 4e026e9764da..ba530d2080b7 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -5,35 +5,216 @@ [ 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.41.14 +perldelta - what is new for perl v5.42.0 =head1 DESCRIPTION -This document describes differences between the 5.41.13 release and the 5.41.14 +This document describes differences between the 5.42.0 release and the 5.40.0 release. -If you are upgrading from an earlier release such as 5.41.12, first read -L, which describes differences between 5.41.12 and 5.41.13. - =head1 Notice XXX Any important notices here =head1 Core Enhancements -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 section. +=head2 More CORE:: subs + +C has been added as a subroutine to the CORE:: namespace. + +Previously, code like C<&CORE::chdir($dir)> or C<< my $ref = \&CORE::chdir; +$ref->($dir) >> would throw an error saying C<&CORE::chdir cannot be called +directly>. These cases are now fully supported. + +=head2 New pragma C> + +This allows you to declare that the portion of a program for the +remainder of the lexical scope of this pragma is encoded either entirely +in ASCII (for S>) or if UTF-8 is allowed +as well (for S>). No other encodings are +accepted. The second form is entirely equivalent to S>, and +may be used interchangeably with that. + +The purpose of this pragma is to catch cases early where you forgot to +specify S>. + +S> is automatically enabled within the +lexical scope of a S> or higher. + +S> turns off all this checking for the remainder of +its lexical scope. The meaning of non-ASCII characters is then undefined. + +=head2 New C<:writer> attribute on field variables + +Classes defined using C are now able to automatically +create writer accessors for scalar fields, by using the C<:writer> attribute, +similar to the way that C<:reader> already creates reader accessors. + + class Point { + field $x :reader :writer :param; + field $y :reader :writer :param; + } + + my $p = Point->new( x => 20, y => 40 ); + $p->set_x(60); + +=head2 New C and C operators + +Two new experimental features have been added, which add two new list-processing +operators, C and C. + + use v5.40; + use feature 'keyword_all'; + no warnings 'experimental::keyword_all'; + + my @numbers = ... + + if(all { $_ % 2 == 0 } @numbers) { + say "All the numbers are even"; + } + +These keywords operate similarly to C except that they only +ever return true or false, testing if any (or all) of the elements in +the list make the testing block yield true. Because of this they can +short-circuit, avoiding the need to test any further elements if a given +element determines the eventual result. + +These are inspired by the same-named functions in the L module, +except that they are implemented as direct core operators, and thus perform +faster, and do not produce an additional subroutine call stack frame for +invoking the code block. + +The feature flags enabling those keywords have been named L +and L to avoid confusion with to the ability of the +C module to refer to all of its features by using the C<:all> +export tag. [L] + +The related experimental warning flags are consequently named +C and C. + +=head2 Apostrophe as a global name separator can be disabled + +This was deprecated in Perl 5.38 and removed as scheduled in perl +5.41.3, but after some discussion has been reinstated by default. + +This can be controlled with the C +feature which is enabled by default, but is disabled from the 5.41 +feature bundle onwards. + +If you want to disable use within your own code you can explicitly +disable the feature: + + no feature "apostrophe_as_package_separator"; + +Note that disabling this feature only prevents use of apostrophe as a +package separator within code; symbolic references still treat C<'> as +C<::> with the feature disabled: + + my $symref = "My'Module'Var"; + # default features + my $x = $My'Module'Var; # fine + no feature "apostrophe_as_package_separator"; + no strict "refs"; + my $y = $$symref; # like $My::Module::Var + my $z = $My'Module'Var; # syntax error + +[L] -[ List each enhancement as a =head2 entry ] +=head2 Lexical method declaration using C + +Like C since Perl version 5.18, C can now be prefixed with the +C keyword. This declares a subroutine that has lexical, rather than +package visibility. See L for more detail. + +=head2 Lexical method invocation operator C<< ->& >> + +Along with the ability to declare methods lexically, this release also permits +invoking a lexical subroutine as if it were a method, bypassing the usual +name-based method resolution by name. + +Combined with lexical method declaration, these two new abilities create the +effect of having private methods. + +=head2 Switch and Smart Match operator reinstated + +The "switch" feature and the smartmatch operator, C<~~>, were introduced in +v5.10. Their behavior was significantly changed in v5.10.1. When the +"experiment" system was added in v5.18.0, switch and smartmatch were +retroactively declared experimental. Over the years, proposals to fix or +supplement the features have come and gone. + +They were deprecated in Perl v5.38.0 and scheduled for removal in Perl +5.42.0, and entirely removed in Perl 5.41.3. + +After some discussion these have been re-instated in 5.41.9. + +Using them no longer produces a deprecation warning. + +Switch itself still requires the C feature, which is enabled +by default for feature bundles from v5.9.5 through to v5.34. Switch +remains disabled in feature bundles 5.35 and later, but can be +separately enabled: + + # no switch here + use v5.10; + # switch here + use v5.36; + # no switch here + use feature "switch"; + # switch here + +Smart match now requires the C feature, which is enabled +by default and included in all feature bundles up to 5.40. It is +disabled for the 5.41 feature bundle and later, but can be separately +enabled: + + # smartmatch here + use v5.41; + # no smartmatch here + use feature "smartmatch"; + # smartmatch here + +[L] + +=head2 New C API macro + +A new API macro has been added, which is used to obtain the second string +buffer out of a "vstring" SV, in a manner similar to the C macro which +obtains the regular string buffer out of a regular SV. + + STRLEN len; + const char *vstr_pv = SvVSTRING(sv, vstr_len); + +See L>. + +=head2 Unicode 16.0 supported + +Perl now supports Unicode 16.0 +L including the changes +introduced in 15.1 L. + +=head2 Assigning logical xor C<^^=> operator + +Perl 5.40.0 introduced the logical medium-precedence exclusive-or operator +C<^^>. It was not noticed at the time that the assigning variant C<^^=> was +also missing. This is now added. =head1 Security -XXX Any security-related notices go here. In particular, any security -vulnerabilities closed should be noted here rather than in the -L section. +=head2 [CVE-2024-56406] Heap buffer overflow vulnerability with tr// -[ List each security issue as a =head2 entry ] +A heap buffer overflow vulnerability was discovered in Perl. + +When there are non-ASCII bytes in the left-hand-side of the C operator, +C can overflow the destination pointer C. + + $ perl -e '$_ = "\x{FF}" x 1000000; tr/\xFF/\x{100}/;' + Segmentation fault (core dumped) + +It is believed that this vulnerability can enable Denial of Service or +Arbitrary Code Execution attacks on platforms that lack sufficient defenses. + +Discovered by: Nathan Mills. =head1 Incompatible Changes @@ -45,6 +226,67 @@ XXX For a release on a stable branch, this section aspires to be: [ List each incompatible change as a =head2 entry ] +=head2 Removed containing function references for functions without eval + +Perl 5.40 reintroduced unconditional references from functions to their +containing functions to fix a bug introduced in Perl 5.18 that broke the +special behaviour of C in package C which is used by the +debugger. + +In some cases this change led to circular reference chains between closures and +other existing references, resulting in memory leaks. + +This change has been reverted, fixing +[L] but re-breaking +[L]. + +This means the reference loops won't occur, and that lexical variables and +functions from enclosing functions may not be visible in the debugger. + +Note that calling C in a function unconditionally causes a function +to reference its enclosing functions as it always has. + +=head2 Switch and Smart Match operator reinstated + +The "switch" feature and the smartmatch operator, C<~~>, were introduced in +v5.10. Their behavior was significantly changed in v5.10.1. When the +"experiment" system was added in v5.18.0, switch and smartmatch were +retroactively declared experimental. Over the years, proposals to fix or +supplement the features have come and gone. + +They were deprecated in Perl v5.38.0 and scheduled for removal in Perl +5.42.0, and entirely removed in Perl 5.41.3. + +After some discussion these have been re-instated. + +Using them no longer produces a deprecation warning. + +Switch itself still requires the C feature, which is enabled +by default for feature bundles from v5.9.5 through to v5.34. Switch +remains disabled in feature bundles 5.35 and later, but can be +separately enabled: + + # no switch here + use v5.10; + # switch here + use v5.36; + # no switch here + use feature "switch"; + # switch here + +Smart match now requires the C feature, which is enabled +by default and included in all feature bundles up to 5.40. It is +disabled for the 5.41 feature bundle and later, but can be separately +enabled: + + # smartmatch here + use v5.41; + # no smartmatch here + use feature "smartmatch"; + # smartmatch here + +[L] + =head1 Deprecations XXX Any deprecated features, syntax, modules etc. should be listed here. @@ -80,16 +322,115 @@ as an updated module in the L section. =head1 Performance Enhancements -XXX Changes which enhance performance without changing behaviour go here. -There may well be none in a stable release. +=over 4 -[ List each enhancement as an =item entry ] +=item * -=over 4 +Constant-folded strings are now sharable via the Copy-on-Write mechanism. +[L] + +The following code would previously have allocated eleven string buffers, +each containing one million "A"s: + +C + +Now a single buffer is allocated and shared between a CONST OP and +the ten scalar elements of L<@scalars>. + +Note that any code using this sort of constant to simulate memory leaks +(perhaps in test files) must now permute the string in order to trigger +a string copy and the allocation of separate buffers. For example, +C<("A" x 1_000_000).time> might be a suitable small change. =item * -XXX +C: additional efficiency for mortal copies. + +=item * + +C now runs at the same speed regardless of the internal +representation of its operand, as long as the only characters being +translated are ASCII-range, for example C. Previously, if +the internal encoding was UTF-8, a slower, more general implementation +was used. + +=item * + +Code that uses the C function from the L module to generate +a list of index/value pairs out of array which is then passed into a +two-variable C list to unpack those again is now optimised to be more +efficient. + + my @array = (...); + + foreach my ($idx, $val) (builtin::indexed @array) { + ... + } + +In particular, a temporary list twice the size of the original +array is no longer generated. Instead, the list iterates down the array +in-place directly, in the same way that C would do. + +=item * + +Code that uses the C function from the L module to generate +a list of index/value pairs out of an array or list which is then passed into +a two-variable C list to unpack those again is now optimised to be +more efficient. + + my @array = (...); + + foreach my ($idx, $val) (builtin::indexed @array) { + ... + } + +Z<> + + foreach my ($idx, $val) (builtin::indexed LIST...) { + ... + } + +In particular, a temporary list twice the size of the original is no longer +generated. Instead, the loop iterates down the original array or list +in-place directly, in the same way that C or +C would do. + +=item * + +The peephole optimizer recognises the following zero-offset C patterns +and swaps in a new dedicated operator (C). +[L] + + substr($x, 0, ...) + substr($x, 0, ..., '') + +=item * + +The stringification of integers by L and L, +when coming from an C, is now more efficient. +[L] + +=item * + +Subroutines in packages no longer need to be stored in typeglobs: +declaring a subroutine will now put a simple sub reference directly in the +stash if possible, saving memory. The typeglob still notionally exists, +so accessing it will cause the stash entry to be upgraded to a typeglob +(i.e. this is just an internal implementation detail). +This optimization does not currently apply to XSUBs or exported +subroutines, and method calls will undo it, since they cache things in +typeglobs. +[L] + +(This optimization was originally announced in L, but due to a +bug it only worked for subroutines in package C
, not in modules.) + +=item * + +String reversal from a single argument, when the string buffer is not +"swiped", is now done in a single pass and is noticeably faster. +The extent of the improvement is compiler & hardware dependent. +[L] =back @@ -125,9 +466,72 @@ XXX Remove this section if F did not add any cont =item * -L has been upgraded from version A.xx to B.yy. +L has been upgraded from version 1.23 to 1.24. +L has been upgraded from version 1.07 to 1.08. + +There is now a way to pass lexical filehandles to child processes directly +(instead of having the module create a pipe internally). Previously, only +bareword filehandles could be used in "dup mode". + +=item * + +L has been upgraded from version 1.62 to 1.63. + +The complex number parser for string inputs has been improved. In particular, +C<1+i>, C<123i>, C, C<-inf>, C, and C<-infi> are now handled +correctly. + +=item * + +L has been upgraded from version 0.017 to 0.018. + +On platforms that don't support Inf/NaN values in floating-point numbers (such +as VAX), C and C now throw a runtime error (rather +than breaking the perl build). [L] + +=item * + +L has been extensively refactored internally and +extensive tests have been added. Most of these changes shouldn't be +visible externally with a few exceptions, the main ones being: + +The generated C code, especially for returning values, may have changed +slightly, and in some cases be slightly more efficient (in particular, +using C more often to return a value rather than creating a new +temporary). -XXX If there was something important to note about this change, include that here. +The parser is more likely to give warnings now on XS errors which +previously would have just silently generated invalid C code. + +One XS bug has been fixed in a way that may be highly visible. Previously +when parsing the parameters of an XS sub declaration, if a parameter +couldn't be parsed, it was quietly ignored. This meant that it would still +consume an argument, but wouldn't declare a C variable: a bit like the +Perl-level C. Now, it gives a compile error. This +will break XS code that does (for example): + + void + foo(int a, /* skip arg */, int c) + +because C-comments aren't part of XS syntax, and so the parameter was a +syntax error and was quietly skipped. This is better written as + + void + foo(int a, b, int c) + +since parameters which are not assigned a type act as placeholders. + +=item * + +L has been upgraded from version 1.07 to 1.08. + +A missing parameter has been added to the sample code in the SYNOPSIS. + +=item * + +L has been upgraded from version 1.41 to 1.42. + +This fixes [L]. =back @@ -143,36 +547,111 @@ XXX Remove this section if F did not add any cont =head1 Documentation -XXX Changes to files in F go here. Consider grouping entries by -file and be sure to link to the appropriate page, e.g. L. +=head2 Changes to Existing Documentation -=head2 New Documentation +We have attempted to update the documentation to reflect the changes +listed in this document. If you find any we have missed, open an issue +at L. -XXX Changes which create B files in F go here. +Additionally, the following selected changes have been made: -=head3 L +=head3 L -XXX Description of the purpose of the new file here +=over 4 -=head2 Changes to Existing Documentation +=item * -We have attempted to update the documentation to reflect the changes -listed in this document. If you find any we have missed, open an issue -at L. +Combined the documentation for several groups of related functions +into single entries. + +=item * -XXX Changes which significantly change existing files in F go here. -However, any changes to F should go in the L -section. +All forms of C are now documented together. -Additionally, the following selected changes have been made: +=item * -=head3 L +C is now documented with C and additional notes added. + +=back + +=head3 L =over 4 =item * -XXX Description of the change here +Binary and octal floating-point constants (such as C<012.345p-2> and +C<0b101.11p-1>) are now documented. This feature was first introduced in perl +5.22.0 together with hexadecimal floating-point constants and had a few bug +fixes in perl 5.28.0, but it was never formally documented. +[L] + +=head3 L + +=over 4 + +=item * + +Clarified the description of C and C in relation +to built-in types and class names. + +=item * + +Clarified that perl C is stable (and has been since v5.8.0). + +=back + +=head3 L + +=over 4 + +=item * + +The list of Steering Council and Core Team members have been updated, following the conclusion of +the latest election on 2024-07-17. + +=back + +=head3 L + +=over 4 + +=item * + +Added some description of "real" Cs compared to "fake" Cs. + +=item * + +Documentation was updated to reflect that mixing C, C, and +C vs C, C, and C are not allowed, and mixing +pointers between the 2 classes of APIs is not allowed. Updates made in +L and L. + +=item * + +Additional caveats have been added to the description of C. + +=back + +=head3 L + +=over 4 + +=item * + +Normalized alignment of verbatim sections, fixing how they are displayed by +some Pod viewers that strip indentation. + +=back + +=head3 L + +=over 4 + +=item * + +Entries for C<$#> and C<$*> have been amended to note that use of them result in a compilation +error, not a warning. =back @@ -196,7 +675,21 @@ and L =item * -XXX L +L + +(F) This pragma forbids non-ASCII characters within its scope. + +=item * + +L + +(F) The subroutine indicated hasn't been defined, or if it was, it has +since been undefined. + +This error could also indicate a mistyped package separator, when a +single colon was typed instead of two colons. For example, C +would be parsed as the label C followed by an unqualified function +name: C. [L] =back @@ -206,7 +699,60 @@ XXX L =item * -XXX L +L<__CLASS__ is experimental|perldiag/"__CLASS__ is experimental"> + +(S experimental::class) This warning is emitted if you use the C<__CLASS__> +keyword of C. This keyword is currently +experimental and its behaviour may change in future releases of Perl. + +=item * + +L<%s() attempted on handle %s opened with open()|perldiag/"%s() attempted on handle %s opened with open()"> + +(W io) You called readdir(), telldir(), seekdir(), rewinddir() or +closedir() on a handle that was opened with open(). If you want to +use these functions to traverse the contents of a directory, you need +to open the handle with opendir(). + +[L] + +=item * + +L + +(W precedence) You wrote something like + + !$x < $y # parsed as: (!$x) < $y + !$x eq $y # parsed as: (!$x) eq $y + !$x =~ /regex/ # parsed as: (!$x) =~ /regex/ + !$obj isa Some::Class # parsed as: (!$obj) isa Some::Class + +but because C has higher precedence than comparison operators, C<=~>, and +C, this is interpreted as comparing/matching the logical negation of the +first operand, instead of negating the result of the comparison/match. + +To disambiguate, either use a negated comparison/binding operator: + + $x >= $y + $x ne $y + $x !~ /regex/ + +... or parentheses: + + !($x < $y) + !($x eq $y) + !($x =~ /regex/) + !($obj isa Some::Class) + +... or the low-precedence C operator: + + not $x < $y + not $x eq $y + not $x =~ /regex/ + not $obj isa Some::Class + +(If you did mean to compare the boolean result of negating the first operand, +parenthesize as C<< (!$x) < $y >>, C<< (!$x) eq $y >>, etc.) =back @@ -218,72 +764,95 @@ XXX Changes (i.e. rewording) of diagnostic messages go here =item * -XXX Describe change here +L + +This warning no longer triggers for code like C, i.e. where double +negation (C) is used as a convert-to-boolean operator. +[L] + +=item * + +L + +This warning now triggers for use of a chained comparison like C<< 0 < $x < 1 >>. +[L] + +=item * + +L + +Prevent this warning when accessing a function parameter in C<@_> that +is an lvalue reference to an untied hash element where the key was +undefined. This warning is still produced at the point of call. +[L] =back =head1 Utility Changes -XXX Changes to installed programs such as F and F go here. -Most of these are built within the directory F. +=head2 F -[ List utility changes as a =head2 entry for each utility and =item -entries for each change -Use F with program names to get proper documentation linking. ] +=over 4 -=head2 F +=item * -=over 4 +Separate installation (without overwriting installed modules) is now the default =item * -XXX +Documentation is significantly enhanced =back =head1 Configuration and Compilation -XXX Changes to F, F, F, 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 section, instead. - -[ List changes as an =item entry ]. - =over 4 =item * -XXX +Fix compilation on platforms (e.g. "Gentoo Prefix") with only a C locale [L] +Bug first reported downstream L -=back +=item * -=head1 Testing +The (mostly undocumented) configuration macro C has been +removed. When enabled (e.g. with C<./Configure -A ccflags=-DPERL_STRICT_CR>), +it would make the perl parser throw a fatal error when it encountered a CR +(carriage return) character in source files. The default (and now only) +behavior of the perl parser is to strip CRs paired with newline characters and +otherwise treat them as whitespace. -XXX Any significant changes to the testing of a freshly built perl should be -listed here. Changes which create B files in F go here as do any -large changes to the testing harness (e.g. when parallel testing was added). -Changes to existing files in F aren't worth summarizing, although the bugs -that they represent may be covered elsewhere. +(C was originally introduced in perl 5.005 to optionally +restore backward compatibility with perl 5.004, which had made CR in source +files an error. Before that, CR was accepted, but retained literally in quoted +multi-line constructs such as here-documents, even at the end of a line.) -XXX If there were no significant test changes, say this: +=item * + +Similarly, the (even less documented) configuration macro C has +been removed. When enabled, it would install a default source filter to strip +carriage returns from source code before the parser proper got to see it. -Tests were added and changed to reflect the other additions and changes -in this release. +=back -XXX If instead there were significant changes, say this: +=head1 Testing Tests were added and changed to reflect the other additions and -changes in this release. Furthermore, these significant changes were +changes in this release. Furthermore, these significant changes were made: -[ List each test improvement as an =item entry ] - =over 4 =item * -XXX +A new F test script was added as a place for TODO tests +for known unfixed bugs. + +=item * + +Added testing of the perl headers against the C++ compiler +corresponding to the C compiler perl is being built with. +[L] =back @@ -303,9 +872,37 @@ source tree. =over 4 -=item XXX-some-platform +=head2 Platform-Specific Notes -XXX +=over 4 + +=item arm64 DARWIN + +Fix arm64 darwin hints when using use64bitall with Configure [L] + +=item Android + +Changes to perl_langinfo.h for Android [L] related to [L] + +=item Cygwin + +cygwin.c: fix several silly/terrible C errors [L] + +workaround DLL load address conflict [L] + +Supply an explicit base address for C that cannot +conflict with those generated by C<--enable-auto-image-base>. [L][L] + +=item MacOS (Darwin) + +Collation of strings using locales on MacOS 15 (Darwin 24) and up has +been turned off due to a failed assertion in its libc. + +If earlier versions are also experiencing issues (such as failures in +F), you can explicitly disable locale collation by adding the +C<-Accflags=-DNO_LOCALE_COLLATE> option to your invocation of C<./Configure>, +or just C<-DNO_LOCALE_COLLATE> to the C and C +variables in F. =back @@ -338,51 +935,500 @@ XXX =head1 Internal Changes -XXX Changes which affect the interface available to C code go here. Other -significant internal changes for future core maintainers should be noted as -well. +=over 4 -[ List each change as an =item entry ] +=item * -=over 4 +The L> function is introduced. This is an +enhanced version of L>, which is retained for +backwards compatibility. Both are to call L when you have +the year, month, hour, etc. The new function handles UTF8ness for you, +and allows you to specify if you want the possibility of daylight +savings time to be considered. C never considers DST. =item * -XXX +The C, C, and C +functions are no longer experimental. + +=item * + +Calls to L with the C flag +set also ensure the SV parameters constructed from the C +parameter are released before C returns. Previously they +were released on the next L. [L] + +=item * + +When built with the C<-DDEBUGGING> compile option, perl API functions that +take pointers to distinct types of SVs (AVs, HVs or CVs) will check the +C of the passed values to ensure they are valid. Additionally, +internal code within core functions that attempts to extract AVs, HVs or CVs +from reference values passed in will also perform such checks. + +While this has been entirely tested by normal Perl CI testing, there may +still be some corner-cases where these constraints are violated in +otherwise-valid calls. These may require further investigation if they are +found, and specific code to be adjusted to account for it. + +=item * + +The C function has been expanded to include additional information +about the recent C and C ops, as well as for +C and C which had not been done previously. + +=item * + +C now also has the facility to print extra debugging information +about custom operators, if those operators register a helper function via the +new C element of the C structure. For more information, see the +relevant additions to L. + +=item * + +Enable removing most of mathoms.c and stub functions [L] and [L] + +=item * + +put apostrophe as package separator behind a default enabled feature, +which is disabled from feature bundle 5.41. + +=item * + +pp_reverse: don't COW buffer just to then un-COW it [L] + +=item * + +New API functions are introduced to convert strings encoded in UTF-8 to +their ordinal code point equivalent. These are safe to use by default, +and generally more convenient to use than the existing ones. + +L> and L> replace +L> (which is retained for backwards +compatibility), but you should convert to use the new forms, as likely +you aren't using the old one safely. + +To convert in the opposite direction, you can now use +L>. This is not a new function, but a new synonym +for L>. It is added so you don't have to learn +two sets of names. + +There are also two new functions, L> and +L> which do the same thing except when +the input string represents a code point that Unicode doesn't accept as +legal for interchange, using either the strict original definition +(C), or the looser one given by +L +(C). When the input string represents one of the +restricted code points, these functions return the Unicode +C instead. + +Also L> is a synonym for C, for use +when you want to emphasize that the entire range of Perl extended UTF-8 +is acceptable. + +There are also replacement functions for the three more specialized +conversion functions that you are unlikely to need to use. Again, the +old forms are kept for backwards compatibility, but you should convert +to use the new forms. + +L> replaces L>. + +L> replaces L>. + +L> replaces +L>. + +Also added are the inverse functions L> +and L>, which are synonyms for the existing +functions, L> and +L> respectively. These are provided only +so you don't have to learn two sets of names. + +=item * + +Three new API functions are introduced to convert strings encoded in +UTF-8 to native bytes format (if possible). These are easier to use +than the existing ones, and they avoid unnecessary memory allocations. +The functions are L> which is used +when it is ok for the input string to be overwritten with the converted +result; and L> and +L> when the original string must be +preserved intact. C returns the result in a +temporary using L/C that will automatically be +destroyed. With C, you are responsible for +freeing the newly allocated memory that is returned if the conversion is +successful. + +The latter two functions are designed to replace +L> which creates memory unnecessarily, or +unnecessarily large. + +=item * + +New API functions L|perlapi/valid_identifier_pve>, +L|perlapi/valid_identifier_pvn> and +L|perlapi/valid_identifier_sv> have been added, which +test if a string would be considered by Perl to be a valid identifier name. + +=item * + +When assigning from an SVt_IV into a SVt_NV (or vice versa), providing that +both are "bodyless" types, Perl_sv_setsv_flags will now just change the +destination type to match the source type. Previously, an SVt_IV would have +been upgraded to a SVt_PVNV to store an NV, and an SVt_NV would have been +upgraded to a SVt_PVIV to store an IV. This change prevents the need to +allocate - and later free - the relevant body struct. + +=item * + +Two new API functions are introduced to convert strings encoded in +native bytes format to UTF-8. These return the string unchanged if its +UTF-8 representation is the same as the original. Otherwise, new memory +is allocated to contain the converted string. This is in contrast to +the existing L> which always allocates new +memory. The new functions are L> and +L>. +L> arranges for the new memory to +automatically be freed. With C, you are +responsible for freeing any newly allocated memory. + +=item * + +The way that subroutine signatures are parsed by the parser grammar has been +changed. + +Previously, when parsing individual signature parameters, the parser would +accumulate an C optree fragment for each parameter on the parser +stack, collecting them in an C sequence, before finally building the +complete argument handling optree itself, in a large action block defined +directly in F. + +In the new approach, all the optree generation is handled by newly-defined +functions in F which are called by the action blocks in the parser. +These do not keep state on the parser stack, but instead in a dedicated memory +structure referenced by the main C structure. This is intended to +be largely opaque to other code, and accessed only via the new functions. + +This new arrangement is intended to allow more flexible code generation and +additional features to be developed in future. + +=item * + +Three new API functions have been added to interact with the regexp global +match position stored in an SV. These are C, +C and C. Using these +API functions avoids XS modules needing to know about or interact directly +with the way this position is currently stored, which involves the +C magic type. =back =head1 Selected Bug Fixes -XXX Important bug fixes in the core language are summarized here. Bug fixes in -files in F and F are best summarized in L. +=over 4 -XXX Include references to GitHub issues and PRs as: [GH #12345] and the release -manager will later use a regex to expand these into links. +=item * -[ List each fix as an =item entry ] +Fix null pointer dereference in S_SvREFCNT_dec [L]. -=over 4 +=item * + +Fix feature 'class' Segmentation fault in DESTROY [L]. =item * -XXX +Fix C [L]. -=back +=item * -=head1 Known Problems +C now returns real booleans (as its documentation describes), not +integers. This means the result of a failed C now stringifies to C<''>, +not C<'0'>. + +[L] + +=item * + +L|perlfunc/open> automatically creates an anonymous temporary file when +passed C as a filename: + + open(my $fh, "+>", undef) or die ... + +Due to the way this feature was implemented, it would also trigger for +non-existent elements of arrays or hashes: + + open(my $fh, "+>", $hash{no_such_key}) or die ... + # unexpectedly succeeds and creates a temp file + +Now a temporary file is only created if a literal C is passed. +[L] -XXX Descriptions of platform agnostic bugs we know we can't fix go here. Any -tests that had to be Ced for the release would be noted here. Unfixed -platform specific bugs also go here. +=item * + +Compound assignment operators return lvalues that can be further modified: + + ($x &= $y) += $z; + # Equivalent to: + # $x &= $y; + # $x += $z; + +However, the separate numeric/string bitwise operators provided by L feature|feature/The 'bitwise' feature>, C<< &= ^= |= &.= ^.= |.= >>, +did not do so: + + use feature qw(bitwise); + ($x &= $y) += $z; + # Used to die: + # Can't modify numeric bitwise and (&) in addition (+) at ... + +This has been corrected. [L] + +=item * + +Starting in v5.39.8, L> would crash or produce odd errors +(such as C) when given a format +string that wasn't actually a string, but a number, C, or an object +(even one with overloaded string conversion). + +Now C stringifies its first argument, as before. +[L] + +=item * + +C and C now SvPV_force() the supplied +SV unless it is read only. This will remove CoW from the SV and +prevents code that writes through the generated pointer from modifying +the value of other SVs that happen the share the same CoWed string +buffer. + +Note: this does not make C safe, if the SV is magical +then any writes to the buffer will likely be discarded on the next +read. [L] + +=item * + +Enforce C for bareword file handles +that have strictness removed because they are used in open() with a +"dup" mode, such as in C<< open my $fh, ">&", THISHANDLE >>. [L] + +=item * + +Using C to tail call, or using the call_sv() and related APIs to +call, any of trim(), refaddr(), reftype(), ceil(), floor() or +stringify() in the C package would crash or assert due to a +C handling bug. [L] + +=item * + +Fix sv_gets() to accept a C append offset instead of C. +This prevents integer overflows when appending to a large C for +C aka C and C. +L + +=item * + +Fixed an issue where C failed to correctly identify +certain invalid UTF-8 sequences as invalid. Specifically, sequences +that start with continuation bytes or unassigned bytes could cause +unexpected behavior or a panic. This fix ensures that such invalid +sequences are now properly detected and handled. This correction +also resolves related issues in modules that handle UTF-8 processing, +such as C. + +=item * + +The perl parser would erroneously parse like C<=cut> some other POD directives +whose names start with I, prematurely terminating an embedded POD section. +The following cases were affected: I followed by a digit (e.g. +C<=cut2studio>), I followed by an underscore (e.g. C<=cut_grass>), and in +string C, any identifier starting with I (e.g. C<=cute>). +[L] + +=item * + +Builds with C<-msse> and quadmath on 32-bit x86 systems would crash +with a misaligned access early in the build. [L] + +=item * + +On threaded builds on POSIX-like systems, if the perl signal handler +receives we now resend the signal to the main perl thread. Previously +this would crash. [GH #22487] + +=item * + +Declaring a lexically scoped array or hash using C within a subroutine +and then immediately returning no longer triggers a "Bizarre copy of HASH/ARRAY +in subroutine exit" error. [GH #18630] + +=item * + +C didn't properly clear C which could result in +out of date cached numeric versions of the value being used on a +second evaluation. Properly clear any cached values. [GH #22784] + +=item * + +L and L are no longer limited to 31-bit +values for their POS and SIZE arguments. +[L] + +=item * + +L is now better behaved if VAR is not a plain string. If VAR +is a tied variable, it calls C once; previously, it would also call +C, but without using the result. If VAR is a reference, the referenced +entity has its refcount properly decremented when VAR is turned into a string; +previously, it would leak memory. +[L] + +=item * + +The C<$SIG{__DIE__}> and C<$SIG{__WARN__}> handlers can no longer be invoked +recursively, either deliberately or by accident, as described in +L. That is, when an exception (or warning) triggers a call to a +C<$SIG{__DIE__}> (or C<$SIG{__WARN__}>) handler, further exceptions (or +warnings) are processed directly, ignoring C<%SIG> until the original +C<$SIG{__DIE__}> (or C<$SIG{__WARN__}>) handler call returns. +[L], [L], [L] + +=item * + +The C for an object and C for the +object's stash weren't always NULL or not-NULL, confusing C +(and hence Devel::Peek's C) into crashing on an object with no +defined fields in some cases. [L] + +=item * + +When comparing strings when using a UTF-8 locale, the behavior was +previously undefined if either or both contained an above-Unicode code +point, such as 0x110000. Now all such code points will collate the same +as the highest Unicode code point, U+10FFFF. [L] + +=item * -[ List each fix as an =item entry ] +In regexes, the contents of C<\g{...}> backreferences are now properly +validated. Previously, C<\g{1 FOO}> was silently parsed as C<\g{1}>, ignoring +everything after the first number. +[L] + +=item * + +A run-time pattern which contained a code block which recursed back to the +same bit of code which ran that match, could cause a crash. +[L] + +For example: + + my $r = qr/... (?{ foo() if ... }) .../; + sub foo { $string =~ $r } + foo() + +=item * + +In some cases an C would not add integer parts to the source +lines saved by the debugger. [L] + +=item * + +Save debugger lines as C SVs rather than as C SVs as they +don't need magic, aren't blessed and don't need to store a floating +point part. This should save 24 bytes per stored line for 64-bit +systems, more for C<-Duselongdouble> or C<-Dusequadmath> builds. +Discussed in [L]. + +=item * + +Ensure cloning the save stack for fork emulation doesn't duplicate +freeing the RExC state. [L] + +=item * + +Smartmatch against a code reference that uses a loop exit such as +C would crash perl. [L] + +=item * + +Class initializers and C blocks, per L, that +called C or other loop exits would crash perl. Same cause as +for [L]. + +=item * + +Prevent a signature parameter of the form C<$ => from leaking an OP at +compile-time. [L] + +=item * + +Exceptions thrown and caught entirely within a C or C +block no longer stop the outer run-loop. + +Code such as the following would stop running the contents of the C +block once the inner exception in the inner C/C block was caught. +This has now been fixed, and runs as expected. ([L]). + + defer { + try { die "It breaks\n"; } + catch ($e) { warn $e } + + say "This line would never run"; + } + +=item * + +L now clears the error flag if an error occurs when +reading and that error is C or C. This allows +old code that depended on C to clear all errors to ignore +these relatively harmless errors. [L] + +=item * + +L|perlfunc/open> automatically creates an anonymous temporary file +when passed C as a filename: + + open(my $fh, "+>", undef) or die ... + +This is supposed to work only when the undefined value is the one returned by +the C function. + +In perls before 5.41.3, this caused a problem due to the fact that the same +undefined value can be generated by lookups of non-existent hash keys or array +elements, which can lead to bugs in user-level code (reported as [L]). + +In 5.41.3, additional checks based on the syntax tree of the call site were +added, which fixed this issue for some number of common cases, though not all +of them, at the cost of breaking the ability of APIs that wrap C to +expose its anonymous file mode. A notable example of such an API is autodie. + +This release reverts to the old problem in preference to the new one for the +time being. + +=back + +=head1 Known Problems =over 4 =item * -XXX +C builds may fail during testing due to a conflict between the +load addresses of F and +F. This will also be visible +for anything that attempts to fork() with C loaded. + +This is known to fail for builds with options that increase the size +of the binary, such as C<-DDEBUGGING>, C<-Doptimize="-O0 -g"> or +C<-Doptimize="-O2 -g -march=x86-64-v2">. + +This can be avoided by building perl with +C<-Astatic_ext=I18N/Langinfo>. + +The base addresses are generated by the linker based on the names of +the DLLs, so this is expected to clear up for 5.41.7. + +[L] =back @@ -397,10 +1443,44 @@ the F of a previous release. =back -=head1 Obituary +=head1 Obituaries + +=head2 Abe Timmerman + +Abe Timmerman (ABELTJE) passed away on August 15, 2024. Since 2002, Abe +built and maintained the L project: "a set of scripts and +modules that try to run the Perl core tests on as many configurations as +possible and combine the results into an easy to read report". Smoking +Perl on as many platforms and configurations as possible has been +instrumental in finding bugs and developing patches for those bugs. + +Abe was a regular attendee of the Perl Toolchain Summit (née Perl QA +Hackathon), the Dutch Perl Workshop and the Amsterdam.pm user group +meetings. With his kindness, his smile and his laugh, he helped make +Perl and its community better. + +Abeltje's memorial card said "Grab every opportunity to have a drink of +bubbly. This is an opportunity". We'll miss you Abe, and we'll have a +drink of bubbly in your honor. + +=head2 Andrew Main + +Andrew Main (ZEFRAM) passed away on March 10, 2025. + +Zefram was a brilliant person, seemingly knowledgeable in everything +and happy to impart his knowledge and share his striking insights with a +gentle, technical demeanor that often failed to convey the genuine care +with which he communicated. + +It would be impossible to overstate the impact that Zefram has had on +both the language and culture of Perl over the years. From his countless +contributions to the code-base, to his often quirky but always distinctive +appearances at conferences and gatherings, his influence and memory are +sure to endure long into the future. -XXX If any significant core contributor or member of the CPAN community has -died, add a short obituary here. +Zefram wished to have no designated memorial location in +meatspace. His designated memorial location in cyberspace is +L. =head1 Acknowledgements From 65284d4efd7e8c2985155ec806a3a238ef69f1f6 Mon Sep 17 00:00:00 2001 From: "Philippe Bruhat (BooK)" Date: Thu, 19 Jun 2025 16:02:42 +0200 Subject: [PATCH 2/6] review the perldelta against individual perl541*delta Co-authored-by: Thibault Duponchelle --- pod/perldelta.pod | 73 ++++++++++++++++++----------------------------- 1 file changed, 28 insertions(+), 45 deletions(-) diff --git a/pod/perldelta.pod b/pod/perldelta.pod index ba530d2080b7..9ed906993a7e 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -20,7 +20,7 @@ XXX Any important notices here =head2 More CORE:: subs -C has been added as a subroutine to the CORE:: namespace. +C has been added as a subroutine to the C namespace. Previously, code like C<&CORE::chdir($dir)> or C<< my $ref = \&CORE::chdir; $ref->($dir) >> would throw an error saying C<&CORE::chdir cannot be called @@ -135,7 +135,7 @@ name-based method resolution by name. Combined with lexical method declaration, these two new abilities create the effect of having private methods. -=head2 Switch and Smart Match operator reinstated +=head2 Switch and Smart Match operator kept, behind a feature The "switch" feature and the smartmatch operator, C<~~>, were introduced in v5.10. Their behavior was significantly changed in v5.10.1. When the @@ -326,13 +326,13 @@ as an updated module in the L section. =item * -Constant-folded strings are now sharable via the Copy-on-Write mechanism. +Constant-folded strings are now shareable via the Copy-on-Write mechanism. [L] The following code would previously have allocated eleven string buffers, each containing one million "A"s: -C + my @scalars; push @scalars, ("A" x 1_000_000) for 0..9; Now a single buffer is allocated and shared between a CONST OP and the ten scalar elements of L<@scalars>. @@ -356,23 +356,6 @@ was used. =item * -Code that uses the C function from the L module to generate -a list of index/value pairs out of array which is then passed into a -two-variable C list to unpack those again is now optimised to be more -efficient. - - my @array = (...); - - foreach my ($idx, $val) (builtin::indexed @array) { - ... - } - -In particular, a temporary list twice the size of the original -array is no longer generated. Instead, the list iterates down the array -in-place directly, in the same way that C would do. - -=item * - Code that uses the C function from the L module to generate a list of index/value pairs out of an array or list which is then passed into a two-variable C list to unpack those again is now optimised to be @@ -754,6 +737,9 @@ To disambiguate, either use a negated comparison/binding operator: (If you did mean to compare the boolean result of negating the first operand, parenthesize as C<< (!$x) < $y >>, C<< (!$x) eq $y >>, etc.) +Note: this warning does not trigger for code like C, +i.e. where double negation (C) is used as a convert-to-boolean operator. + =back =head2 Changes to Existing Diagnostics @@ -764,11 +750,11 @@ XXX Changes (i.e. rewording) of diagnostic messages go here =item * -L +L<%s() attempted on invalid dirhandle %s|perldiag/"%s() attempted on invalid dirhandle %s"> -This warning no longer triggers for code like C, i.e. where double -negation (C) is used as a convert-to-boolean operator. -[L] +This was consolidated from separate messages for readdir(), telldir(), +seekdir(), rewinddir() and closedir() as part of refactoring for +[L]. =item * @@ -796,11 +782,11 @@ undefined. This warning is still produced at the point of call. =item * -Separate installation (without overwriting installed modules) is now the default +Separate installation (without overwriting installed modules) is now the default. =item * -Documentation is significantly enhanced +Documentation is significantly enhanced. =back @@ -876,19 +862,19 @@ source tree. =over 4 -=item arm64 DARWIN +=item arm64 Darwin Fix arm64 darwin hints when using use64bitall with Configure [L] =item Android -Changes to perl_langinfo.h for Android [L] related to [L] +Changes to F for Android [L] related to [L]. =item Cygwin -cygwin.c: fix several silly/terrible C errors [L] +F: fix several silly/terrible C errors. [L] -workaround DLL load address conflict [L] +Workaround DLL load address conflict. [L] Supply an explicit base address for C that cannot conflict with those generated by C<--enable-auto-image-base>. [L][L] @@ -986,16 +972,11 @@ relevant additions to L. =item * -Enable removing most of mathoms.c and stub functions [L] and [L] +Enable removing most of F and stub functions [L] and [L]. =item * -put apostrophe as package separator behind a default enabled feature, -which is disabled from feature bundle 5.41. - -=item * - -pp_reverse: don't COW buffer just to then un-COW it [L] +C: don't COW buffer just to then un-COW it. [L] =item * @@ -1111,7 +1092,7 @@ structure referenced by the main C structure. This is intended to be largely opaque to other code, and accessed only via the new functions. This new arrangement is intended to allow more flexible code generation and -additional features to be developed in future. +additional features to be developed in the future. =item * @@ -1447,12 +1428,14 @@ the F of a previous release. =head2 Abe Timmerman -Abe Timmerman (ABELTJE) passed away on August 15, 2024. Since 2002, Abe -built and maintained the L project: "a set of scripts and -modules that try to run the Perl core tests on as many configurations as -possible and combine the results into an easy to read report". Smoking -Perl on as many platforms and configurations as possible has been -instrumental in finding bugs and developing patches for those bugs. +Abe Timmerman (ABELTJE) passed away on August 15, 2024. + +Since 2002, Abe built and maintained the L project: "a +set of scripts and modules that try to run the Perl core tests on as +many configurations as possible and combine the results into an easy to +read report". Smoking Perl on as many platforms and configurations as +possible has been instrumental in finding bugs and developing patches +for those bugs. Abe was a regular attendee of the Perl Toolchain Summit (née Perl QA Hackathon), the Dutch Perl Workshop and the Amsterdam.pm user group From 33c0fe42eb58965f02e21f3891d5d6069c0ce2e3 Mon Sep 17 00:00:00 2001 From: Thibault DUPONCHELLE Date: Thu, 19 Jun 2025 09:23:19 +0200 Subject: [PATCH 3/6] perldelta: Simplify the recommended alternatives to rand() --- pod/perldelta.pod | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 9ed906993a7e..a119076db475 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -582,6 +582,11 @@ to built-in types and class names. Clarified that perl C is stable (and has been since v5.8.0). +=item * + +The recommended alternatives to the C function were updated to modern modules recommended by the CPAN Security Group. +[L] + =back =head3 L From a91e2ce9c07925db7639ebd7a7a2a6f36fac68d5 Mon Sep 17 00:00:00 2001 From: Thibault DUPONCHELLE Date: Thu, 19 Jun 2025 09:27:22 +0200 Subject: [PATCH 4/6] perldelta: Fix syntax --- pod/perldelta.pod | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pod/perldelta.pod b/pod/perldelta.pod index a119076db475..65dd1e4d0747 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -569,6 +569,8 @@ C<0b101.11p-1>) are now documented. This feature was first introduced in perl fixes in perl 5.28.0, but it was never formally documented. [L] +=back + =head3 L =over 4 @@ -861,8 +863,6 @@ versions did not. These will either be enabled by new files in the F directories, or new subdirectories and F files at the top level of the source tree. -=over 4 - =head2 Platform-Specific Notes =over 4 From d4bd7894ae93b224da2cb852a8afbbdc6163a96c Mon Sep 17 00:00:00 2001 From: Thibault DUPONCHELLE Date: Thu, 19 Jun 2025 11:11:08 +0200 Subject: [PATCH 5/6] Clean up BLEAD-POINT perldelta files --- MANIFEST | 14 -- Makefile.SH | 8 +- pod/.gitignore | 2 +- pod/perl.pod | 15 +- pod/perl5410delta.pod | 71 ------- pod/perl54110delta.pod | 352 --------------------------------- pod/perl54111delta.pod | 254 ------------------------ pod/perl54112delta.pod | 99 ---------- pod/perl54113delta.pod | 213 -------------------- pod/perl5411delta.pod | 278 -------------------------- pod/perl5412delta.pod | 299 ---------------------------- pod/perl5413delta.pod | 413 --------------------------------------- pod/perl5414delta.pod | 264 ------------------------- pod/perl5415delta.pod | 115 ----------- pod/perl5416delta.pod | 325 ------------------------------ pod/perl5417delta.pod | 372 ----------------------------------- pod/perl5418delta.pod | 207 -------------------- pod/perl5419delta.pod | 340 -------------------------------- vms/descrip_mms.template | 2 +- win32/GNUmakefile | 6 +- win32/Makefile | 4 +- win32/pod.mak | 64 +----- 22 files changed, 16 insertions(+), 3701 deletions(-) delete mode 100644 pod/perl5410delta.pod delete mode 100644 pod/perl54110delta.pod delete mode 100644 pod/perl54111delta.pod delete mode 100644 pod/perl54112delta.pod delete mode 100644 pod/perl54113delta.pod delete mode 100644 pod/perl5411delta.pod delete mode 100644 pod/perl5412delta.pod delete mode 100644 pod/perl5413delta.pod delete mode 100644 pod/perl5414delta.pod delete mode 100644 pod/perl5415delta.pod delete mode 100644 pod/perl5416delta.pod delete mode 100644 pod/perl5417delta.pod delete mode 100644 pod/perl5418delta.pod delete mode 100644 pod/perl5419delta.pod diff --git a/MANIFEST b/MANIFEST index 258c831ebd29..215cd0508208 100644 --- a/MANIFEST +++ b/MANIFEST @@ -5749,20 +5749,6 @@ pod/perl5384delta.pod Perl changes in version 5.38.4 pod/perl5400delta.pod Perl changes in version 5.40.0 pod/perl5401delta.pod Perl changes in version 5.40.1 pod/perl5402delta.pod Perl changes in version 5.40.2 -pod/perl5410delta.pod Perl changes in version 5.41.0 -pod/perl54110delta.pod Perl changes in version 5.41.10 -pod/perl54111delta.pod Perl changes in version 5.41.11 -pod/perl54112delta.pod Perl changes in version 5.41.12 -pod/perl54113delta.pod Perl changes in version 5.41.13 -pod/perl5411delta.pod Perl changes in version 5.41.1 -pod/perl5412delta.pod Perl changes in version 5.41.2 -pod/perl5413delta.pod Perl changes in version 5.41.3 -pod/perl5414delta.pod Perl changes in version 5.41.4 -pod/perl5415delta.pod Perl changes in version 5.41.5 -pod/perl5416delta.pod Perl changes in version 5.41.6 -pod/perl5417delta.pod Perl changes in version 5.41.7 -pod/perl5418delta.pod Perl changes in version 5.41.8 -pod/perl5419delta.pod Perl changes in version 5.41.9 pod/perl561delta.pod Perl changes in version 5.6.1 pod/perl56delta.pod Perl changes in version 5.6 pod/perl581delta.pod Perl changes in version 5.8.1 diff --git a/Makefile.SH b/Makefile.SH index f518f9aa2931..c3b42bb7a3ca 100755 --- a/Makefile.SH +++ b/Makefile.SH @@ -635,7 +635,7 @@ esac $spitshell >>$Makefile <<'!NO!SUBS!' -perltoc_pod_prereqs = extra.pods pod/perl54114delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod pod/perluniprops.pod +perltoc_pod_prereqs = extra.pods pod/perl5420delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod pod/perluniprops.pod generated_pods = pod/perltoc.pod $(perltoc_pod_prereqs) generated_headers = uudmap.h bitcount.h mg_data.h @@ -1144,9 +1144,9 @@ pod/perlintern.pod: $(MINIPERL_EXE) autodoc.pl embed.fnc pod/perlmodlib.pod: $(MINIPERL_EXE) pod/perlmodlib.PL MANIFEST $(MINIPERL) pod/perlmodlib.PL -q -pod/perl54114delta.pod: pod/perldelta.pod - $(RMS) pod/perl54114delta.pod - $(LNS) perldelta.pod pod/perl54114delta.pod +pod/perl5420delta.pod: pod/perldelta.pod + $(RMS) pod/perl5420delta.pod + $(LNS) perldelta.pod pod/perl5420delta.pod extra.pods: $(MINIPERL_EXE) -@test ! -f extra.pods || rm -f `cat extra.pods` diff --git a/pod/.gitignore b/pod/.gitignore index e33e69f940a6..53aecc6668ab 100644 --- a/pod/.gitignore +++ b/pod/.gitignore @@ -47,7 +47,7 @@ /roffitall # generated -/perl54114delta.pod +/perl5420delta.pod /perlapi.pod /perlintern.pod /perlmodlib.pod diff --git a/pod/perl.pod b/pod/perl.pod index 22a9097ff912..33067888bf31 100644 --- a/pod/perl.pod +++ b/pod/perl.pod @@ -181,20 +181,7 @@ aux h2ph h2xs perlbug pl2pm pod2html pod2man splain xsubpp perlhist Perl history records perldelta Perl changes since previous version - perl54113delta Perl changes in version 5.41.13 - perl54112delta Perl changes in version 5.41.12 - perl54111delta Perl changes in version 5.41.11 - perl54110delta Perl changes in version 5.41.10 - perl5419delta Perl changes in version 5.41.9 - perl5418delta Perl changes in version 5.41.8 - perl5417delta Perl changes in version 5.41.7 - perl5416delta Perl changes in version 5.41.6 - perl5415delta Perl changes in version 5.41.5 - perl5414delta Perl changes in version 5.41.4 - perl5413delta Perl changes in version 5.41.3 - perl5412delta Perl changes in version 5.41.2 - perl5411delta Perl changes in version 5.41.1 - perl5410delta Perl changes in version 5.41.0 + perl5420delta Perl changes in version 5.42.0 perl5402delta Perl changes in version 5.40.2 perl5401delta Perl changes in version 5.40.1 perl5400delta Perl changes in version 5.40.0 diff --git a/pod/perl5410delta.pod b/pod/perl5410delta.pod deleted file mode 100644 index c823b05495a3..000000000000 --- a/pod/perl5410delta.pod +++ /dev/null @@ -1,71 +0,0 @@ -=encoding utf8 - -=head1 NAME - -perl5410delta - what is new for perl v5.41.0 - -=head1 DESCRIPTION - -This document describes differences between the 5.40.0 release and the 5.41.0 -release. - -If you are upgrading from an earlier release such as 5.39.0, first read -L, which describes differences between 5.39.0 and 5.40.0. - -=head1 Notice - -This is not a real release, but prepares for the Perl 5.41 development cycle. -It has no real changes from Perl 5.40.0. - -=head1 Modules and Pragmata - -=head2 Updated Modules and Pragmata - -=over 4 - -=item * - -L has been upgraded from version 1.89 to 1.90. - -=item * - -L has been upgraded from version 5.20240609 to 5.20240610. - -=back - -=head1 Reporting Bugs - -If you find what you think is a bug, you might check the perl bug database -at L. There may also be information at -L, the Perl Home Page. - -If you believe you have an unreported bug, please open an issue at -L. Be sure to trim your bug down to a -tiny but sufficient test case. - -If the bug you are reporting has security implications which make it -inappropriate to send to a public issue tracker, then see -L -for details of how to report the issue. - -=head1 Give Thanks - -If you wish to thank the Perl 5 Porters for the work we had done in Perl 5, -you can do so by running the C program: - - perlthanks - -This will send an email to the Perl 5 Porters list with your show of thanks. - -=head1 SEE ALSO - -The F file for an explanation of how to view exhaustive details on -what changed. - -The F file for how to build Perl. - -The F file for general stuff. - -The F and F files for copyright information. - -=cut diff --git a/pod/perl54110delta.pod b/pod/perl54110delta.pod deleted file mode 100644 index 9060a4fae854..000000000000 --- a/pod/perl54110delta.pod +++ /dev/null @@ -1,352 +0,0 @@ -=encoding utf8 - -=head1 NAME - -perl54110delta - what is new for perl v5.41.10 - -=head1 DESCRIPTION - -This document describes differences between the 5.41.9 release and the 5.41.10 -release. - -If you are upgrading from an earlier release such as 5.41.8, first read -L, which describes differences between 5.41.8 and 5.41.9. - -=head1 Core Enhancements - -=head2 Renamed C and C features to C and C - -Perl release 5.41.7 introduced two new experimental features, called C -and C, which enable keywords of the same names. Those keywords provide -list-processing operators inspired by the ones from L of the same -name. It was subsequently considered that the names of these two features -are confusingly close to the ability of the C module to refer to all -of its features by using the C<:all> export tag. -[L] - -As a consequence, these feature flags have now been renamed to C -and C to avoid this confusion. Likewise, the related -experimental warning flags are also renamed to C -and C. Apart from these new flag names, the -actual syntax and semantics of these two operators remain unchanged since -their appearance in Perl release 5.41.7. - - use v5.40; - use feature 'keyword_all'; - no warnings 'experimental::keyword_all'; - - my @numbers = ... - - if(all { $_ % 2 == 0 } @numbers) { - say "All the numbers are even"; - } - -=head2 New C API macro - -A new API macro has been added, which is used to obtain the second string -buffer out of a "vstring" SV, in a manner similar to the C macro which -obtains the regular string buffer out of a regular SV. - - STRLEN len; - const char *vstr_pv = SvVSTRING(sv, vstr_len); - -See L>. - -=head1 Performance Enhancements - -=over 4 - -=item * - -String reversal from a single argument, when the string buffer is not -"swiped", is now done in a single pass and is noticeably faster. -The extent of the improvement is compiler & hardware dependent. -[L] - -=back - -=head1 Modules and Pragmata - -=head2 Updated Modules and Pragmata - -=over 4 - -=item * - -L has been upgraded from version 3.02_001 to 3.04. - -=item * - -L has been upgraded from version 1.26 to 1.27. - -=item * - -L has been upgraded from version 0.017 to 0.018. - -On platforms that don't support Inf/NaN values in floating-point numbers (such -as VAX), C and C now throw a runtime error (rather -than breaking the perl build). [L] - -=item * - -L has been upgraded from version 7.70 to 7.72. - -=item * - -L has been extensively refactored internally and -extensive tests have been added. Most of these changes shouldn't be -visible externally with a few exceptions, the main ones being: - -The generated C code, especially for returning values, may have changed -slightly, and in some cases be slightly more efficient (in particular, -using C more often to return a value rather than creating a new -temporary). - -The parser is more likely to give warnings now on XS errors which -previously would have just silently generated invalid C code. - -One XS bug has been fixed in a way that may be highly visible. Previously -when parsing the parameters of an XS sub declaration, if a parameter -couldn't be parsed, it was quietly ignored. This meant that it would still -consume an argument, but wouldn't declare a C variable: a bit like the -Perl-level C. Now, it gives a compile error. This -will break XS code that does (for example): - - void - foo(int a, /* skip arg */, int c) - -because C-comments aren't part of XS syntax, and so the parameter was a -syntax error and was quietly skipped. This is better written as - - void - foo(int a, b, int c) - -since parameters which are not assigned a type act as placeholders. - -=item * - -L has been upgraded from version 1.94 to 1.95. - -=item * - -L has been upgraded from version 2.26 to 2.27. - -=item * - -L has been upgraded from version 2.003004 to 2.004001. - -=item * - -L has been upgraded from version 0.5018 to 0.5019. - -=item * - -L has been upgraded from version 5.20250220 to 5.20250321. - -=item * - -L has been upgraded from version 2.46 to 2.47. - -=item * - -L has been upgraded from version 1.07 to 1.08. - -A missing parameter has been added to the sample code in the SYNOPSIS. - -=item * - -L has been upgraded from version 3.35 to 3.36. - -=item * - -L has been upgraded from version 2.42 to 2.43. - -=item * - -L has been upgraded from version 1.14 to 1.15. - -=item * - -L has been upgraded from version 1.73 to 1.74. - -=item * - -L has been upgraded from version 1.40 to 1.41. - -=back - -=head1 Documentation - -=head2 Changes to Existing Documentation - -We have attempted to update the documentation to reflect the changes -listed in this document. If you find any we have missed, open an issue -at L. - -Additionally, the following selected changes have been made: - -=head3 L - -=over 4 - -=item * - -Binary and octal floating-point constants (such as C<012.345p-2> and -C<0b101.11p-1>) are now documented. This feature was first introduced in perl -5.22.0 together with hexadecimal floating-point constants and had a few bug -fixes in perl 5.28.0, but it was never formally documented. -[L] - -=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. - -=head2 Changes to Existing Diagnostics - -=over 4 - -=item * - -L - -Prevent this warning when accessing a function parameter in C<@_> that -is an lvalue reference to an untied hash element where the key was -undefined. This warning is still produced at the point of call. -[L] - -=back - -=head1 Testing - -Tests were added and changed to reflect the other additions and changes -in this release. - -=head1 Internal Changes - -=over 4 - -=item * - -Three new API functions have been added to interact with the regexp global -match position stored in an SV. These are C, -C and C. Using these -API functions avoids XS modules needing to know about or interact directly -with the way this position is currently stored, which involves the -C magic type. - -=back - -=head1 Selected Bug Fixes - -=over 4 - -=item * - -In regexes, the contents of C<\g{...}> backreferences are now properly -validated. Previously, C<\g{1 FOO}> was silently parsed as C<\g{1}>, ignoring -everything after the first number. -[L] - -=item * - -A run-time pattern which contained a code block which recursed back to the -same bit of code which ran that match, could cause a crash. -[L] - -For example: - - my $r = qr/... (?{ foo() if ... }) .../; - sub foo { $string =~ $r } - foo() - -=back - -=head1 Obituary - -Andrew Main (ZEFRAM) passed away on March 10, 2025. - -Zefram was a brilliant person, seemingly knowledgeable in everything -and happy to impart his knowledge and share his striking insights with a -gentle, technical demeanor that often failed to convey the genuine care -with which he communicated. - -It would be impossible to overstate the impact that Zefram has had on -both the language and culture of Perl over the years. From his countless -contributions to the code-base, to his often quirky but always distinctive -appearances at conferences and gatherings, his influence and memory are -sure to endure long into the future. - -Zefram wished to have no designated memorial location in -meatspace. His designated memorial location in cyberspace is -L. - -=head1 Acknowledgements - -Perl 5.41.10 represents approximately 4 weeks of development since Perl -5.41.9 and contains approximately 19,000 lines of changes across 340 files -from 14 authors. - -Excluding auto-generated files, documentation and release tools, there were -approximately 16,000 lines of changes to 270 .pm, .t, .c and .h files. - -Perl continues to flourish into its fourth decade thanks to a vibrant -community of users and developers. The following people are known to have -contributed the improvements that became Perl 5.41.10: - -brian d foy, Chris 'BinGOs' Williams, Dagfinn Ilmari Mannsåker, Daniel -Dragan, David Mitchell, Graham Knop, Karl Williamson, Leon Timmermans, Lukas -Mai, Paul Evans, Philippe Bruhat (BooK), Richard Leach, Tony Cook, Yves -Orton. - -The list above is almost certainly incomplete as it is automatically -generated from version control history. In particular, it does not include -the names of the (very much appreciated) contributors who reported issues to -the Perl bug tracker. - -Many of the changes included in this version originated in the CPAN modules -included in Perl's core. We're grateful to the entire CPAN community for -helping Perl to flourish. - -For a more complete list of all of Perl's historical contributors, please -see the F file in the Perl source distribution. - -=head1 Reporting Bugs - -If you find what you think is a bug, you might check the perl bug database -at L. There may also be information at -L, the Perl Home Page. - -If you believe you have an unreported bug, please open an issue at -L. Be sure to trim your bug down to a -tiny but sufficient test case. - -If the bug you are reporting has security implications which make it -inappropriate to send to a public issue tracker, then see -L -for details of how to report the issue. - -=head1 Give Thanks - -If you wish to thank the Perl 5 Porters for the work we had done in Perl 5, -you can do so by running the C program: - - perlthanks - -This will send an email to the Perl 5 Porters list with your show of thanks. - -=head1 SEE ALSO - -The F file for an explanation of how to view exhaustive details on -what changed. - -The F file for how to build Perl. - -The F file for general stuff. - -The F and F files for copyright information. - -=cut diff --git a/pod/perl54111delta.pod b/pod/perl54111delta.pod deleted file mode 100644 index f5894a2afada..000000000000 --- a/pod/perl54111delta.pod +++ /dev/null @@ -1,254 +0,0 @@ -=encoding utf8 - -=head1 NAME - -perl54111delta - what is new for perl v5.41.11 - -=head1 DESCRIPTION - -This document describes differences between the 5.41.10 release and the 5.41.11 -release. - -If you are upgrading from an earlier release such as 5.41.9, first read -L, which describes differences between 5.41.9 and 5.41.10. - -=head1 Core Enhancements - -=head2 Unicode 16.0 supported - -Perl now supports Unicode 16.0 -L including the changes -introduced in 15.1 L. - -=head1 Security - -=head2 [CVE-2024-56406] Heap buffer overflow vulnerability with tr// - -A heap buffer overflow vulnerability was discovered in Perl. - -When there are non-ASCII bytes in the left-hand-side of the C operator, -C can overflow the destination pointer C. - - $ perl -e '$_ = "\x{FF}" x 1000000; tr/\xFF/\x{100}/;' - Segmentation fault (core dumped) - -It is believed that this vulnerability can enable Denial of Service or -Arbitrary Code Execution attacks on platforms that lack sufficient defenses. - -Discovered by: Nathan Mills. - -=head1 Modules and Pragmata - -=head2 Updated Modules and Pragmata - -=over 4 - -=item * - -L has been upgraded from version 2.191 to 2.192. - -=item * - -L has been upgraded from version 7.72 to 7.74. - -=item * - -L has been upgraded from version 1.19 to 1.20. - -=item * - -L has been upgraded from version 3.92 to 3.94. - -=item * - -L has been upgraded from version 2.004001 to 2.005002. - -=item * - -L has been upgraded from version 0.5019 to 0.5020. - -=item * - -L has been upgraded from version 5.20250321 to 5.20250420. - -=item * - -L has been upgraded from version 2.03 to 2.05. - -=item * - -L has been upgraded from version 3.36 to 3.37. - -=item * - -L has been upgraded from version 1.302209 to 1.302210. - -=item * - -L has been upgraded from version 1.9777 to 1.9778. - -=item * - -L has been upgraded from version 1.35 to 1.36. - -=item * - -L has been upgraded from version 0.79 to 0.80. - -=item * - -L has been upgraded from version 1.41 to 1.42. - -This fixes [L]. - -=back - -=head1 Documentation - -=head2 perlop - -=over 4 - -=item * - -Normalized alignment of verbatim sections, fixing how they are displayed by -some Pod viewers that strip indentation. - -=back - -=head2 Changes to Existing Documentation - -We have attempted to update the documentation to reflect the changes -listed in this document. If you find any we have missed, open an issue -at L. - -Additionally, the following selected changes have been made: - -=head3 L - -=over 4 - -=item * - -Additional caveats have been added to the description of C. - -=back - -=head2 Platform-Specific Notes - -=over 4 - -=item MacOS (Darwin) - -Collation of strings using locales on MacOS 15 (Darwin 24) and up has -been turned off due to a failed assertion in its libc. - -=back - -=head1 Selected Bug Fixes - -=over 4 - -=item * - -In some cases an C would not add integer parts to the source -lines saved by the debugger. [L] - -=item * - -Save debugger lines as C SVs rather than as C SVs as they -don't need magic, aren't blessed and don't need to store a floating -point part. This should save 24 bytes per stored line for 64-bit -systems, more for C<-Duselongdouble> or C<-Dusequadmath> builds. -Discussed in [L]. - -=item * - -Ensure cloning the save stack for fork emulation doesn't duplicate -freeing the RExC state. [L] - -=item * - -Smartmatch against a code reference that uses a loop exit such as -C would crash perl. [L] - -=item * - -Class initializers and C blocks, per L, that -called C or other loop exits would crash perl. Same cause as -for [L]. - -=item * - -Prevent a signature parameter of the form C<$ => from leaking an OP at -compile-time. [L] - -=back - -=head1 Acknowledgements - -Perl 5.41.11 represents approximately 4 weeks of development since Perl -5.41.10 and contains approximately 250,000 lines of changes across 460 files -from 22 authors. - -Excluding auto-generated files, documentation and release tools, there were -approximately 39,000 lines of changes to 320 .pm, .t, .c and .h files. - -Perl continues to flourish into its fourth decade thanks to a vibrant -community of users and developers. The following people are known to have -contributed the improvements that became Perl 5.41.11: - -Chad Granum, Chris 'BinGOs' Williams, Dan Book, Daniel Dragan, Graham Knop, -James E Keenan, Karen Etheridge, Karl Williamson, Leon Timmermans, Lukas -Mai, Marek Rouchal, Paul Evans, Peter Eisentraut, Peter John Acklam, -Philippe Bruhat (BooK), Richard Leach, Steve Hay, TAKAI Kousuke, Thibault -Duponchelle, Tony Cook, Unicode Consortium, Vladimír Marek. - -The list above is almost certainly incomplete as it is automatically -generated from version control history. In particular, it does not include -the names of the (very much appreciated) contributors who reported issues to -the Perl bug tracker. - -Many of the changes included in this version originated in the CPAN modules -included in Perl's core. We're grateful to the entire CPAN community for -helping Perl to flourish. - -For a more complete list of all of Perl's historical contributors, please -see the F file in the Perl source distribution. - -=head1 Reporting Bugs - -If you find what you think is a bug, you might check the perl bug database -at L. There may also be information at -L, the Perl Home Page. - -If you believe you have an unreported bug, please open an issue at -L. Be sure to trim your bug down to a -tiny but sufficient test case. - -If the bug you are reporting has security implications which make it -inappropriate to send to a public issue tracker, then see -L -for details of how to report the issue. - -=head1 Give Thanks - -If you wish to thank the Perl 5 Porters for the work we had done in Perl 5, -you can do so by running the C program: - - perlthanks - -This will send an email to the Perl 5 Porters list with your show of thanks. - -=head1 SEE ALSO - -The F file for an explanation of how to view exhaustive details on -what changed. - -The F file for how to build Perl. - -The F file for general stuff. - -The F and F files for copyright information. - -=cut diff --git a/pod/perl54112delta.pod b/pod/perl54112delta.pod deleted file mode 100644 index a4c34b7f2dba..000000000000 --- a/pod/perl54112delta.pod +++ /dev/null @@ -1,99 +0,0 @@ -=encoding utf8 - -=head1 NAME - -perl54112delta - what is new for perl v5.41.12 - -=head1 DESCRIPTION - -This document describes differences between the 5.41.11 release and the 5.41.12 -release. - -If you are upgrading from an earlier release such as 5.41.10, first read -L, which describes differences between 5.41.10 and 5.41.11. - -=head1 Configuration and Compilation - -This release contains one fix, which only affects the darwin architecture (macos), -where F contained a syntax error that caused the installation to fail. - -=head2 Platform-Specific Notes - -=over 4 - -=item MacOS (Darwin) - -As in release 5.41.11, collation of strings using locales on MacOS 15 (Darwin -24) and up has been turned off due to a failed assertion in its libc. - -If earlier versions are also experiencing issues (such as failures in -F), you can explicitly disable locale collation by adding the -C<-Accflags=-DNO_LOCALE_COLLATE> option to your invocation of C<./Configure>, -or just C<-DNO_LOCALE_COLLATE> to the C and C -variables in F. - -=back - -=head1 Acknowledgements - -Perl 5.41.12 represents approximately 0 weeks of development since Perl -5.41.11 and contains approximately 770 lines of changes across 36 files from -1 authors. - -Excluding auto-generated files, documentation and release tools, there were -approximately 35 lines of changes to 4 .pm, .t, .c and .h files. - -Perl continues to flourish into its fourth decade thanks to a vibrant -community of users and developers. The following people are known to have -contributed the improvements that became Perl 5.41.12: - -Karen Etheridge. - -The list above is almost certainly incomplete as it is automatically -generated from version control history. In particular, it does not include -the names of the (very much appreciated) contributors who reported issues to -the Perl bug tracker. - -Many of the changes included in this version originated in the CPAN modules -included in Perl's core. We're grateful to the entire CPAN community for -helping Perl to flourish. - -For a more complete list of all of Perl's historical contributors, please -see the F file in the Perl source distribution. - -=head1 Reporting Bugs - -If you find what you think is a bug, you might check the perl bug database -at L. There may also be information at -L, the Perl Home Page. - -If you believe you have an unreported bug, please open an issue at -L. Be sure to trim your bug down to a -tiny but sufficient test case. - -If the bug you are reporting has security implications which make it -inappropriate to send to a public issue tracker, then see -L -for details of how to report the issue. - -=head1 Give Thanks - -If you wish to thank the Perl 5 Porters for the work we had done in Perl 5, -you can do so by running the C program: - - perlthanks - -This will send an email to the Perl 5 Porters list with your show of thanks. - -=head1 SEE ALSO - -The F file for an explanation of how to view exhaustive details on -what changed. - -The F file for how to build Perl. - -The F file for general stuff. - -The F and F files for copyright information. - -=cut diff --git a/pod/perl54113delta.pod b/pod/perl54113delta.pod deleted file mode 100644 index 329eca3f8976..000000000000 --- a/pod/perl54113delta.pod +++ /dev/null @@ -1,213 +0,0 @@ -=encoding utf8 - -=head1 NAME - -perl54113delta - what is new for perl v5.41.13 - -=head1 DESCRIPTION - -This document describes differences between the 5.41.12 release and the 5.41.13 -release. - -If you are upgrading from an earlier release such as 5.41.11, first read -L, which describes differences between 5.41.11 and 5.41.12. - -=head1 Core Enhancements - -=head2 Assigning logical xor C<^^=> operator - -Perl 5.40.0 introduced the logical medium-precedence exclusive-or operator -C<^^>. It was not noticed at the time that the assigning variant C<^^=> was -also missing. This is now added. - -=head1 Modules and Pragmata - -=head2 Updated Modules and Pragmata - -=over 4 - -=item * - -L has been upgraded from version 1.83 to 1.85. - -=item * - -L has been upgraded from version 0.018 to 0.019. - -=item * - -L has been upgraded from version 0.034 to 0.035. - -=item * - -L has been upgraded from version 0.280240 to 0.280241. - -=item * - -L has been upgraded from version 7.74 to 7.76. - -=item * - -L has been upgraded from version 1.95 to 1.96. - -=item * - -L has been upgraded from version 5.20250420 to 5.20250528. - -=item * - -L has been upgraded from version 0.47 to 0.48. - -=item * - -L has been upgraded from version 1.27 to 1.28. - -=item * - -L has been upgraded from version 1.13 to 1.14. - -=item * - -L has been upgraded from version 3.05 to 3.06. - -=item * - -L has been upgraded from version 1.09 to 1.10. - -=item * - -L has been upgraded from version 0.80 to 0.81. - -=back - -=head1 Platform Support - -=head2 Platform-Specific Notes - -=over 4 - -=item Cygwin - -Supply an explicit base address for C that cannot -conflict with those generated by C<--enable-auto-image-base>. [L][L] - -=back - -=head1 Selected Bug Fixes - -=over 4 - -=item * - -Exceptions thrown and caught entirely within a C or C -block no longer stop the outer run-loop. - -Code such as the following would stop running the contents of the C -block once the inner exception in the inner C/C block was caught. -This has now been fixed, and runs as expected. ([L]). - - defer { - try { die "It breaks\n"; } - catch ($e) { warn $e } - - say "This line would never run"; - } - -=item * - -L now clears the error flag if an error occurs when -reading and that error is C or C. This allows -old code that depended on C to clear all errors to ignore -these relatively harmless errors. [L] - -=item * - -L|perlfunc/open> automatically creates an anonymous temporary file -when passed C as a filename: - - open(my $fh, "+>", undef) or die ... - -This is supposed to work only when the undefined value is the one returned by -the C function. - -In perls before 5.41.3, this caused a problem due to the fact that the same -undefined value can be generated by lookups of non-existent hash keys or array -elements, which can lead to bugs in user-level code (reported as [L]). - -In 5.41.3, additional checks based on the syntax tree of the call site were -added, which fixed this issue for some number of common cases, though not all -of them, at the cost of breaking the ability of APIs that wrap C to -expose its anonymous file mode. A notable example of such an API is autodie. - -This release reverts to the old problem in preference to the new one for the -time being. - -=back - -=head1 Acknowledgements - -Perl 5.41.13 represents approximately 5 weeks of development since Perl -5.41.12 and contains approximately 5,200 lines of changes across 180 files -from 20 authors. - -Excluding auto-generated files, documentation and release tools, there were -approximately 1,200 lines of changes to 92 .pm, .t, .c and .h files. - -Perl continues to flourish into its fourth decade thanks to a vibrant -community of users and developers. The following people are known to have -contributed the improvements that became Perl 5.41.13: - -Aristotle Pagaltzis, Chris 'BinGOs' Williams, Dagfinn Ilmari Mannsåker, Dan -Book, David Mitchell, Graham Knop, H.Merijn Brand, James E Keenan, Karen -Etheridge, Karl Williamson, Leon Timmermans, Lukas Mai, Paul Evans, Paul -Johnson, Philippe Bruhat (BooK), Richard Leach, Sisyphus, Thibault -Duponchelle, Todd Rinaldo, Tony Cook. - -The list above is almost certainly incomplete as it is automatically -generated from version control history. In particular, it does not include -the names of the (very much appreciated) contributors who reported issues to -the Perl bug tracker. - -Many of the changes included in this version originated in the CPAN modules -included in Perl's core. We're grateful to the entire CPAN community for -helping Perl to flourish. - -For a more complete list of all of Perl's historical contributors, please -see the F file in the Perl source distribution. - -=head1 Reporting Bugs - -If you find what you think is a bug, you might check the perl bug database -at L. There may also be information at -L, the Perl Home Page. - -If you believe you have an unreported bug, please open an issue at -L. Be sure to trim your bug down to a -tiny but sufficient test case. - -If the bug you are reporting has security implications which make it -inappropriate to send to a public issue tracker, then see -L -for details of how to report the issue. - -=head1 Give Thanks - -If you wish to thank the Perl 5 Porters for the work we had done in Perl 5, -you can do so by running the C program: - - perlthanks - -This will send an email to the Perl 5 Porters list with your show of thanks. - -=head1 SEE ALSO - -The F file for an explanation of how to view exhaustive details on -what changed. - -The F file for how to build Perl. - -The F file for general stuff. - -The F and F files for copyright information. - -=cut diff --git a/pod/perl5411delta.pod b/pod/perl5411delta.pod deleted file mode 100644 index 4fd156c15b44..000000000000 --- a/pod/perl5411delta.pod +++ /dev/null @@ -1,278 +0,0 @@ -=encoding utf8 - -=head1 NAME - -perl5411delta - what is new for perl v5.41.1 - -=head1 DESCRIPTION - -This document describes differences between the 5.41.0 release and the 5.41.1 -release. - -If you are upgrading from an earlier release such as 5.40.0, first read -L, which describes differences between 5.40.0 and 5.41.0. - -=head1 Core Enhancements - -=head2 More CORE:: subs - -C has been added as a subroutine to the CORE:: namespace. - -Previously, code like C<&CORE::chdir($dir)> or C<< my $ref = \&CORE::chdir; -$ref->($dir) >> would throw an error saying C<&CORE::chdir cannot be called -directly>. These cases are now fully supported. - -=head1 Performance Enhancements - -=over 4 - -=item * - -Constant-folded strings are now sharable via the Copy-on-Write mechanism. -[L] - -The following code would previously have allocated eleven string buffers, -each containing one million "A"s: - -C - -Now a single buffer is allocated and shared between a CONST OP and -the ten scalar elements of L<@scalars>. - -Note that any code using this sort of constant to simulate memory leaks -(perhaps in test files) must now permute the string in order to trigger -a string copy and the allocation of separate buffers. For example, -C<("A" x 1_000_000).time> might be a suitable small change. - -=item * - -C: additional efficiency for mortal copies. - -=back - -=head1 Modules and Pragmata - -=head2 Updated Modules and Pragmata - -=over 4 - -=item * - -L has been upgraded from version 0.014 to 0.015. - -Documented when each L function was first available and stabilized. - -=item * - -L has been upgraded from version 2.189 to 2.190. - -=item * - -L has been upgraded from version 3.51 to 3.52. - -=item * - -L has been upgraded from version 1.18 to 1.19. - -Removed pointless C function. - -=item * - -L has been upgraded from version 2.57 to 2.58. - -=item * - -L has been upgraded from version 2.003002 to 2.003003. - -=item * - -L has been upgraded from version 5.20240610 to 5.20240620. - -=item * - -L has been upgraded from version 2.20 to 2.21. - -=item * - -L has been upgraded from version 2.05 to 2.06. - -=item * - -L has been upgraded from version 0.000162 to 0.000163. - -=item * - -L has been upgraded from version 1.13 to 1.14. - -=item * - -L has been upgraded from version 1.69 to 1.70. - -=back - -=head1 Documentation - -=head2 Changes to Existing Documentation - -We have attempted to update the documentation to reflect the changes -listed in this document. If you find any we have missed, open an issue -at L. - -Additionally, the following selected changes have been made: - -=head3 L - -=over 4 - -=item * - -Combined the documentation for several groups of related functions -into single entries. - -=back - -=head3 L - -=over 4 - -=item * - -Clarified the description of C and C in relation -to built-in types and class names. - -=item * - -Clarified that perl C is stable (and has been since v5.8.0). - -=back - -=head3 L - -=over 4 - -=item * - -Added some description of "real" Cs compared to "fake" Cs. - -=back - -=head1 Testing - -Tests were added and changed to reflect the other additions and -changes in this release. Furthermore, these significant changes were -made: - -=over 4 - -=item * - -A new F test script was added as a place for TODO tests -for known unfixed bugs. - -=back - -=head1 Internal Changes - -=over 4 - -=item * - -The L> function is introduced. This is an -enhanced version of L>, which is retained for -backwards compatibility. Both are to call L when you have -the year, month, hour, etc. The new function handles UTF8ness for you, -and allows you to specify if you want the possibility of daylight -savings time to be considered. C never considers DST. - -=item * - -The C, C, and C -functions are no longer experimental. - -=back - -=head1 Selected Bug Fixes - -=over 4 - -=item * - -Fix null pointer dereference in S_SvREFCNT_dec [L]. - -=item * - -Fix feature 'class' Segmentation fault in DESTROY [L]. - -=item * - -Fix C [L]. - -=back - -=head1 Acknowledgements - -Perl 5.41.1 represents approximately 3 weeks of development since Perl -5.41.0 and contains approximately 6,000 lines of changes across 270 files -from 20 authors. - -Excluding auto-generated files, documentation and release tools, there were -approximately 3,900 lines of changes to 210 .pm, .t, .c and .h files. - -Perl continues to flourish into its fourth decade thanks to a vibrant -community of users and developers. The following people are known to have -contributed the improvements that became Perl 5.41.1: - -Chad Granum, Craig A. Berry, Dabrien 'Dabe' Murphy, Dan Book, David -Mitchell, Elvin Aslanov, Graham Knop, James E Keenan, James Raspass, Johan -Vromans, Karl Williamson, Leon Timmermans, Lukas Mai, Max Maischein, Paul -Evans, Peter John Acklam, Philippe Bruhat (BooK), Richard Leach, TAKAI -Kousuke, Tony Cook. - -The list above is almost certainly incomplete as it is automatically -generated from version control history. In particular, it does not include -the names of the (very much appreciated) contributors who reported issues to -the Perl bug tracker. - -Many of the changes included in this version originated in the CPAN modules -included in Perl's core. We're grateful to the entire CPAN community for -helping Perl to flourish. - -For a more complete list of all of Perl's historical contributors, please -see the F file in the Perl source distribution. - -=head1 Reporting Bugs - -If you find what you think is a bug, you might check the perl bug database -at L. There may also be information at -L, the Perl Home Page. - -If you believe you have an unreported bug, please open an issue at -L. Be sure to trim your bug down to a -tiny but sufficient test case. - -If the bug you are reporting has security implications which make it -inappropriate to send to a public issue tracker, then see -L -for details of how to report the issue. - -=head1 Give Thanks - -If you wish to thank the Perl 5 Porters for the work we had done in Perl 5, -you can do so by running the C program: - - perlthanks - -This will send an email to the Perl 5 Porters list with your show of thanks. - -=head1 SEE ALSO - -The F file for an explanation of how to view exhaustive details on -what changed. - -The F file for how to build Perl. - -The F file for general stuff. - -The F and F files for copyright information. - -=cut diff --git a/pod/perl5412delta.pod b/pod/perl5412delta.pod deleted file mode 100644 index 41bdc87852ab..000000000000 --- a/pod/perl5412delta.pod +++ /dev/null @@ -1,299 +0,0 @@ -=encoding utf8 - -=head1 NAME - -perl5412delta - what is new for perl v5.41.2 - -=head1 DESCRIPTION - -This document describes differences between the 5.41.1 release and the 5.41.2 -release. - -If you are upgrading from an earlier release such as 5.41.0, first read -L, which describes differences between 5.41.0 and 5.41.1. - -=head1 Core Enhancements - -=head2 New pragma C> - -This allows you to declare that the portion of a program for the -remainder of the lexical scope of this pragma is encoded either entirely -in ASCII (for S>) or if UTF-8 is allowed -as well (for S>). No other encodings are -accepted. The second form is entirely equivalent to S>, and -may be used interchangeably with that. - -The purpose of this pragma is to catch cases early where you forgot to -specify S>. - -S> is automatically enabled within the -lexical scope of a S> or higher. - -S> turns off all this checking for the remainder of -its lexical scope. The meaning of non-ASCII characters is then undefined. - -=head1 Modules and Pragmata - -=head2 Updated Modules and Pragmata - -=over 4 - -=item * - -L has been upgraded from version 1.76 to 1.77. - -Now understands the new C<^^> operator (high-precedence xor). - -=item * - -L has been upgraded from version 1.25 to 1.26. - -=item * - -L has been upgraded from version 3.72 to 3.73. - -=item * - -L has been upgraded from version 3.90 to 3.92. - -=item * - -L has been upgraded from version 1.12 to 1.13. - -=item * - -L has been upgraded from version 5.20240620 to 5.20240720. - -=item * - -C has been upgraded from version 5.01_02 to v6.0.2. - -This distribution provides the L and L -modules and the L and L command-line utilities. -The distribution now uses semantic -versioning for the package and module versions, with a C prefix to work -with Perl's packaging system. L, in particular, has received a -variety of improvements. - -=item * - -L has been upgraded from version 2.21 to 2.22. - -=item * - -L has been upgraded from version 3.32 to 3.33. - -=item * - -L has been upgraded from version 2.40 to 2.41. - -=item * - -L has been upgraded from version 1.25 to 1.27. - -=item * - -L has been upgraded from version 0.59 to 0.59_01. - -Imported an upstream PR that fixes symbolic link support detection on -32-bit Windows. [L] - -=item * - -L has been upgraded from version 1.36 to 1.37. - -=back - -=head1 Documentation - -=head2 Changes to Existing Documentation - -We have attempted to update the documentation to reflect the changes -listed in this document. If you find any we have missed, open an issue -at L. - -Additionally, the following selected changes have been made: - -=head3 L - -=over 4 - -=item * - -All forms of C are now documented together. - -=item * - -C is now documented with C and additional notes added. - -=back - -=head3 L - -=over 4 - -=item * - -The list of Steering Council and Core Team members have been updated, following the conclusion of -the latest election on 2024-07-17. - -=back - -=head3 L - -=over 4 - -=item * - -Entries for C<$#> and C<$*> have been amended to note that use of them result in a compilation -error, not a warning. - -=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. - -=head2 New Diagnostics - -=head3 New Errors - -=over 4 - -=item * - -L - -(F) This pragma forbids non-ASCII characters within its scope. - -=back - -=head3 New Warnings - -=over 4 - -=item * - -L<__CLASS__ is experimental|perldiag/"__CLASS__ is experimental"> - -(S experimental::class) This warning is emitted if you use the C<__CLASS__> -keyword of C. This keyword is currently -experimental and its behaviour may change in future releases of Perl. - -=back - -=head1 Utility Changes - -=head2 F - -=over 4 - -=item * - -Separate installation (without overwriting installed modules) is now the default - -=item * - -Documentation is significantly enhanced - -=back - -=head1 Testing - -Tests were added and changed to reflect the other additions and changes -in this release. - -=head1 Internal Changes - -=over 4 - -=item * - -Calls to L with the C flag -set also ensure the SV parameters constructed from the C -parameter are released before C returns. Previously they -were released on the next L. [L] - -=back - -=head1 Selected Bug Fixes - -=over 4 - -=item * - -C now returns real booleans (as its documentation describes), not -integers. This means the result of a failed C now stringifies to C<''>, -not C<'0'>. - -[L] - -=back - -=head1 Acknowledgements - -Perl 5.41.2 represents approximately 3 weeks of development since Perl -5.41.1 and contains approximately 4,100 lines of changes across 180 files -from 13 authors. - -Excluding auto-generated files, documentation and release tools, there were -approximately 1,900 lines of changes to 95 .pm, .t, .c and .h files. - -Perl continues to flourish into its fourth decade thanks to a vibrant -community of users and developers. The following people are known to have -contributed the improvements that became Perl 5.41.2: - -Aaron Dill, Dagfinn Ilmari Mannsåker, Elvin Aslanov, Erik Huelsmann, Graham -Knop, H.Merijn Brand, James E Keenan, Karen Etheridge, Karl Williamson, -Lukas Mai, Philippe Bruhat (BooK), Russ Allbery, Tony Cook. - -The list above is almost certainly incomplete as it is automatically -generated from version control history. In particular, it does not include -the names of the (very much appreciated) contributors who reported issues to -the Perl bug tracker. - -Many of the changes included in this version originated in the CPAN modules -included in Perl's core. We're grateful to the entire CPAN community for -helping Perl to flourish. - -For a more complete list of all of Perl's historical contributors, please -see the F file in the Perl source distribution. - -=head1 Reporting Bugs - -If you find what you think is a bug, you might check the perl bug database -at L. There may also be information at -L, the Perl Home Page. - -If you believe you have an unreported bug, please open an issue at -L. Be sure to trim your bug down to a -tiny but sufficient test case. - -If the bug you are reporting has security implications which make it -inappropriate to send to a public issue tracker, then see -L -for details of how to report the issue. - -=head1 Give Thanks - -If you wish to thank the Perl 5 Porters for the work we had done in Perl 5, -you can do so by running the C program: - - perlthanks - -This will send an email to the Perl 5 Porters list with your show of thanks. - -=head1 SEE ALSO - -The F file for an explanation of how to view exhaustive details on -what changed. - -The F file for how to build Perl. - -The F file for general stuff. - -The F and F files for copyright information. - -=cut diff --git a/pod/perl5413delta.pod b/pod/perl5413delta.pod deleted file mode 100644 index 7abb99829a5e..000000000000 --- a/pod/perl5413delta.pod +++ /dev/null @@ -1,413 +0,0 @@ -=encoding utf8 - -=head1 NAME - -perl5413delta - what is new for perl v5.41.3 - -=head1 DESCRIPTION - -This document describes differences between the 5.41.2 release and the 5.41.3 -release. - -If you are upgrading from an earlier release such as 5.41.1, first read -L, which describes differences between 5.41.1 and 5.41.2. - -=head1 Incompatible Changes - -=head2 Apostrophe is no longer recognized as a global name separator - -The apostrophe C<'> has been recognized as a separator between -components of package names and package variables since Perl 3, acting -exactly like C<::>, which was introduced in Perl 5. - -Use of C<'> as a package separator was deprecated in Perl 5.38 and has -now been removed. - -[L] - -=head2 Switch and Smart Match operator removed - -The "switch" feature and the smartmatch operator, C<~~>, were introduced in -v5.10. Their behavior was significantly changed in v5.10.1. When the -"experiment" system was added in v5.18.0, switch and smartmatch were -retroactively declared experimental. Over the years, proposals to fix or -supplement the features have come and gone. - -They were deprecated in Perl v5.38.0 and scheduled for removal in Perl -5.42.0 - -These features have now been entirely removed. - -If you code currently uses C/C or smart match this can be -replaced with an C/C chain, or there are several alternative -"switch" or smart match implementations on CPAN. - -In no particular order: - -=over - -=item * - -L - -=item * - -L - -=item * - -L - -=item * - -L - -=back - -[L] - -=head1 Performance Enhancements - -=over 4 - -=item * - -C now runs at the same speed regardless of the internal -representation of its operand, as long as the only characters being -translated are ASCII-range, for example C. Previously, if -the internal encoding was UTF-8, a slower, more general implementation -was used. - -=back - -=head1 Modules and Pragmata - -=head2 Updated Modules and Pragmata - -=over 4 - -=item * - -L has been upgraded from version 1.77 to 1.78. - -=item * - -L has been upgraded from version 2.212 to 2.213. - -=item * - -L has been upgraded from version 2.212 to 2.213. - -=item * - -L has been upgraded from version 1.56 to 1.57. - -=item * - -L has been upgraded from version 3.52 to 3.53. - -=item * - -L has been upgraded from version 3.51 to 3.53. - -=item * - -L has been upgraded from version 1.90 to 1.91. - -=item * - -L has been upgraded from version 2.212 to 2.213. - -=item * - -L has been upgraded from version 5.20240720 to 5.20240829. - -=item * - -L has been upgraded from version 1.65 to 1.66. - -=item * - -L has been upgraded from version 1.37 to 1.38. - -=item * - -L has been upgraded from version 0.241 to 0.242. - -=item * - -L has been upgraded from version 1.80 to 1.81. - -C, C, C will now break on -the first line that is expected to execute in the sub. -[L] - -Distinguish between an empty list or undef for C -expressions. [L] - -=item * - -L has been upgraded from version 2.46 to 2.47. - -=item * - -L (the Scalar-List-Utils distribution) has been upgraded from -version 1.63 to 1.65. - -=item * - -L has been upgraded from version 3.33 to 3.34. - -=item * - -L has been upgraded from version 0.018 to 0.022. - -=item * - -L has been upgraded from version 3.48 to 3.50. - -=item * - -L has been upgraded from version 1.302199 to 1.302201 and -subsequently to 1.302201. Upstream on CPAN, the Test2-Suite distribution has -been merged into the Test-Simple distribution. Test2-Suite was formerly -shipped with the Perl core distribution. Test2-Suite's files are now found -under F in the Perl 5 source tree (whether you access that -source tree in a git checkout or in a released tarball). However, this should -have no impact whatsoever on any end-user of any modules formerly found under -Test2-Suite. - -=item * - -L has been upgraded from version 2.41 to 2.42. - -=item * - -L has been upgraded from version 1.40 to 1.41. - -=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. - -=head3 New Warnings - -=over 4 - -=item * - -L<%s() attempted on handle %s opened with open()|perldiag/"%s() attempted on handle %s opened with open()"> - -(W io) You called readdir(), telldir(), seekdir(), rewinddir() or -closedir() on a handle that was opened with open(). If you want to -use these functions to traverse the contents of a directory, you need -to open the handle with opendir(). - -[L] - -=item * - -L - -(W precedence) You wrote something like - - !$obj isa Some::Class - -but because C has higher precedence than C, this is interpreted as -C<(!$obj) isa Some::Class>, which checks whether a boolean is an instance of -C. If you want to negate the result of C instead, use one of: - - !($obj isa Some::Class) # explicit parentheses - not $obj isa Some::Class # low-precedence 'not' operator - -=back - -=head2 Changes to Existing Diagnostics - -=over 4 - -=item * - -L<%s() attempted on invalid dirhandle %s|perldiag/"%s() attempted on invalid dirhandle %s"> - -This was consolidated from separate messages for readdir(), telldir(), -seekdir(), rewinddir() and closedir() as part of refactoring for -[L]. - -=back - -=head1 Testing - -Tests were added and changed to reflect the other additions and -changes in this release. Furthermore, these significant changes were -made: - -=over 4 - -=item * - -Added testing of the perl headers against the C++ compiler -corresponding to the C compiler perl is being built with. -[L] - -=back - -=head1 Internal Changes - -=over 4 - -=item * - -When built with the C<-DDEBUGGING> compile option, perl API functions that -take pointers to distinct types of SVs (AVs, HVs or CVs) will check the -C of the passed values to ensure they are valid. Additionally, -internal code within core functions that attempts to extract AVs, HVs or CVs -from reference values passed in will also perform such checks. - -While this has been entirely tested by normal Perl CI testing, there may -still be some corner-cases where these constraints are violated in -otherwise-valid calls. These may require further investigation if they are -found, and specific code to be adjusted to account for it. - -=back - -=head1 Selected Bug Fixes - -=over 4 - -=item * - -L|perlfunc/open> automatically creates an anonymous temporary file when -passed C as a filename: - - open(my $fh, "+>", undef) or die ... - -Due to the way this feature was implemented, it would also trigger for -non-existent elements of arrays or hashes: - - open(my $fh, "+>", $hash{no_such_key}) or die ... - # unexpectedly succeeds and creates a temp file - -Now a temporary file is only created if a literal C is passed. -[L] - -=item * - -Compound assignment operators return lvalues that can be further modified: - - ($x &= $y) += $z; - # Equivalent to: - # $x &= $y; - # $x += $z; - -However, the separate numeric/string bitwise operators provided by L feature|feature/The 'bitwise' feature>, C<< &= ^= |= &.= ^.= |.= >>, -did not do so: - - use feature qw(bitwise); - ($x &= $y) += $z; - # Used to die: - # Can't modify numeric bitwise and (&) in addition (+) at ... - -This has been corrected. [L] - -=item * - -Starting in v5.39.8, L> would crash or produce odd errors -(such as C) when given a format -string that wasn't actually a string, but a number, C, or an object -(even one with overloaded string conversion). - -Now C stringifies its first argument, as before. -[L] - -=back - -=head1 Obituary - -Abe Timmerman (ABELTJE) passed away on August 15, 2024. Since 2002, Abe -built and maintained the L project: "a set of scripts and -modules that try to run the Perl core tests on as many configurations as -possible and combine the results into an easy to read report". Smoking -Perl on as many platforms and configurations as possible has been -instrumental in finding bugs and developing patches for those bugs. - -Abe was a regular attendee of the Perl Toolchain Summit (née Perl QA -Hackathon), the Dutch Perl Workshop and the Amsterdam.pm user group -meetings. With his kindness, his smile and his laugh, he helped make -Perl and its community better. - -Abeltje's memorial card said "Grab every opportunity to have a drink of -bubbly. This is an opportunity". We'll miss you Abe, and we'll have a -drink of bubbly in your honor. - -=head1 Acknowledgements - -Perl 5.41.3 represents approximately 6 weeks of development since Perl -5.41.2 and contains approximately 34,000 lines of changes across 740 files -from 23 authors. - -Excluding auto-generated files, documentation and release tools, there were -approximately 22,000 lines of changes to 370 .pm, .t, .c and .h files. - -Perl continues to flourish into its fourth decade thanks to a vibrant -community of users and developers. The following people are known to have -contributed the improvements that became Perl 5.41.3: - -Branislav Zahradník, Chad Granum, Craig A. Berry, Dan Jacobson, David -Mitchell, E. Choroba, Eric Herman, Graham Knop, iabyn, James E Keenan, Karen -Etheridge, Karl Williamson, Leon Timmermans, Lukas Mai, Max Maischein, Paul -Evans, Paul Marquess, Philippe Bruhat (BooK), Sisyphus, Štěpán Němec, -Steve Hay, TAKAI Kousuke, Thibault Duponchelle, Tony Cook. - -The list above is almost certainly incomplete as it is automatically -generated from version control history. In particular, it does not include -the names of the (very much appreciated) contributors who reported issues to -the Perl bug tracker. - -Many of the changes included in this version originated in the CPAN modules -included in Perl's core. We're grateful to the entire CPAN community for -helping Perl to flourish. - -For a more complete list of all of Perl's historical contributors, please -see the F file in the Perl source distribution. - -=head1 Reporting Bugs - -If you find what you think is a bug, you might check the perl bug database -at L. There may also be information at -L, the Perl Home Page. - -If you believe you have an unreported bug, please open an issue at -L. Be sure to trim your bug down to a -tiny but sufficient test case. - -If the bug you are reporting has security implications which make it -inappropriate to send to a public issue tracker, then see -L -for details of how to report the issue. - -=head1 Give Thanks - -If you wish to thank the Perl 5 Porters for the work we had done in Perl 5, -you can do so by running the C program: - - perlthanks - -This will send an email to the Perl 5 Porters list with your show of thanks. - -=head1 SEE ALSO - -The F file for an explanation of how to view exhaustive details on -what changed. - -The F file for how to build Perl. - -The F file for general stuff. - -The F and F files for copyright information. - -=cut diff --git a/pod/perl5414delta.pod b/pod/perl5414delta.pod deleted file mode 100644 index 4f43aa6609fd..000000000000 --- a/pod/perl5414delta.pod +++ /dev/null @@ -1,264 +0,0 @@ -=encoding utf8 - -=head1 NAME - -perl5414delta - what is new for perl v5.41.4 - -=head1 DESCRIPTION - -This document describes differences between the 5.41.3 release and the 5.41.4 -release. - -If you are upgrading from an earlier release such as 5.41.2, first read -L, which describes differences between 5.41.2 and 5.41.3. - -=head1 Modules and Pragmata - -=head2 Updated Modules and Pragmata - -=over 4 - -=item * - -L has been upgraded from version 2.36 to 2.37. - -=item * - -L has been upgraded from version 1.34 to 1.36. - -=item * - -L has been upgraded from version 3.53 to 3.54. - -=item * - -L has been upgraded from version 3.53 to 3.54. - -=item * - -L has been upgraded from version 5.20240829 to 5.20240920. - -=item * - -L has been upgraded from version 1.38 to 1.39. - -=item * - -L has been upgraded from version 1.65 to 1.66. - -=item * - -L has been upgraded from version 3.34 to 3.35. - -=item * - -L has been upgraded from version 1.302201 to 1.302204. - -=item * - -L has been upgraded from version 0.9930 to 0.9933. - -=item * - -L has been upgraded from version 1.37 to 1.38. - -=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. - -=head3 New Warnings - -=over 4 - -=item * - -L - -(W precedence) You wrote something like - - !$x < $y # parsed as: (!$x) < $y - !$x eq $y # parsed as: (!$x) eq $y - !$x =~ /regex/ # parsed as: (!$x) =~ /regex/ - !$obj isa Some::Class # parsed as: (!$obj) isa Some::Class - -but because C has higher precedence than comparison operators, C<=~>, and -C, this is interpreted as comparing/matching the logical negation of the -first operand, instead of negating the result of the comparison/match. - -To disambiguate, either use a negated comparison/binding operator: - - $x >= $y - $x ne $y - $x !~ /regex/ - -... or parentheses: - - !($x < $y) - !($x eq $y) - !($x =~ /regex/) - !($obj isa Some::Class) - -... or the low-precedence C operator: - - not $x < $y - not $x eq $y - not $x =~ /regex/ - not $obj isa Some::Class - -(If you did mean to compare the boolean result of negating the first operand, -parenthesize as C<< (!$x) < $y >>, C<< (!$x) eq $y >>, etc.) - -(This warning subsumes the C -warning from the previous perl release.) - -=back - -=head1 Configuration and Compilation - -=over 4 - -=item * - -Fix compilation on platforms (e.g. "Gentoo Prefix") with only a C locale [L] -Bug first reported downstream L - -=back - -=head1 Internal Changes - -=over 4 - -=item * - -The C function has been expanded to include additional information -about the recent C and C ops, as well as for -C and C which had not been done previously. - -=item * - -C now also has the facility to print extra debugging information -about custom operators, if those operators register a helper function via the -new C element of the C structure. For more information, see the -relevant additions to L. - -=back - -=head1 Selected Bug Fixes - -=over 4 - -=item * - -C and C now SvPV_force() the supplied -SV unless it is read only. This will remove CoW from the SV and -prevents code that writes through the generated pointer from modifying -the value of other SVs that happen the share the same CoWed string -buffer. - -Note: this does not make C safe, if the SV is magical -then any writes to the buffer will likely be discarded on the next -read. [L] - -=item * - -Enforce C for bareword file handles -that have strictness removed because they are used in open() with a -"dup" mode, such as in C<< open my $fh, ">&", THISHANDLE >>. [L] - -=item * - -Using C to tail call, or using the call_sv() and related APIs to -call, any of trim(), refaddr(), reftype(), ceil(), floor() or -stringify() in the C package would crash or assert due to a -C handling bug. [L] - -=item * - -Fix sv_gets() to accept a C append offset instead of C. -This prevents integer overflows when appending to a large C for -C aka C and C. -L - -=item * - -Fixed an issue where C failed to correctly identify -certain invalid UTF-8 sequences as invalid. Specifically, sequences -that start with continuation bytes or unassigned bytes could cause -unexpected behavior or a panic. This fix ensures that such invalid -sequences are now properly detected and handled. This correction -also resolves related issues in modules that handle UTF-8 processing, -such as C. - -=back - -=head1 Acknowledgements - -Perl 5.41.4 represents approximately 3 weeks of development since Perl -5.41.3 and contains approximately 5,800 lines of changes across 400 files -from 20 authors. - -Excluding auto-generated files, documentation and release tools, there were -approximately 3,700 lines of changes to 290 .pm, .t, .c and .h files. - -Perl continues to flourish into its fourth decade thanks to a vibrant -community of users and developers. The following people are known to have -contributed the improvements that became Perl 5.41.4: - -Andrei Horodniceanu, Antanas Vaitkus, Aristotle Pagaltzis, Craig A. Berry, -David Cantrell, David Mitchell, E. Choroba, Ed J, Eric Herman, Graham Knop, -James E Keenan, Karl Williamson, Leon Timmermans, Lukas Mai, Masahiro Honma, -Paul Evans, Philippe Bruhat (BooK), Sisyphus, Thibault Duponchelle, Tony -Cook. - -The list above is almost certainly incomplete as it is automatically -generated from version control history. In particular, it does not include -the names of the (very much appreciated) contributors who reported issues to -the Perl bug tracker. - -Many of the changes included in this version originated in the CPAN modules -included in Perl's core. We're grateful to the entire CPAN community for -helping Perl to flourish. - -For a more complete list of all of Perl's historical contributors, please -see the F file in the Perl source distribution. - -=head1 Reporting Bugs - -If you find what you think is a bug, you might check the perl bug database -at L. There may also be information at -L, the Perl Home Page. - -If you believe you have an unreported bug, please open an issue at -L. Be sure to trim your bug down to a -tiny but sufficient test case. - -If the bug you are reporting has security implications which make it -inappropriate to send to a public issue tracker, then see -L -for details of how to report the issue. - -=head1 Give Thanks - -If you wish to thank the Perl 5 Porters for the work we had done in Perl 5, -you can do so by running the C program: - - perlthanks - -This will send an email to the Perl 5 Porters list with your show of thanks. - -=head1 SEE ALSO - -The F file for an explanation of how to view exhaustive details on -what changed. - -The F file for how to build Perl. - -The F file for general stuff. - -The F and F files for copyright information. - -=cut diff --git a/pod/perl5415delta.pod b/pod/perl5415delta.pod deleted file mode 100644 index 7d81435b4c0c..000000000000 --- a/pod/perl5415delta.pod +++ /dev/null @@ -1,115 +0,0 @@ -=encoding utf8 - -=head1 NAME - -perl5415delta - what is new for perl v5.41.5 - -=head1 DESCRIPTION - -This document describes differences between the 5.41.4 release and the 5.41.5 -release. - -If you are upgrading from an earlier release such as 5.41.3, first read -L, which describes differences between 5.41.3 and 5.41.4. - -=head1 Modules and Pragmata - -=head2 Updated Modules and Pragmata - -=over 4 - -=item * - -L has been upgraded from version 2.58_01 to 2.59. - -=item * - -L has been upgraded from version 3.54 to 3.55. - -=item * - -L has been upgraded from version 3.54 to 3.55. - -=item * - -L has been upgraded from version 1.22 to 1.23. - -=item * - -L has been upgraded from version 5.20240920 to 5.20241020. - -=item * - -L has been upgraded from version 1.66 to 1.68. - -=item * - -L has been upgraded from version 1.69 to 1.70. - -=back - -=head1 Acknowledgements - -Perl 5.41.5 represents approximately 4 weeks of development since Perl -5.41.4 and contains approximately 4,900 lines of changes across 87 files -from 14 authors. - -Excluding auto-generated files, documentation and release tools, there were -approximately 3,800 lines of changes to 48 .pm, .t, .c and .h files. - -Perl continues to flourish into its fourth decade thanks to a vibrant -community of users and developers. The following people are known to have -contributed the improvements that became Perl 5.41.5: - -Craig A. Berry, Dan Book, David Mitchell, Gianni Ceccarelli, Karen -Etheridge, Karl Williamson, Leon Timmermans, Lukas Mai, Paul Evans, Philippe -Bruhat (BooK), Richard Leach, Sisyphus, TAKAI Kousuke, Thibault Duponchelle. - -The list above is almost certainly incomplete as it is automatically -generated from version control history. In particular, it does not include -the names of the (very much appreciated) contributors who reported issues to -the Perl bug tracker. - -Many of the changes included in this version originated in the CPAN modules -included in Perl's core. We're grateful to the entire CPAN community for -helping Perl to flourish. - -For a more complete list of all of Perl's historical contributors, please -see the F file in the Perl source distribution. - -=head1 Reporting Bugs - -If you find what you think is a bug, you might check the perl bug database -at L. There may also be information at -L, the Perl Home Page. - -If you believe you have an unreported bug, please open an issue at -L. Be sure to trim your bug down to a -tiny but sufficient test case. - -If the bug you are reporting has security implications which make it -inappropriate to send to a public issue tracker, then see -L -for details of how to report the issue. - -=head1 Give Thanks - -If you wish to thank the Perl 5 Porters for the work we had done in Perl 5, -you can do so by running the C program: - - perlthanks - -This will send an email to the Perl 5 Porters list with your show of thanks. - -=head1 SEE ALSO - -The F file for an explanation of how to view exhaustive details on -what changed. - -The F file for how to build Perl. - -The F file for general stuff. - -The F and F files for copyright information. - -=cut diff --git a/pod/perl5416delta.pod b/pod/perl5416delta.pod deleted file mode 100644 index 9e9430d8a613..000000000000 --- a/pod/perl5416delta.pod +++ /dev/null @@ -1,325 +0,0 @@ -=encoding utf8 - -=head1 NAME - -perl5416delta - what is new for perl v5.41.6 - -=head1 DESCRIPTION - -This document describes differences between the 5.41.5 release and the 5.41.6 -release. - -If you are upgrading from an earlier release such as 5.41.4, first read -L, which describes differences between 5.41.4 and 5.41.5. - -=head1 Performance Enhancements - -=over 4 - -=item * - -Code that uses the C function from the L module to generate -a list of index/value pairs out of array which is then passed into a -two-variable C list to unpack those again is now optimised to be more -efficient. - - my @array = (...); - - foreach my ($idx, $val) (builtin::indexed @array) { - ... - } - -In particular, a temporary list twice the size of the original -array is no longer generated. Instead, the list iterates down the array -in-place directly, in the same way that C would do. - -=back - -=head1 Incompatible Changes - -=head2 Apostrophe is again recognized as a global name separator - -This was deprecated in Perl 5.38 and removed as scheduled in perl -5.41.3, but after some discussion has been reinstated by default. - -This can be controlled with the C -feature which is enabled by default, but is disabled from the 5.41 -feature bundle onwards. - -If you want to disable use within your own code you can explicitly -disable the feature: - - no feature "apostrophe_as_package_separator"; - -Note that disabling this feature only prevents use of apostrophe as a -package separator within code; symbolic references still treat C<'> as -C<::> with the feature disabled: - - my $symref = "My'Module'Var"; - # default features - my $x = $My'Module'Var; # fine - no feature "apostrophe_as_package_separator"; - no strict "refs"; - my $y = $$symref; # like $My::Module::Var - my $z = $My'Module'Var; # syntax error - -[L] - -=head1 Modules and Pragmata - -=head2 Updated Modules and Pragmata - -=over 4 - -=item * - -L has been upgraded from version 1.78 to 1.80. - -It now retains parens around logical negations on the left-hand side of -comparisons (such as C<(!$x) == $y>) because omitting them would trigger a -C warning since perl v5.41.4. [L] - -=item * - -L has been upgraded from version 0.015 to 0.016. - -=item * - -L has been upgraded from version 2.37 to 2.38. - -=item * - -L has been upgraded from version 1.08 to 1.09. - -=item * - -L has been upgraded from version 3.55 to 3.56. - -=item * - -L has been upgraded from version 3.55 to 3.56. - -=item * - -L has been upgraded from version 1.91 to 1.92. - -=item * - -L has been upgraded from version 2.25 to 2.26. - -=item * - -L has been upgraded from version 0.088 to 0.090. - -=item * - -L has been upgraded from version 1.23 to 1.24. -L has been upgraded from version 1.07 to 1.08. - -There is now a way to pass lexical filehandles to child processes directly -(instead of having the module create a pipe internally). Previously, only -bareword filehandles could be used in "dup mode". - -=item * - -L has been upgraded from version 1.62 to 1.63. - -The complex number parser for string inputs has been improved. In particular, -C<1+i>, C<123i>, C, C<-inf>, C, and C<-infi> are now handled -correctly. - -=item * - -L has been upgraded from version 1.16 to 1.17. - -=item * - -L has been upgraded from version 5.20241020 to 5.20241120. - -=item * - -L has been upgraded from version 1.17 to 1.18. - -=item * - -L has been upgraded from version 1.18 to 1.19. - -=item * - -L has been upgraded from version 0.242 to 0.242_001. - -=item * - -L has been upgraded from version 2.22 to 2.23. - -=item * - -L has been upgraded from version 1.68 to 1.68_01. - -=item * - -L has been upgraded from version 0.022 to 0.023. - -=item * - -L has been upgraded from version 1.70 to 1.71. - -=back - -=head1 Platform Support - -=head2 Platform-Specific Notes - -=over 4 - -=item arm64 DARWIN - -Fix arm64 darwin hints when using use64bitall with Configure [L] - -=item Android - -Changes to perl_langinfo.h for Android [L] related to [L] - -=item Cygwin - -cygwin.c: fix several silly/terrible C errors [L] - -workaround DLL load address conflict [L] - -=back - -=head1 Internal Changes - -=over 4 - -=item * - -Enable removing most of mathoms.c and stub functions [L] and [L] - -=item * - -reinstate apostrophe as package separator behind a default enabled feature, -which is disabled from feature bundle 5.41. - -=item * - -pp_reverse: don't COW buffer just to then un-COW it [L] - -=back - -=head1 Selected Bug Fixes - -=over 4 - -=item * - -The perl parser would erroneously parse like C<=cut> some other POD directives -whose names start with I, prematurely terminating an embedded POD section. -The following cases were affected: I followed by a digit (e.g. -C<=cut2studio>), I followed by an underscore (e.g. C<=cut_grass>), and in -string C, any identifier starting with I (e.g. C<=cute>). -[L] - -=item * - -Builds with C<-msse> and quadmath on 32-bit x86 systems would crash -with a misaligned access early in the build. [L] - -=item * - -On threaded builds on POSIX-like systems, if the perl signal handler -receives we now resend the signal to the main perl thread. Previously -this would crash. [GH #22487] - -=back - -=head1 Known Problems - -=over 4 - -=item * - -C builds may fail during testing due to a conflict between the -load addresses of F and -F. This will also be visible -for anything that attempts to fork() with C loaded. - -This is known to fail for builds with options that increase the size -of the binary, such as C<-DDEBUGGING>, C<-Doptimize="-O0 -g"> or -C<-Doptimize="-O2 -g -march=x86-64-v2">. - -This can be avoided by building perl with -C<-Astatic_ext=I18N/Langinfo>. - -The base addresses are generated by the linker based on the names of -the DLLs, so this is expected to clear up for 5.41.7. - -[L] - -=back - -=head1 Acknowledgements - -Perl 5.41.6 represents approximately 4 weeks of development since Perl -5.41.5 and contains approximately 8,400 lines of changes across 180 files -from 14 authors. - -Excluding auto-generated files, documentation and release tools, there were -approximately 6,700 lines of changes to 120 .pm, .t, .c and .h files. - -Perl continues to flourish into its fourth decade thanks to a vibrant -community of users and developers. The following people are known to have -contributed the improvements that became Perl 5.41.6: - -Chad Granum, Chris 'BinGOs' Williams, Daniel Dragan, David Mitchell, Graham -Knop, James E Keenan, Karl Williamson, Lukas Mai, Marin Tsanov, Paul Evans, -pyrrhlin, Richard Leach, Thibault Duponchelle, Tony Cook. - -The list above is almost certainly incomplete as it is automatically -generated from version control history. In particular, it does not include -the names of the (very much appreciated) contributors who reported issues to -the Perl bug tracker. - -Many of the changes included in this version originated in the CPAN modules -included in Perl's core. We're grateful to the entire CPAN community for -helping Perl to flourish. - -For a more complete list of all of Perl's historical contributors, please -see the F file in the Perl source distribution. - -=head1 Reporting Bugs - -If you find what you think is a bug, you might check the perl bug database -at L. There may also be information at -L, the Perl Home Page. - -If you believe you have an unreported bug, please open an issue at -L. Be sure to trim your bug down to a -tiny but sufficient test case. - -If the bug you are reporting has security implications which make it -inappropriate to send to a public issue tracker, then see -L -for details of how to report the issue. - -=head1 Give Thanks - -If you wish to thank the Perl 5 Porters for the work we had done in Perl 5, -you can do so by running the C program: - - perlthanks - -This will send an email to the Perl 5 Porters list with your show of thanks. - -=head1 SEE ALSO - -The F file for an explanation of how to view exhaustive details on -what changed. - -The F file for how to build Perl. - -The F file for general stuff. - -The F and F files for copyright information. - -=cut diff --git a/pod/perl5417delta.pod b/pod/perl5417delta.pod deleted file mode 100644 index dbc5d2cd084b..000000000000 --- a/pod/perl5417delta.pod +++ /dev/null @@ -1,372 +0,0 @@ -=encoding utf8 - -=head1 NAME - -perl5417delta - what is new for perl v5.41.7 - -=head1 DESCRIPTION - -This document describes differences between the 5.41.6 release and the 5.41.7 -release. - -If you are upgrading from an earlier release such as 5.41.5, first read -L, which describes differences between 5.41.5 and 5.41.6. - -=head1 Core Enhancements - -=head2 New C<:writer> attribute on field variables - -Classes defined using C are now able to automatically -create writer accessors for scalar fields, by using the C<:writer> attribute, -similar to the way that C<:reader> already creates reader accessors. - - class Point { - field $x :reader :writer :param; - field $y :reader :writer :param; - } - - my $p = Point->new( x => 20, y => 40 ); - $p->set_x(60); - -=head2 New C and C operators - -A new experimental feature has been added, which adds two new list-processing -operators, C and C. - - use v5.40; - use feature 'all'; - - my @numbers = ... - - if(all { $_ % 2 == 0 } @numbers) { - say "All the numbers are even"; - } - -These operate similarly to C except that they only ever return true or -false, testing if any (or all) of the elements in the list make the testing -block yield true. Because of this they can short-circuit, avoiding the need -to test any further elements if a given element determines the eventual -result. - -These are inspired by the same-named functions in the L module, -except that they are implemented as direct core operators, and thus perform -faster, and do not produce an additional subroutine call stack frame for -invoking the code block. - -=head1 Performance Enhancements - -=over 4 - -=item * - -Code that uses the C function from the L module to generate -a list of index/value pairs out of an array or list which is then passed into -a two-variable C list to unpack those again is now optimised to be -more efficient. - - my @array = (...); - - foreach my ($idx, $val) (builtin::indexed @array) { - ... - } - -Z<> - - foreach my ($idx, $val) (builtin::indexed LIST...) { - ... - } - -In particular, a temporary list twice the size of the original is no longer -generated. Instead, the loop iterates down the original array or list -in-place directly, in the same way that C or -C would do. - -=back - -=head1 Modules and Pragmata - -=head2 Updated Modules and Pragmata - -=over 4 - -=item * - -L has been upgraded from version 1.80 to 1.81. - -=item * - -L has been upgraded from version 0.016 to 0.017. - -=item * - -L has been upgraded from version 0.018 to 0.020. - -=item * - -L has been upgraded from version 1.92 to 1.93. - -=item * - -L has been upgraded from version 0.42 to 0.43. - -=item * - -L has been upgraded from version 5.20241120 to 5.20241220. - -=item * - -L has been upgraded from version 1.66 to 1.67. - -=item * - -L has been upgraded from version 0.242_001 to 0.244. - -=item * - -L has been upgraded from version 1.71 to 1.72. - -=item * - -L has been upgraded from version 1.38 to 1.40. - -=back - -=head1 Documentation - -=head2 Changes to Existing Documentation - -We have attempted to update the documentation to reflect the changes -listed in this document. If you find any we have missed, open an issue -at L. - -Additionally, the following selected changes have been made: - -=head3 L - -=head4 F and F - -=over 4 - -=item Memory Allocation in C/XS - -Documentation was updated to reflect that mixing C, C, and -C vs C, C, and C are not allowed, and mixing -pointers between the 2 classes of APIs is not allowed. Updates made in -F and F. - -=back - -=over 4 - -=item -Added the change note for apostrophes in names being reinstated, which -was delayed by the review cycle. - -=back - - - -=head1 Configuration and Compilation - -=over 4 - -=item * - -The (mostly undocumented) configuration macro C has been -removed. When enabled (e.g. with C<./Configure -A ccflags=-DPERL_STRICT_CR>), -it would make the perl parser throw a fatal error when it encountered a CR -(carriage return) character in source files. The default (and now only) -behavior of the perl parser is to strip CRs paired with newline characters and -otherwise treat them as whitespace. - -(C was originally introduced in perl 5.005 to optionally -restore backward compatibility with perl 5.004, which had made CR in source -files an error. Before that, CR was accepted, but retained literally in quoted -multi-line constructs such as here-documents, even at the end of a line.) - -=item * - -Similarly, the (even less documented) configuration macro C has -been removed. When enabled, it would install a default source filter to strip -carriage returns from source code before the parser proper got to see it. - -=back - -=head1 Testing - -Tests were added and changed to reflect the other additions and changes -in this release. - -=head1 Internal Changes - -=over 4 - -=item * - -New API functions are introduced to convert strings encoded in UTF-8 to -their ordinal code point equivalent. These are safe to use by default, -and generally more convenient to use than the existing ones. - -L> and L> replace -L> (which is retained for backwards -compatibility), but you should convert to use the new forms, as likely -you aren't using the old one safely. - -To convert in the opposite direction, you can now use -L>. This is not a new function, but a new synonym -for L>. It is added so you don't have to learn -two sets of names. - -There are also two new functions, L> and -L> which do the same thing except when -the input string represents a code point that Unicode doesn't accept as -legal for interchange, using either the strict original definition -(C), or the looser one given by -L -(C). When the input string represents one of the -restricted code points, these functions return the Unicode -C instead. - -Also L> is a synonym for C, for use -when you want to emphasize that the entire range of Perl extended UTF-8 -is acceptable. - -There are also replacement functions for the three more specialized -conversion functions that you are unlikely to need to use. Again, the -old forms are kept for backwards compatibility, but you should convert -to use the new forms. - -L> replaces L>. - -L> replaces L>. - -L> replaces -L>. - -Also added are the inverse functions L> -and L>, which are synonyms for the existing -functions, L> and -L> respectively. These are provided only -so you don't have to learn two sets of names. - -=item * - -Three new API functions are introduced to convert strings encoded in -UTF-8 to native bytes format (if possible). These are easier to use -than the existing ones, and they avoid unnecessary memory allocations. -The functions are L> which is used -when it is ok for the input string to be overwritten with the converted -result; and L> and -L> when the original string must be -preserved intact. C returns the result in a -temporary using L/C that will automatically be -destroyed. With C, you are responsible for -freeing the newly allocated memory that is returned if the conversion is -successful. - -The latter two functions are designed to replace -L> which creates memory unnecessarily, or -unnecessarily large. - -=item * - -New API functions L|perlapi/valid_identifier_pve>, -L|perlapi/valid_identifier_pvn> and -L|perlapi/valid_identifier_sv> have been added, which -test if a string would be considered by Perl to be a valid identifier name. - -=item * - -When assigning from an SVt_IV into a SVt_NV (or vice versa), providing that -both are "bodyless" types, Perl_sv_setsv_flags will now just change the -destination type to match the source type. Previously, an SVt_IV would have -been upgraded to a SVt_PVNV to store an NV, and an SVt_NV would have been -upgraded to a SVt_PVIV to store an IV. This change prevents the need to -allocate - and later free - the relevant body struct. - -=back - -=head1 Selected Bug Fixes - -=over 4 - -=item * - -Declaring a lexically scoped array or hash using C within a subroutine -and then immediately returning no longer triggers a "Bizarre copy of HASH/ARRAY -in subroutine exit" error. [GH #18630] - -=item * - -C didn't properly clear C which could result in -out of date cached numeric versions of the value being used on a -second evaluation. Properly clear any cached values. [GH #22784] - -=back - -=head1 Acknowledgements - -Perl 5.41.7 represents approximately 4 weeks of development since Perl -5.41.6 and contains approximately 11,000 lines of changes across 160 files -from 16 authors. - -Excluding auto-generated files, documentation and release tools, there were -approximately 6,400 lines of changes to 96 .pm, .t, .c and .h files. - -Perl continues to flourish into its fourth decade thanks to a vibrant -community of users and developers. The following people are known to have -contributed the improvements that became Perl 5.41.7: - -Dagfinn Ilmari Mannsåker, Daniel Dragan, Ed Sabol, James E Keenan, Karen -Etheridge, Karl Williamson, Lukas Mai, Mark Fowler, Max Maischein, Paul -Evans, Richard Leach, Scott Baker, Sisyphus, TAKAI Kousuke, Thibault -Duponchelle, Tony Cook. - -The list above is almost certainly incomplete as it is automatically -generated from version control history. In particular, it does not include -the names of the (very much appreciated) contributors who reported issues to -the Perl bug tracker. - -Many of the changes included in this version originated in the CPAN modules -included in Perl's core. We're grateful to the entire CPAN community for -helping Perl to flourish. - -For a more complete list of all of Perl's historical contributors, please -see the F file in the Perl source distribution. - -=head1 Reporting Bugs - -If you find what you think is a bug, you might check the perl bug database -at L. There may also be information at -L, the Perl Home Page. - -If you believe you have an unreported bug, please open an issue at -L. Be sure to trim your bug down to a -tiny but sufficient test case. - -If the bug you are reporting has security implications which make it -inappropriate to send to a public issue tracker, then see -L -for details of how to report the issue. - -=head1 Give Thanks - -If you wish to thank the Perl 5 Porters for the work we had done in Perl 5, -you can do so by running the C program: - - perlthanks - -This will send an email to the Perl 5 Porters list with your show of thanks. - -=head1 SEE ALSO - -The F file for an explanation of how to view exhaustive details on -what changed. - -The F file for how to build Perl. - -The F file for general stuff. - -The F and F files for copyright information. - -=cut diff --git a/pod/perl5418delta.pod b/pod/perl5418delta.pod deleted file mode 100644 index 5418d424b523..000000000000 --- a/pod/perl5418delta.pod +++ /dev/null @@ -1,207 +0,0 @@ -=encoding utf8 - -=head1 NAME - -perl5418delta - what is new for perl v5.41.8 - -=head1 DESCRIPTION - -This document describes differences between the 5.41.7 release and the 5.41.8 -release. - -If you are upgrading from an earlier release such as 5.41.6, first read -L, which describes differences between 5.41.6 and 5.41.7. - -=head1 Incompatible Changes - -=head2 Removed containing function references for functions without eval - -Perl 5.40 reintroduced unconditional references from functions to their -containing functions to fix a bug introduced in Perl 5.18 that broke the -special behaviour of C in package C which is used by the -debugger. - -In some cases this change led to circular reference chains between closures and -other existing references, resulting in memory leaks. - -This change has been reverted, fixing -[L] but re-breaking -[L]. - -This means the reference loops won't occur, and that lexical variables and -functions from enclosing functions may not be visible in the debugger. - -Note that calling C in a function unconditionally causes a function -to reference its enclosing functions as it always has. - -=head1 Performance Enhancements - -=over 4 - -=item * - -The peephole optimizer recognises the following zero-offset C patterns -and swaps in a new dedicated operator (C). -[L] - - substr($x, 0, ...) - substr($x, 0, ..., '') - -=back - -=head1 Modules and Pragmata - -=head2 Updated Modules and Pragmata - -=over 4 - -=item * - -L has been upgraded from version 1.81 to 1.82. - -=item * - -L has been upgraded from version 0.36 to 0.38. - -=item * - -L has been upgraded from version 2.190 to 2.191. - -=item * - -L has been upgraded from version 0.06 to 0.07. - -=item * - -L has been upgraded from version 0.032 to 0.034. - -=item * - -L has been upgraded from version 3.56 to 3.57. - -=item * - -L has been upgraded from version 3.56 to 3.57. - -=item * - -L has been upgraded from version 5.20241220 to 5.20250120. - -=item * - -L has been upgraded from version 1.67 to 1.68. - -=item * - -L has been upgraded from version 0.023 to 0.024. - -=item * - -L has been upgraded from version 1.302204 to 1.302207. - -=item * - -L has been upgraded from version 1.3401_01 to 1.35. - -=back - -=head1 Documentation - -=head2 Changes to Existing Documentation - -We have attempted to update the documentation to reflect the changes listed in -this document. If you find any we have missed, open an issue at -L. - -=head1 Testing - -Tests were added and changed to reflect the other additions and changes in this -release. - -=head1 Selected Bug Fixes - -=over 4 - -=item * - -L and L are no longer limited to 31-bit -values for their POS and SIZE arguments. -[L] - -=item * - -L is now better behaved if VAR is not a plain string. If VAR -is a tied variable, it calls C once; previously, it would also call -C, but without using the result. If VAR is a reference, the referenced -entity has its refcount properly decremented when VAR is turned into a string; -previously, it would leak memory. -[L] - -=back - -=head1 Acknowledgements - -Perl 5.41.8 represents approximately 4 weeks of development since Perl 5.41.7 -and contains approximately 8,800 lines of changes across 370 files from 17 -authors. - -Excluding auto-generated files, documentation and release tools, there were -approximately 6,800 lines of changes to 320 .pm, .t, .c and .h files. - -Perl continues to flourish into its fourth decade thanks to a vibrant community -of users and developers. The following people are known to have contributed -the improvements that became Perl 5.41.8: - -Branislav Zahradník, Chad Granum, Dan Book, David Mitchell, Graham Knop, -H.Merijn Brand, James E Keenan, Karl Williamson, Lukas Mai, Max Maischein, Paul -Evans, Philippe Bruhat (BooK), Richard Leach, Sergei Zhmylev, Steve Hay, TAKAI -Kousuke, Tony Cook. - -The list above is almost certainly incomplete as it is automatically generated -from version control history. In particular, it does not include the names of -the (very much appreciated) contributors who reported issues to the Perl bug -tracker. - -Many of the changes included in this version originated in the CPAN modules -included in Perl's core. We're grateful to the entire CPAN community for -helping Perl to flourish. - -For a more complete list of all of Perl's historical contributors, please see -the F file in the Perl source distribution. - -=head1 Reporting Bugs - -If you find what you think is a bug, you might check the perl bug database at -L. There may also be information at -L, the Perl Home Page. - -If you believe you have an unreported bug, please open an issue at -L. Be sure to trim your bug down to a -tiny but sufficient test case. - -If the bug you are reporting has security implications which make it -inappropriate to send to a public issue tracker, then see -L for details of how to -report the issue. - -=head1 Give Thanks - -If you wish to thank the Perl 5 Porters for the work we had done in Perl 5, you -can do so by running the C program: - - perlthanks - -This will send an email to the Perl 5 Porters list with your show of thanks. - -=head1 SEE ALSO - -The F file for an explanation of how to view exhaustive details on -what changed. - -The F file for how to build Perl. - -The F file for general stuff. - -The F and F files for copyright information. - -=cut diff --git a/pod/perl5419delta.pod b/pod/perl5419delta.pod deleted file mode 100644 index 66aa791e4ab2..000000000000 --- a/pod/perl5419delta.pod +++ /dev/null @@ -1,340 +0,0 @@ -=encoding utf8 - -=head1 NAME - -perl5419delta - what is new for perl v5.41.9 - -=head1 DESCRIPTION - -This document describes differences between the 5.41.8 release and the 5.41.9 -release. - -If you are upgrading from an earlier release such as 5.41.7, first read -L, which describes differences between 5.41.7 and 5.41.8. - -=head1 Core Enhancements - -=head2 Lexical method declaration using C - -Like C since Perl version 5.18, C can now be prefixed with the -C keyword. This declares a subroutine that has lexical, rather than -package visibility. See L for more detail. - -=head2 Lexical method invocation operator C<< ->& >> - -Along with the ability to declare methods lexically, this release also permits -invoking a lexical subroutine as if it were a method, bypassing the usual -name-based method resolution by name. - -Combined with lexical method declaration, these two new abilities create the -effect of having private methods. - -=head1 Incompatible Changes - -=head2 Switch and Smart Match operator reinstated - -The "switch" feature and the smartmatch operator, C<~~>, were introduced in -v5.10. Their behavior was significantly changed in v5.10.1. When the -"experiment" system was added in v5.18.0, switch and smartmatch were -retroactively declared experimental. Over the years, proposals to fix or -supplement the features have come and gone. - -They were deprecated in Perl v5.38.0 and scheduled for removal in Perl -5.42.0, and entirely removed in Perl 5.41.3. - -After some discussion these have been re-instated. - -Using them no longer produces a deprecation warning. - -Switch itself still requires the C feature, which is enabled -by default for feature bundles from v5.9.5 through to v5.34. Switch -remains disabled in feature bundles 5.35 and later, but can be -separately enabled: - - # no switch here - use v5.10; - # switch here - use v5.36; - # no switch here - use feature "switch"; - # switch here - -Smart match now requires the C feature, which is enabled -by default and included in all feature bundles up to 5.40. It is -disabled for the 5.41 feature bundle and later, but can be separately -enabled: - - # smartmatch here - use v5.41; - # no smartmatch here - use feature "smartmatch"; - # smartmatch here - -[L] - -=head1 Performance Enhancements - -=over 4 - -=item * - -The stringification of integers by L and L, -when coming from an C, is now more efficient. -[L] - -=item * - -Subroutines in packages no longer need to be stored in typeglobs: -declaring a subroutine will now put a simple sub reference directly in the -stash if possible, saving memory. The typeglob still notionally exists, -so accessing it will cause the stash entry to be upgraded to a typeglob -(i.e. this is just an internal implementation detail). -This optimization does not currently apply to XSUBs or exported -subroutines, and method calls will undo it, since they cache things in -typeglobs. -[L] - -(This optimization was originally announced in L, but due to a -bug it only worked for subroutines in package C
, not in modules.) - -=back - -=head1 Modules and Pragmata - -=head2 Updated Modules and Pragmata - -=over 4 - -=item * - -L has been upgraded from version 1.82 to 1.83. - -=item * - -L has been upgraded from version 5.78 to 5.79. - -=item * - -L has been upgraded from version 1.93 to 1.94. - -=item * - -L has been upgraded from version 2.003003 to 2.003004. - -=item * - -L has been upgraded from version 5.20250120 to 5.20250220. - -=item * - -L has been upgraded from version 1.19 to 1.20. - -=item * - -L has been upgraded from version 1.68 to 1.69. - -=item * - -L has been upgraded from version 1.39 to 1.40. - -=item * - -L has been upgraded from version 2.47 to 2.46. - -=item * - -L has been upgraded from version 1.302207 to 1.302209. - -=item * - -L has been upgraded from version 0.78 to 0.79. - -=item * - -L has been upgraded from version 1.72 to 1.73. - -=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. - -=head2 New Diagnostics - -=head3 New Errors - -=over 4 - -=item * - -L - -(F) The subroutine indicated hasn't been defined, or if it was, it has -since been undefined. - -This error could also indicate a mistyped package separator, when a -single colon was typed instead of two colons. For example, C -would be parsed as the label C followed by an unqualified function -name: C. [L] - -=back - -=head2 Changes to Existing Diagnostics - -=over 4 - -=item * - -L - -This warning no longer triggers for code like C, i.e. where double -negation (C) is used as a convert-to-boolean operator. -[L] - -=item * - -L - -This warning now triggers for use of a chained comparison like C<< 0 < $x < 1 >>. -[L] - -=back - -=head1 Internal Changes - -=over 4 - -=item * - -Two new API functions are introduced to convert strings encoded in -native bytes format to UTF-8. These return the string unchanged if its -UTF-8 representation is the same as the original. Otherwise, new memory -is allocated to contain the converted string. This is in contrast to -the existing L> which always allocates new -memory. The new functions are L> and -L>. -L> arranges for the new memory to -automatically be freed. With C, you are -responsible for freeing any newly allocated memory. - -=item * - -The way that subroutine signatures are parsed by the parser grammar has been -changed. - -Previously, when parsing individual signature parameters, the parser would -accumulate an C optree fragment for each parameter on the parser -stack, collecting them in an C sequence, before finally building the -complete argument handling optree itself, in a large action block defined -directly in F. - -In the new approach, all the optree generation is handled by newly-defined -functions in F which are called by the action blocks in the parser. -These do not keep state on the parser stack, but instead in a dedicated memory -structure referenced by the main C structure. This is intended to -be largely opaque to other code, and accessed only via the new functions. - -This new arrangement is intended to allow more flexible code generation and -additional features to be developed in future. - -=back - -=head1 Selected Bug Fixes - -=over 4 - -=item * - -The C<$SIG{__DIE__}> and C<$SIG{__WARN__}> handlers can no longer be invoked -recursively, either deliberately or by accident, as described in -L. That is, when an exception (or warning) triggers a call to a -C<$SIG{__DIE__}> (or C<$SIG{__WARN__}>) handler, further exceptions (or -warnings) are processed directly, ignoring C<%SIG> until the original -C<$SIG{__DIE__}> (or C<$SIG{__WARN__}>) handler call returns. -[L], [L], [L] - -=item * - -The C for an object and C for the -object's stash weren't always NULL or not-NULL, confusing C -(and hence Devel::Peek's C) into crashing on an object with no -defined fields in some cases. [L] - -=item * - -When comparing strings when using a UTF-8 locale, the behavior was -previously undefined if either or both contained an above-Unicode code -point, such as 0x110000. Now all such code points will collate the same -as the highest Unicode code point, U+10FFFF. [L] - -=back - -=head1 Acknowledgements - -Perl 5.41.9 represents approximately 5 weeks of development since Perl -5.41.8 and contains approximately 17,000 lines of changes across 380 files -from 23 authors. - -Excluding auto-generated files, documentation and release tools, there were -approximately 9,700 lines of changes to 300 .pm, .t, .c and .h files. - -Perl continues to flourish into its fourth decade thanks to a vibrant -community of users and developers. The following people are known to have -contributed the improvements that became Perl 5.41.9: - -Andrew Ruthven, Antanas Vaitkus, Aristotle Pagaltzis, Chris 'BinGOs' -Williams, Dan Book, Dan Jacobson, David Mitchell, Eric Herman, hbmaclean, -James E Keenan, Karl Williamson, Leon Timmermans, Lukas Mai, Paul Evans, -Peter John Acklam, Reini Urban, Richard Leach, Scott Baker, Steve Hay, TAKAI -Kousuke, Thibault Duponchelle, Tony Cook, Yves Orton. - -The list above is almost certainly incomplete as it is automatically -generated from version control history. In particular, it does not include -the names of the (very much appreciated) contributors who reported issues to -the Perl bug tracker. - -Many of the changes included in this version originated in the CPAN modules -included in Perl's core. We're grateful to the entire CPAN community for -helping Perl to flourish. - -For a more complete list of all of Perl's historical contributors, please -see the F file in the Perl source distribution. - -=head1 Reporting Bugs - -If you find what you think is a bug, you might check the perl bug database -at L. There may also be information at -L, the Perl Home Page. - -If you believe you have an unreported bug, please open an issue at -L. Be sure to trim your bug down to a -tiny but sufficient test case. - -If the bug you are reporting has security implications which make it -inappropriate to send to a public issue tracker, then see -L -for details of how to report the issue. - -=head1 Give Thanks - -If you wish to thank the Perl 5 Porters for the work we had done in Perl 5, -you can do so by running the C program: - - perlthanks - -This will send an email to the Perl 5 Porters list with your show of thanks. - -=head1 SEE ALSO - -The F file for an explanation of how to view exhaustive details on -what changed. - -The F file for how to build Perl. - -The F file for general stuff. - -The F and F files for copyright information. - -=cut diff --git a/vms/descrip_mms.template b/vms/descrip_mms.template index 1192f6a2fe33..128a2d70856d 100644 --- a/vms/descrip_mms.template +++ b/vms/descrip_mms.template @@ -298,7 +298,7 @@ utils : $(utils1) $(utils2) $(utils3) $(utils4) $(utils5) extra.pods : miniperl @ @extra_pods.com -PERLDELTA_CURRENT = [.pod]perl54114delta.pod +PERLDELTA_CURRENT = [.pod]perl5420delta.pod $(PERLDELTA_CURRENT) : [.pod]perldelta.pod Copy/NoConfirm/Log $(MMS$SOURCE) $(PERLDELTA_CURRENT) diff --git a/win32/GNUmakefile b/win32/GNUmakefile index 94a7791b06e1..971918c4b55b 100644 --- a/win32/GNUmakefile +++ b/win32/GNUmakefile @@ -63,7 +63,7 @@ INST_TOP := $(INST_DRV)\perl # versioned installation can be obtained by setting INST_TOP above to a # path that includes an arbitrary version string. # -#INST_VER := \5.41.14 +#INST_VER := \5.42.0 # # Comment this out if you DON'T want your perl installation to have @@ -1644,7 +1644,7 @@ utils: $(HAVEMINIPERL) ..\utils\Makefile copy ..\README.tw ..\pod\perltw.pod copy ..\README.vos ..\pod\perlvos.pod copy ..\README.win32 ..\pod\perlwin32.pod - copy ..\pod\perldelta.pod ..\pod\perl54114delta.pod + copy ..\pod\perldelta.pod ..\pod\perl5420delta.pod $(MINIPERL) -I..\lib $(PL2BAT) $(UTILS) $(MINIPERL) -I..\lib ..\autodoc.pl -c "win32\$(CONFIG_H)" .. $(MINIPERL) -I..\lib ..\pod\perlmodlib.PL -q .. @@ -1744,7 +1744,7 @@ distclean: realclean -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS -cd $(PODDIR) && del /f *.html *.bat roffitall \ - perl54114delta.pod perlaix.pod perlamiga.pod perlandroid.pod \ + perl5420delta.pod perlaix.pod perlamiga.pod perlandroid.pod \ perlapi.pod perlbs2000.pod perlcn.pod perlcygwin.pod \ perlfreebsd.pod perlhaiku.pod perlhpux.pod perlhurd.pod \ perlintern.pod perlirix.pod perljp.pod perlko.pod perllinux.pod \ diff --git a/win32/Makefile b/win32/Makefile index ee0470fe39a3..4c24decca86a 100644 --- a/win32/Makefile +++ b/win32/Makefile @@ -1171,7 +1171,7 @@ utils: $(PERLEXE) ..\utils\Makefile copy ..\README.tw ..\pod\perltw.pod copy ..\README.vos ..\pod\perlvos.pod copy ..\README.win32 ..\pod\perlwin32.pod - copy ..\pod\perldelta.pod ..\pod\perl54114delta.pod + copy ..\pod\perldelta.pod ..\pod\perl5420delta.pod cd ..\win32 $(PERLEXE) $(PL2BAT) $(UTILS) $(MINIPERL) -I..\lib ..\autodoc.pl -c "win32\$(CONFIG_H)" .. @@ -1272,7 +1272,7 @@ distclean: realclean -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS -cd $(PODDIR) && del /f *.html *.bat roffitall \ - perl54114delta.pod perlaix.pod perlamiga.pod perlandroid.pod \ + perl5420delta.pod perlaix.pod perlamiga.pod perlandroid.pod \ perlapi.pod perlbs2000.pod perlcn.pod perlcygwin.pod \ perlfreebsd.pod perlhaiku.pod perlhpux.pod perlhurd.pod \ perlintern.pod perlirix.pod perljp.pod perlko.pod perllinux.pod \ diff --git a/win32/pod.mak b/win32/pod.mak index bfec47fa9579..46478cd3981c 100644 --- a/win32/pod.mak +++ b/win32/pod.mak @@ -80,21 +80,7 @@ POD = perl.pod \ perl5400delta.pod \ perl5401delta.pod \ perl5402delta.pod \ - perl5410delta.pod \ - perl54110delta.pod \ - perl54111delta.pod \ - perl54112delta.pod \ - perl54113delta.pod \ - perl54114delta.pod \ - perl5411delta.pod \ - perl5412delta.pod \ - perl5413delta.pod \ - perl5414delta.pod \ - perl5415delta.pod \ - perl5416delta.pod \ - perl5417delta.pod \ - perl5418delta.pod \ - perl5419delta.pod \ + perl5420delta.pod \ perl561delta.pod \ perl56delta.pod \ perl581delta.pod \ @@ -275,21 +261,7 @@ MAN = perl.man \ perl5400delta.man \ perl5401delta.man \ perl5402delta.man \ - perl5410delta.man \ - perl54110delta.man \ - perl54111delta.man \ - perl54112delta.man \ - perl54113delta.man \ - perl54114delta.man \ - perl5411delta.man \ - perl5412delta.man \ - perl5413delta.man \ - perl5414delta.man \ - perl5415delta.man \ - perl5416delta.man \ - perl5417delta.man \ - perl5418delta.man \ - perl5419delta.man \ + perl5420delta.man \ perl561delta.man \ perl56delta.man \ perl581delta.man \ @@ -470,21 +442,7 @@ HTML = perl.html \ perl5400delta.html \ perl5401delta.html \ perl5402delta.html \ - perl5410delta.html \ - perl54110delta.html \ - perl54111delta.html \ - perl54112delta.html \ - perl54113delta.html \ - perl54114delta.html \ - perl5411delta.html \ - perl5412delta.html \ - perl5413delta.html \ - perl5414delta.html \ - perl5415delta.html \ - perl5416delta.html \ - perl5417delta.html \ - perl5418delta.html \ - perl5419delta.html \ + perl5420delta.html \ perl561delta.html \ perl56delta.html \ perl581delta.html \ @@ -665,21 +623,7 @@ TEX = perl.tex \ perl5400delta.tex \ perl5401delta.tex \ perl5402delta.tex \ - perl5410delta.tex \ - perl54110delta.tex \ - perl54111delta.tex \ - perl54112delta.tex \ - perl54113delta.tex \ - perl54114delta.tex \ - perl5411delta.tex \ - perl5412delta.tex \ - perl5413delta.tex \ - perl5414delta.tex \ - perl5415delta.tex \ - perl5416delta.tex \ - perl5417delta.tex \ - perl5418delta.tex \ - perl5419delta.tex \ + perl5420delta.tex \ perl561delta.tex \ perl56delta.tex \ perl581delta.tex \ From 82c3b207f90e3e0f9e46797961012251fd6766ac Mon Sep 17 00:00:00 2001 From: Thibault DUPONCHELLE Date: Thu, 19 Jun 2025 12:18:48 +0200 Subject: [PATCH 6/6] Fix podcheck errors related to perldelta --- pod/perldelta.pod | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 65dd1e4d0747..e6b7c42da84e 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -84,9 +84,11 @@ except that they are implemented as direct core operators, and thus perform faster, and do not produce an additional subroutine call stack frame for invoking the code block. -The feature flags enabling those keywords have been named L -and L to avoid confusion with to the ability of the -C module to refer to all of its features by using the C<:all> +The feature flags enabling those keywords have been named +L|feature/"The 'keyword_any' feature"> +and L|feature/"The 'keyword_all' feature"> +to avoid confusion with to the ability of the C module +to refer to all of its features by using the C<:all> export tag. [L] The related experimental warning flags are consequently named @@ -335,7 +337,7 @@ each containing one million "A"s: my @scalars; push @scalars, ("A" x 1_000_000) for 0..9; Now a single buffer is allocated and shared between a CONST OP and -the ten scalar elements of L<@scalars>. +the ten scalar elements of C<@scalars>. Note that any code using this sort of constant to simulate memory leaks (perhaps in test files) must now permute the string in order to trigger