=encoding utf8 =head1 NAME perldelta - what is new for perl v5.43.3 =head1 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 L, which describes differences between 5.43.1 and 5.43.2. =head1 Core Enhancements =head2 Unicode 17.0 is supported See L. =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 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. =item * L has been upgraded from version 1.86 to 1.87. =item * L 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 C 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. =item * L has been upgraded from version 3.59 to 3.60. =item * L has been upgraded from version 2.42 to 2.43. =item * L has been upgraded from version 0.2311 to 0.2312. =item * L has been upgraded from version 1.64 to 1.65. =item * L has been upgraded from version 5.20250820 to 5.20250923. =item * L has been upgraded from version 2.76 to 2.77. =item * L has been upgraded from version 1.69 to 1.70. =item * L has been upgraded from version 0.02 to 0.03. =item * L has been upgraded from version 0.20 to 0.21. =item * L has been upgraded from version 3.38 to 3.39. =item * L has been upgraded from version 0.024 to 0.025. =item * L has been upgraded from version 1.9778 to 1.9779. The subsecond-resolution C function provided by L now has the same prototype as perl's built-in L. This means it now requires a scalar argument, not a list, just like C: 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. =item * L has been upgraded from version 1.36 to 1.3701. =item * L has been upgraded from version 1.27 to 1.29. =item * L has been upgraded from version 1.44 to 1.46. =back =head1 Documentation =head2 New Documentation =over 4 =item * L now contains information about how to find what release of Perl first contained an API element =back =head1 Diagnostics =head2 Changes to Existing Diagnostics =over 4 =item * 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 =over =item old message Malformed UTF-8 character: C<\xc1\x27> (any UTF-8 sequence that starts with C<\xc1> is overlong which can and should be represented with a different, shorter sequence) =item new message Malformed UTF-8 character: C<\xc1> (any UTF-8 sequence that starts with C<\xc1> is overlong which can and should be represented with a different, shorter sequence) =back In this case the C<\xc1> is all that is needed to make the sequence invalid. Whatever comes after it is irrelevant (in this case, C<\x27>), and including it in the message might lead the reader to think that it somehow does matter. =back =head1 Configuration and Compilation =over 4 =item * C23 F<< >> and associated macros are now used if available. =back =head1 Internal Changes =over 4 =item * A new function C has been added. This is synonymous with C; 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. =item * L> is a new function for creating a new SV and assigning the value(s) of an existing SV to it. Historically, C and C would pass a new SV head and the original SV to C. 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. C is now essentially a NULL pointer check and wrapper around the new function, so has been moved into F. =item * L> and C are like C, 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, C which is suitable for use in an expression, such as a comma expression in a C macro. =back =head1 Selected Bug Fixes =over 4 =item * INTERFACE keyword in XS Fixed a couple of issues with the INTERFACE keyword in XS. [L] =item * C<&CORE::__CLASS__> no longer returns invalid results C 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 (C<&CORE::__CLASS__()>) or through a reference (C<< my $ref = \&CORE::__CLASS__; $ref->() >>), it would return unrelated strings. These runtime calls have been fixed to throw an error of the form C<&CORE::__CLASS__ cannot be called directly> instead of silently returning incorrect results. [L] =item * C can now handle empty subroutine signatures Previously, calling the C 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. [L] =back =head1 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 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