NAME

perldelta - what is new for perl v5.43.3

DESCRIPTION

This document describes differences between the 5.43.2 release and the 5.43.3 release.

If you are upgrading from an earlier release such as 5.43.1, first read perl5432delta, which describes differences between 5.43.1 and 5.43.2.

Core Enhancements

Unicode 17.0 is supported

See https://www.unicode.org/versions/Unicode17.0.0/.

Modules and Pragmata

Updated Modules and Pragmata

  • B has been upgraded from version 1.89 to 1.90.

  • B::Concise has been upgraded from version 1.007 to 1.009. It now correctly omits all its internal BEGIN blocks when asked to report BEGIN blocks in a caller's code. Previously it only omitted some of them.

  • B::Deparse has been upgraded from version 1.86 to 1.87.

  • ExtUtils::ParseXS has been upgraded from version 3.59 to 3.60. This release changes the ordering of the processing of typemap files which have been specified via xsubpp -typemap arguments so that (as was the case prior to Perl 5.10.0) these files are applied last rather than first, and thus take priority over any system typemap files.

  • ExtUtils::Typemaps has been upgraded from version 3.59 to 3.60.

  • File::Copy has been upgraded from version 2.42 to 2.43.

  • File::Temp has been upgraded from version 0.2311 to 0.2312.

  • Filter::Util::Call has been upgraded from version 1.64 to 1.65.

  • Module::CoreList has been upgraded from version 5.20250820 to 5.20250923.

  • Net::Ping has been upgraded from version 2.76 to 2.77.

  • Opcode has been upgraded from version 1.69 to 1.70.

  • overloading has been upgraded from version 0.02 to 0.03.

  • PerlIO::via has been upgraded from version 0.20 to 0.21.

  • Storable has been upgraded from version 3.38 to 3.39.

  • Term::Table has been upgraded from version 0.024 to 0.025.

  • Time::HiRes has been upgraded from version 1.9778 to 1.9779.

    The subsecond-resolution sleep function provided by Time::HiRes now has the same prototype as perl's built-in sleep function. This means it now requires a scalar argument, not a list, just like CORE::sleep:

    use Time::HiRes qw(sleep);
    
    sleep(1, "foo", "bar");  # Syntax error.
    # It used to silently ignore the extra arguments.
    
    my @t = 42;
    sleep @t;
    # Evaluates @t in scalar context (giving the number of elements)
    # and sleeps for one second. It used to sleep for 42 seconds.
  • Time::Piece has been upgraded from version 1.36 to 1.3701.

  • utf8 has been upgraded from version 1.27 to 1.29.

  • XS::APItest has been upgraded from version 1.44 to 1.46.

Documentation

New Documentation

  • perlapi now contains information about how to find what release of Perl first contained an API element

Diagnostics

Changes to Existing Diagnostics

  • Certain diagnostics about byte sequences that are supposed to comprise a UTF-8 encoded character, but that are invalid in some way, now don't include bytes irrelevant to that determination. An example is

    old message

    Malformed UTF-8 character: \xc1\x27 (any UTF-8 sequence that starts with \xc1 is overlong which can and should be represented with a different, shorter sequence)

    new message

    Malformed UTF-8 character: \xc1 (any UTF-8 sequence that starts with \xc1 is overlong which can and should be represented with a different, shorter sequence)

    In this case the \xc1 is all that is needed to make the sequence invalid. Whatever comes after it is irrelevant (in this case, \x27), and including it in the message might lead the reader to think that it somehow does matter.

Configuration and Compilation

  • C23 <stdckdint.h> and associated macros are now used if available.

Internal Changes

  • A new function valid_utf8_to_uv has been added. This is synonymous with valid_utf8_to_uvchr; its reason for existence is to have consistent spelling with the names of the other functions that translate from UTF-8, so you don't have to remember a different spelling.

  • "newSVsv_flags_NN" in perlapi is a new function for creating a new SV and assigning the value(s) of an existing SV to it.

    Historically, Perl_newSVsv_flags and Perl_sv_mortalcopy_flags would pass a new SV head and the original SV to Perl_sv_setsv_flags. However, the latter contains many branches of no relevance to a fresh SV, so they now make use of the new function to streamline the process.

    Perl_newSVsv_flags is now essentially a NULL pointer check and wrapper around the new function, so has been moved into sv_inline.h.

  • "STATIC_ASSERT_DECL" in perlapi and STATIC_ASSERT_STMT are like assert(), but are evaluated at compile time. That means their argument must be a constant expression that can be verified by the compiler, and so they effectively have no cost, not appearing in the code that gets executed. These were added in v5.28, but not until now have we opened their use up to XS writers. At the same time, a new variant has been added, STATIC_ASSERT_EXPR which is suitable for use in an expression, such as a comma expression in a C macro.

Selected Bug Fixes

  • INTERFACE keyword in XS

    Fixed a couple of issues with the INTERFACE keyword in XS.

    [GH #23640]

  • &CORE::__CLASS__ no longer returns invalid results

    CORE::__CLASS__ would work as expected when used as a bareword or aliased:

    use feature qw(class);
    class Foo {
        BEGIN { *cls = \&CORE::__CLASS__; }
        method bar() {
            my $class1 = CORE::__CLASS__;  # ok
            my $class2 = cls;              # ok
        }
    }

    But when called with an ampersand (&CORE::__CLASS__()) or through a reference (my $ref = \&CORE::__CLASS__; $ref->()), it would return unrelated strings. These runtime calls have been fixed to throw an error of the form &CORE::__CLASS__ cannot be called directly instead of silently returning incorrect results.

    [GH #23737]

  • parse_subsignature() can now handle empty subroutine signatures

    Previously, calling the parse_subsignature() API function with an empty signature would cause a "Syntax error" failure, requiring code which calls it to detect the special case and take appropriate steps. This is now fixed, returning the same optree that the parser would yield for a regular empty signature during normal parse time.

    [GH #17689]

Acknowledgements

Perl 5.43.3 represents approximately 5 weeks of development since Perl 5.43.2 and contains approximately 150,000 lines of changes across 330 files from 26 authors.

Excluding auto-generated files, documentation and release tools, there were approximately 26,000 lines of changes to 180 .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.43.3:

Branislav Zahradník, brian d foy, Chad Granum, Craig A. Berry, Daniel Dragan, David Mitchell, Igor Todorovski, James E Keenan, James Raspass, Jörg Thomas, Karen Etheridge, Karl Williamson, Leon Timmermans, Lukas Mai, Paul Evans, Philippe Bruhat (BooK), Ricardo Signes, Richard Leach, Samuel Smith, Samuel Young, TAKAI Kousuke, Thibault Duponchelle, Tomasz Konojacki, Tom Wyant, Tony Cook, Unicode Consortium.

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 AUTHORS file in the Perl source distribution.

Reporting Bugs

If you find what you think is a bug, you might check the perl bug database at https://github.com/Perl/perl5/issues. There may also be information at https://www.perl.org/, the Perl Home Page.

If you believe you have an unreported bug, please open an issue at https://github.com/Perl/perl5/issues. 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 "SECURITY VULNERABILITY CONTACT INFORMATION" in perlsec for details of how to report the issue.

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 perlthanks program:

perlthanks

This will send an email to the Perl 5 Porters list with your show of thanks.

SEE ALSO

The Changes file for an explanation of how to view exhaustive details on what changed.

The INSTALL file for how to build Perl.

The README file for general stuff.

The Artistic and Copying files for copyright information.