[ 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.35.4
+perldelta - what is new for perl v5.35.9
=head1 DESCRIPTION
-This document describes differences between the 5.35.3 release and the 5.35.4
+This document describes differences between the 5.35.8 release and the 5.35.9
release.
-If you are upgrading from an earlier release such as 5.35.2, first read
-L<perl5353delta>, which describes differences between 5.35.2 and 5.35.3.
+If you are upgrading from an earlier release such as 5.35.7, first read
+L<perl5358delta>, which describes differences between 5.35.7 and 5.35.8.
=head1 Notice
[ List each enhancement as a =head2 entry ]
-=head2 C<defer> blocks
+=head2 @_ is now experimental within signatured subs
-This release adds support for C<defer> blocks, which are blocks of code
-prefixed by the C<defer> modifier. They provide a section of code which runs
-at a later time, during scope exit.
+Even though subroutine signatures currently remain experimental, use of the
+default arguments array (C<@_>) with a subroutine that has a signature is
+specifically also experimental, with its own warning category. Silencing the
+C<experimental::signatures> warning category is not sufficient to dismiss
+this. The new warning is emitted with the category name
+C<experimental::args_array_with_signatures>.
-For more information, see L<perlsyn/"defer blocks">.
+Any subroutine that has a signature and tries to make use of the defaults
+argument array or an element thereof (C<@_> or C<$_[INDEX]>), either
+explicitly or implicitly (such as C<shift> or C<pop> with no argument) will
+provoke a warning at compile-time:
-=head2 Unicode 14.0 is supported
+ use experimental 'signatures';
-See L<https://www.unicode.org/versions/Unicode14.0.0/> for details.
+ sub f ($x, $y = 123) {
+ say "The first argument is $_[0]";
+ }
-=head2 SIGFPE no longer deferred
+Z<>
-Floating-point exceptions are now delivered immediately, in the same way
-as other "fault"-like signals such as SIGSEGV. This means one has at
-least a chance to catch such a signal with a C<$SIG{FPE}> handler, e.g.
-so that C<die> can report the line in perl that triggered it.
+ Use of @_ in array element with signatured subroutine is experimental
+ at file.pl line 4.
-=head2 Stable boolean tracking
+The behaviour of code which attempts to do this is no longer specified, and
+may be subject to change in a future version.
-The "true" and "false" boolean values, often accessed by constructions like
-C<!!0> and C<!!1>, as well as being returned from many core functions and
-operators, now remember their boolean nature even through assignment into
-variables. The new function C<isbool()> in L<Scalar::Util> can check whether
-a value has boolean nature.
+=head2 The C<isa> operator is no longer experimental
-This is likely to be useful when interoperating with other languages or
-data-type serialisation, among other places.
+Introduced in Perl version 5.32.0, this operator has remained unchanged
+since then. The operator is now considered a stable languauge feature.
+
+For more detail see L<perlop/Class Instance Operator>.
=head1 Security
XXX Any deprecated features, syntax, modules etc. should be listed here.
+=head2 Downgrading a C<use VERSION> statement to below v5.11
+
+Attempting to issue a second C<use VERSION> statement that requests a version
+lower than C<v5.11> when an earlier statement that requested a version at
+least C<v5.11> has already been seen, will now print a deprecation warning.
+
+For example:
+
+ use v5.14;
+ say "The say statement is permitted";
+ use v5.8; # This will print a warning
+ print "We must use print\n";
+
+This is because of an intended related change to the interaction between
+C<use VERSION> and C<use strict>. If you specify a version >= 5.11, strict is
+enabled implicitly. If you request a version < 5.11, strict will become
+disabled I<even if you had previously written> C<use strict>. This was not
+the previous behaviour of C<use VERSION>, which at present will track
+explicitly-enabled strictness flags independently.
+
+Code which wishes to mix versions in this manner should use lexical scoping
+with block syntax to ensure that the differently versioned regions remain
+lexically isolated.
+
+ {
+ use v5.14;
+ say "The say statement is permitted";
+ }
+ {
+ use v5.8; # No warning is emitted
+ print "We must use print\n";
+ }
+
=head2 Module removals
XXX Remove this section if not applicable.
=item *
-We now probe for compiler support for C11 thread local storage, and where
-available use this for "implicit context" for XS extensions making API calls for
-a threaded Perl build. This requires fewer function calls at the C level than
-POSIX thread specific storage. We continue to use the the pthreads approach if
-the C11 approach is not available.
-
-F<Configure> run with the defaults will build an unthreaded Perl (which is
-slightly faster), but most operating systems ship a threaded Perl.
+XXX
=back
If there was something important to note about this change, include that here.
-=item *
-
-L<Text::Tabs> has been upgraded from version 2021.0717 to 2021.0814.
-
-=item *
-
-L<Text::Wrap> has been upgraded from version 2021.0717 to 2021.0814.
-
=back
=head2 Removed Modules and Pragmata
=item *
-XXX Describe change here
+L<Subroutine %s redefined|perldiag/"Subroutine %s redefined">
+
+Localized subroutine redefinitions no longer trigger this warning.
=back
=over 4
-=item C<keys %ENV> on VMS returns consistent results
-
-On VMS entries in the C<%ENV> hash are loaded from the OS environment on
-first access, hence the first iteration of C<%ENV> requires the entire
-environment to be scanned to find all possible keys. This initialisation had
-always been done correctly for full iteration, but previously was not
-happening for C<%ENV> in scalar context, meaning that C<scalar %ENV> would
-return 0 if called before any other C<%ENV> access, or would only return the
-count of keys accessed if there had been no iteration.
+=item XXX-some-platform
-These bugs are now fixed - C<%ENV> and C<keys %ENV> in scalar context now
-return the correct result - the count of all keys in the environment.
+XXX
=back
=item *
-C<Perl_ptr_table_clear> has been deleted. This has been marked as deprecated
-since v5.14.0 (released in 2011), and is not used by any code on CPAN.
+New equality-test functions C<sv_numeq> and C<sv_streq> have been added, along
+with C<..._flags>-suffixed variants. These expose a simple and consistent API
+to perform numerical or string comparison which is aware of operator
+overloading.
=back
XXX Generate this with:
- perl Porting/acknowledgements.pl v5.35.3..HEAD
+ perl Porting/acknowledgements.pl v5.35.8..HEAD
=head1 Reporting Bugs