=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<perl5432delta>, which describes differences between 5.43.1 and 5.43.2.


=head1 Core Enhancements

=head2 Unicode 17.0 is supported

See L<https://www.unicode.org/versions/Unicode17.0.0/>.


=head1 Modules and Pragmata

=head2 Updated Modules and Pragmata

=over 4

=item *

L<B> has been upgraded from version 1.89 to 1.90.

=item *

L<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.

=item *

L<B::Deparse> has been upgraded from version 1.86 to 1.87.

=item *

L<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 C<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.

=item *

L<ExtUtils::Typemaps> has been upgraded from version 3.59 to 3.60.

=item *

L<File::Copy> has been upgraded from version 2.42 to 2.43.

=item *

L<File::Temp> has been upgraded from version 0.2311 to 0.2312.

=item *

L<Filter::Util::Call> has been upgraded from version 1.64 to 1.65.

=item *

L<Module::CoreList> has been upgraded from version 5.20250820 to 5.20250923.

=item *

L<Net::Ping> has been upgraded from version 2.76 to 2.77.

=item *

L<Opcode> has been upgraded from version 1.69 to 1.70.

=item *

L<overloading> has been upgraded from version 0.02 to 0.03.

=item *

L<PerlIO::via> has been upgraded from version 0.20 to 0.21.

=item *

L<Storable> has been upgraded from version 3.38 to 3.39.

=item *

L<Term::Table> has been upgraded from version 0.024 to 0.025.

=item *

L<Time::HiRes> has been upgraded from version 1.9778 to 1.9779.

The subsecond-resolution C<sleep> function provided by L<Time::HiRes> now has
the same prototype as perl's built-in L<sleep function|perlfunc/sleep>. This
means it now requires a scalar argument, not a list, just like C<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.

=item *

L<Time::Piece> has been upgraded from version 1.36 to 1.3701.

=item *

L<utf8> has been upgraded from version 1.27 to 1.29.

=item *

L<XS::APItest> has been upgraded from version 1.44 to 1.46.

=back

=head1 Documentation

=head2 New Documentation

=over 4

=item *

L<perlapi> 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<< <stdckdint.h> >> and associated macros are now used if available.

=back

=head1 Internal Changes

=over 4

=item *

A new function C<valid_utf8_to_uv> has been added.  This is synonymous
with C<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.

=item *

L<perlapi/C<newSVsv_flags_NN>> is a new function for creating a new SV
and assigning the value(s) of an existing SV to it.

Historically, C<Perl_newSVsv_flags> and C<Perl_sv_mortalcopy_flags> would
pass a new SV head and the original SV to C<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.

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

=item *

L<perlapi/C<STATIC_ASSERT_DECL>> and C<STATIC_ASSERT_STMT> are like
C<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, C<STATIC_ASSERT_EXPR> 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<GH #23640|https://github.com/Perl/perl5/issues/23640>]

=item * C<&CORE::__CLASS__> no longer returns invalid results

C<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 (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<GH #23737|https://github.com/Perl/perl5/issues/23737>]

=item * C<parse_subsignature()> can now handle empty subroutine signatures

Previously, calling the C<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.

[L<GH #17689|https://github.com/Perl/perl5/issues/17689>]

=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<AUTHORS> 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<https://github.com/Perl/perl5/issues>. There may also be information at
L<https://www.perl.org/>, the Perl Home Page.

If you believe you have an unreported bug, please open an issue at
L<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
L<perlsec/SECURITY VULNERABILITY CONTACT INFORMATION>
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<perlthanks> program:

    perlthanks

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

=head1 SEE ALSO

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

The F<INSTALL> file for how to build Perl.

The F<README> file for general stuff.

The F<Artistic> and F<Copying> files for copyright information.

=cut
