This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perldelta 282fc0b3cc2439f69587d980b62bef7f5d5bdfef
[perl5.git] / pod / perldelta.pod
index 9f2abcf..4964913 100644 (file)
@@ -5,15 +5,15 @@
 [ 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.27.6
+perldelta - what is new for perl v5.27.7
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.27.5 release and the 5.27.6
+This document describes differences between the 5.27.6 release and the 5.27.7
 release.
 
-If you are upgrading from an earlier release such as 5.27.4, first read
-L<perl5275delta>, which describes differences between 5.27.4 and 5.27.5.
+If you are upgrading from an earlier release such as 5.27.5, first read
+L<perl5276delta>, which describes differences between 5.27.5 and 5.27.6.
 
 =head1 Notice
 
@@ -27,23 +27,10 @@ here, but most should go in the L</Performance Enhancements> section.
 
 [ List each enhancement as a =head2 entry ]
 
-=head2 Initialisation of aggregate state variables
+=head2  The C<sprintf> C<%j> format size modifier is now available with
+pre-C99 compilers
 
-A persistent lexical array or hash variable can now be initialized,
-by an expression such as C<state @a = qw(x y z)>.  Initialization of a
-list of persistent lexical variables is still not possible.
-
-=head2 Full-size inode numbers
-
-On platforms where inode numbers are of a type larger than perl's native
-integer numerical types, L<stat|perlfunc/stat> will preserve the full
-content of large inode numbers by returning them in the form of strings of
-decimal digits.  Exact comparison of inode numbers can thus be achieved by
-comparing with C<eq> rather than C<==>.  Comparison with C<==>, and other
-numerical operations (which are usually meaningless on inode numbers),
-work as well as they did before, which is to say they fall back to
-floating point, and ultimately operate on a fairly useless rounded inode
-number if the real inode number is too big for the floating point format.
+The actual size used depends on the platform, so remains unportable.
 
 =head1 Security
 
@@ -63,59 +50,32 @@ XXX For a release on a stable branch, this section aspires to be:
 
 [ List each incompatible change as a =head2 entry ]
 
-=head2 Yada-yada is now strictly a statement
-
-By the time of its initial stable release in Perl 5.12, the C<...>
-(yada-yada) operator was explicitly intended to serve as a statement,
-not an expression.  However, the original implementation was confused
-on this point, leading to inconsistent parsing.  The operator was
-accidentally accepted in a few situations where it did not serve as a
-complete statement, such as
-
-    ... . "foo";
-    ... if $a < $b;
+=head2 Over-radix digits in floating point literals
 
-The parsing has now been made consistent, permitting yada-yada only as
-a statement.  Affected code can use C<do{...}> to put a yada-yada into
-an arbitrary expression context.
+Octal and binary floating point literals used to permit any hexadecimal
+digit to appear after the radix point.  The digits are now restricted
+to those appropriate for the radix, as digits before the radix point
+always were.
 
-=head2 Subroutines no longer need typeglobs
-
-Perl 5.22.0 introduced an optimization allowing subroutines to be stored in
-packages as simple sub refs, not requiring a full typeglob (thus
-potentially saving large amounts of memeory).  However, the optimization
-was flawed: it only applied to the main package.
-
-This optimization has now been extended to all packages.  This may break
-compatibility with introspection code that looks inside stashes and expects
-everything in them to be a typeglob.
-
-When this optimization happens, the typeglob still notionally exists, so
-accessing it will cause the stash entry to be upgraded to a typeglob.  The
-optimization does not apply to XSUBs or exported subroutines, and calling a
-method will undo it, since method calls cache things in typeglobs.
+=head1 Deprecations
 
-[perl #129916] [perl #132252]
+XXX Any deprecated features, syntax, modules etc. should be listed here.
 
-=head2 Sort algorithm can no longer be specified
+=head2 Assignment to C<$[> will be fatal in Perl 5.30
 
-Since Perl 5.8, the L<sort> pragma has had subpragmata C<_mergesort>,
-C<_quicksort>, and C<_qsort> that can be used to specify which algorithm
-perl should use to implement the L<sort|perlfunc/sort> builtin.
-This was always considered a dubious feature that might not last,
-hence the underscore spellings, and they were documented as not being
-portable beyond Perl 5.8.  These subpragmata have now been deleted,
-and any attempt to use them is an error.  The L<sort> pragma otherwise
-remains, and the algorithm-neutral C<stable> subpragma can be used to
-control sorting behaviour.
+Assigning a non-zero value to L<C<$[>|perlvar/$[> has been deprecated
+since Perl 5.12, but was never given a deadline for removal.  This has
+now been scheduled for Perl 5.30.
 
-=head1 Deprecations
+=head2 hostname() won't accept arguments in Perl 5.32
 
-XXX Any deprecated features, syntax, modules etc. should be listed here.
+Passing arguments to C<Sys::Hostname::hostname()> was already deprecated,
+but didn't have a removal date.  This has now been scheduled for Perl
+5.32.  [perl #124349]
 
 =head2 Module removals
 
-XXX Remove this section if inapplicable.
+XXX Remove this section if not applicable.
 
 The following modules will be removed from the core distribution in a
 future release, and will at that time need to be installed from CPAN.
@@ -133,7 +93,7 @@ not usually on concerns over their design.
 
 =over
 
-=item XXX
+=item L<Locale::Codes> and its associated Country, Currency and Language modules
 
 XXX Note that deprecated modules should be listed here even if they are listed
 as an updated module in the L</Modules and Pragmata> section.
@@ -153,43 +113,7 @@ There may well be none in a stable release.
 
 =item *
 
-Many string concatenation expressions are now considerably faster, due
-to the introduction internally of a C<multiconcat> opcode which combines
-multiple concatenations, and optionally a C<=> or C<.=>, into a single
-action. For example, apart from retrieving C<$s>, C<$a> and C<$b>, this
-whole expression is now handled as a single op:
-
-    $s .= "a=$a b=$b\n"
-
-As a special case, if the LHS of an assign is a lexical variable or
-C<my $s>, the op itself handles retrieving the lexical variable, which
-is faster.
-
-In general, the more the expression includes a mix of constant strings and
-variable expressions, the longer the expression, and the more it mixes
-together non-utf8 and utf8 strings, the more marked the performance
-improvement. For example on a C<x86_64> system, this code has been
-benchmarked running four times faster:
-
-    my $s;
-    my $a = "ab\x{100}cde";
-    my $b = "fghij";
-    my $c = "\x{101}klmn";
-
-    for my $i (1..10_000_000) {
-        $s = "\x{100}wxyz";
-        $s .= "foo=$a bar=$b baz=$c";
-    }
-
-In addition, C<sprintf> expressions which have a constant format
-containing only C<%s> and C<%%> format elements, and which have a fixed
-number of arguments, are now also optimised into a C<multiconcat> op.
-
-=item *
-
-Subroutines in packages no longer need to be stored in typeglobs, saving
-large amounts of memory.  See L</Subroutines no longer need typeglobs>
-under L</Incompatible Changes>, above.
+XXX
 
 =back
 
@@ -209,25 +133,13 @@ release manager will have to investigate the situation carefully.)
 
 [ Within each section, list entries as an =item entry ]
 
-=head2 Removal of use vars
-
-=over 4
-
-The usage of "use vars" has been discouraged since the introduction of our in
-Perl 5.6.0. Where possible the usage of this pragma has now been removed from
-the Perl source code.
-
-This had a slight effect (for the better) on the output of WARNING_BITS in B::Deparse.
-
-=back
-
 =head2 New Modules and Pragmata
 
 =over 4
 
 =item *
 
-XXX
+XXX Remove this section if not applicable.
 
 =back
 
@@ -237,21 +149,32 @@ XXX
 
 =item *
 
-L<Carp> has been upgraded from version 1.43 to 1.44.
+L<Locale::Codes> has been upgraded from version 3.54 to 3.55
+
+B<NOTE>: L<Locale::Codes> is deprecated in core and will be removed
+from Perl 5.30.
 
-If a package on the call stack contains a constant named C<ISA>, Carp no
-longer throws a "Not a GLOB reference" error.
+=item *
+
+L<threads> has been upgraded from version 2.19 to 2.20.
+The documentation now better describes the problems that arise when
+returning values from threads, and no longer warns about creating threads
+in C<BEGIN> blocks.  [perl #96538]
 
 =item *
 
-L<File::Copy> has been upgraded from version 2.32 to 2.33.  It will now use
-Time::HiRes utime where available (RT #132401).
+L<Data::Dumper> has been upgraded from version 2.167_02 to 2.169.
+Quoting of glob names now obeys the Useqq option [perl #119831].
+Attempts to set an option to C<undef> through a combined getter/setter
+method are no longer mistaken for getter calls [perl #113090].
 
 =item *
 
-To address a security vulnerability in older versions of the 'zlib' library
-(which is bundled with Compress-Raw-Zlib), L<Compress::Raw::Zlib> has been
-upgraded to CPAN version 2.075.
+L<Pod::Html> has been upgraded from version 1.2203 to 1.23.
+A title for the HTML document will now be automatically generated by
+default from a "NAME" section in the POD document, as it used to be
+before the module was rewritten to use L<Pod::Simple::XHTML> to do the
+core of its job.  [perl #110520]
 
 =back
 
@@ -290,29 +213,93 @@ section.
 
 Additionally, the following selected changes have been made:
 
-=head3 L<perldiag/Variable length lookbehind not implemented in regex m/%s/>
+=head3 L<perlapi>
 
-This now gives more ideas as to workarounds to the issue that was
-introduced in Perl 5.18 (but not documented explicitly in its perldelta)
-for the fact that some Unicode C</i> rules cause a few sequences such as
+The API functions C<perl_parse()>, C<perl_run()>, and C<perl_destruct()>
+are now documented comprehensively, where previously the only
+documentation was a reference to the L<perlembed> tutorial.
 
- (?<!st)
+The documentation of C<newGIVENOP()> has been belatedly updated to
+account for the removal of lexical C<$_>.
 
-to be considered variable length, and hence disallowed.
+The API functions C<newCONSTSUB()> and C<newCONSTSUB_flags()> are
+documented much more comprehensively than before.
 
-=over 4
+=head3 L<perlop>
 
-=item *
+The general explanation of operator precedence and associativity has
+been corrected and clarified.  [perl #127391]
 
-The section on reference counting in L<perlguts> has been heavily revised,
-to describe references in the way a programmer needs to think about them
-rather than in terms of the physical data structures.
+The documentation for the C<\> referencing operator now explains the
+unusual context that it supplies to its operand.  [perl #131061]
 
-=item *
+=head3 L<perlsyn>
+
+The means to disambiguate between code blocks and hash constructors,
+already documented in L<perlref>, are now documented in L<perlsyn> too.
+[perl #130958]
+
+=head3 L<perlfunc>
+
+There is now a note that warnings generated by built-in functions are
+documented in L<perldiag> and L<warnings>.  [perl #116080]
+
+The documentation for the C<exists> operator no longer says that
+autovivification behaviour "may be fixed in a future release".
+We've determined that we're not going to change the default behaviour.
+[perl #127712]
+
+A couple of small details in the documentation for the C<bless> operator
+have been clarified.  [perl #124428]
+
+The description of C<@INC> hooks in the documentation for C<require>
+has been corrected to say that filter subroutines receive a useless
+first argument.  [perl #115754]
+
+The documentation of C<use> now explains what syntactically qualifies
+as a version number for its module version checking feature.
+
+=head3 L<perluniprops>
+
+For each binary table or property, the documentation now includes which
+characters in the range C<\x00-\xFF> it matches, as well as a list of
+the first few ranges of code points matched above that.
+
+=head3 L<perlobj>
 
-The section "Truth and Falsehood" in L<perlsyn> has been removed from
-that document, where it didn't belong, and merged into the existing
-paragraph on the same topic in L<perldata>.
+The documentation about C<DESTROY> methods has been corrected, updated,
+and revised, especially in regard to how they interact with exceptions.
+[perl #122753]
+
+=head3 L<perlsec>
+
+The documentation about set-id scripts has been updated and revised.
+[perl #74142]
+
+A section about using C<sudo> to run Perl scripts has been added.
+
+=head3 L<perlembed>
+
+The examples in L<perlembed> have been made more portable in the way
+they exit, and the example that gets an exit code from the embedded Perl
+interpreter now gets it from the right place.  The examples that pass
+a constructed argv to Perl now show the mandatory null C<argv[argc]>.
+
+=head3 L<perldebguts>
+
+The description of the conditions under which C<DB::sub()> will be called
+has been clarified.  [perl #131672]
+
+=head3 L<perlintern>
+
+The internal functions C<newXS_len_flags()> and C<newATTRSUB_x()> are
+now documented.
+
+=head3 L<perlgit>
+
+The precise rules for identifying C<smoke-me> branches are now stated.
+
+=over 4
 
 =item *
 
@@ -340,7 +327,10 @@ and New Warnings
 
 =item *
 
-XXX L<message|perldiag/"message">
+L<Can't "goto" into a "given" block|perldiag/"Can't E<quot>gotoE<quot> into a E<quot>givenE<quot> block">
+
+(F) A "goto" statement was executed to jump into the middle of a C<given>
+block.  You can't get there from here.  See L<perlfunc/goto>.
 
 =back
 
@@ -350,7 +340,12 @@ XXX L<message|perldiag/"message">
 
 =item *
 
-XXX L<message|perldiag/"message">
+L<Old package separator used in string|perldiag/"Old package separator used in string">
+
+(W syntax) You used the old package separator, "'", in a variable
+named inside a double-quoted string; e.g., C<"In $name's house">.  This
+is equivalent to C<"In $name::s house">.  If you meant the former, put
+a backslash before the apostrophe (C<"In $name\'s house">).
 
 =back
 
@@ -362,14 +357,31 @@ XXX Changes (i.e. rewording) of diagnostic messages go here
 
 =item *
 
-The diagnostic C<Initialization of state variables in list context
-currently forbidden> has changed to C<Initialization of state variables
-in list currently forbidden>, because list-context initialization of
-single aggregate state variables is now permitted.
+XXX Describe change here
 
 =item *
 
-XXX Describe change here
+The warning about useless use of a concatenation operator in void context
+is now generated for expressions with multiple concatenations, such as
+C<$a.$b.$c>, which used to mistakenly not warn.  [perl #6997]
+
+=item *
+
+Warnings that a variable or subroutine "masks earlier declaration in same
+...", or that an C<our> variable has been redeclared, have been moved to a
+new warnings category "shadow".  Previously they were in category "misc".
+
+=item *
+
+The deprecation warning from C<Sys::Hostname::hostname()> saying that
+it doesn't accept arguments now states the Perl version in which the
+warning will be upgraded to an error.  [perl #124349]
+
+=item *
+
+The L<perldiag> entry for the error regarding a set-id script has been
+expanded to make clear that the error is reporting a specific security
+vulnerability, and to advise how to fix it.
 
 =back
 
@@ -403,43 +415,16 @@ L</Platform Support> section, instead.
 
 =over 4
 
-=item C89 requirement
-
-Perl has been documented as requiring a C89 compiler to build since October
-1998.  A variety of simplifications have now been made to Perl's internals to
-rely on the features specified by the C89 standard. We believe that this
-internal change hasn't altered the set of platforms that Perl builds on, but
-please report a bug if Perl now has new problems building on your platform.
-
-=item New probes
-
-=over 2
-
-=item HAS_BUILTIN_ADD_OVERFLOW
-
-=item HAS_BUILTIN_MUL_OVERFLOW
-
-=item HAS_BUILTIN_SUB_OVERFLOW
-
-=item HAS_THREAD_SAFE_NL_LANGINFO_L
-
-=item HAS_LOCALECONV_L
-
-=item HAS_MBRLEN
-
-=item HAS_MBRTOWC
-
-=item HAS_MEMRCHR
-
-=item HAS_NANOSLEEP
+=item *
 
-=item HAS_STRNLEN
+XXX
 
-=item HAS_STRTOLD_L
+=item *
 
-=item I_WCHAR
-
-=back
+Where an HTML version of the doucmentation is installed, the HTML
+documents now use relative links to refer to each other.  Links from
+the index page of L<perlipc> to the individual section documents are
+now correct.  [perl #110056]
 
 =back
 
@@ -517,8 +502,8 @@ L</Modules and Pragmata> section.
 
 =item Windows
 
-Visual C++ compiler version detection has been improved to work on non-English
-language systems.
+We now set C<$Config{libpth}> correctly for 64-bit builds using Visual C++
+versions earlier than 14.1.
 
 =back
 
@@ -528,41 +513,25 @@ XXX Changes which affect the interface available to C<XS> code go here.  Other
 significant internal changes for future core maintainers should be noted as
 well.
 
-[ List each change as an =item entry ]
-
 =over 4
 
 =item *
 
-A new optimisation phase has been added to the compiler,
-C<optimize_optree()>, which does a top-down scan of a complete optree
-just before the peephole optimiser is run. This phase is not currently
-hookable.
+XS modules can now automatically get reentrant versions of system
+functions on threaded perls.
 
-=item *
+By saying
 
-An C<OP_MULTICONCAT> op has been added. At C<optimize_optree()> time, a
-chain of C<OP_CONCAT> and C<OP_CONST> ops, together optionally with an
-C<OP_STRINGIFY> and/or C<OP_SASSIGN>, are combined into a single
-C<OP_MULTICONCAT> op. The op is of type C<UNOP_AUX>, and the aux array
-contains the argument count, plus a pointer to a constant string and a set
-of segment lengths. For example with
+ #define PERL_REENTRANT
 
-    my $x = "foo=$foo, bar=$bar\n";
-
-the constant string would be C<"foo=, bar=\n"> and the segment lengths
-would be (4,6,1). If the string contains characters such as C<\x80>, whose
-representation changes under utf8, two sets of strings plus lengths are
-precomputed and stored.
-
-=item *
-
-Direct access to L<C<PL_keyword_plugin>|perlapi/PL_keyword_plugin> is not
-safe in the presence of multithreading. A new
-L<C<wrap_keyword_plugin>|perlapi/wrap_keyword_plugin> function has been
-added to allow XS modules to safely define custom keywords even when
-loaded from a thread, analoguous to L<C<PL_check>|perlapi/PL_check> /
-L<C<wrap_op_checker>|perlapi/wrap_op_checker>.
+near the beginning of an C<XS> file, it will be compiled so that
+whatever reentrant functions perl knows about on that system will
+automatically and invisibly be used instead of the plain, non-reentrant
+versions.  For example, if you write C<getpwnam()> in your code, on a
+system that has C<pwnam_r()> all calls to the former will be translated
+invisibly into the latter.  This does not happen except on threaded
+perls, as they aren't needed otherwise.  Be aware that which functions
+have reentrant versions varies from system to system.
 
 =back
 
@@ -577,49 +546,92 @@ files in F<ext/> and F<lib/> are best summarized in L</Modules and Pragmata>.
 
 =item *
 
-C<stat()>, C<lstat()>, and file test operators now fail if given a
-filename containing a nul character, in the same way that C<open()>
-already fails.
+XXX
+
+=item *
+
+Digits past the radix point in octal and binary floating point literals
+now have the correct weight on platforms where a floating point
+significand doesn't fit into an integer type.
+
+=item *
+
+C<exit(0)> in a C<UNITCHECK> or C<CHECK> block no longer permits the
+main program to run, and C<exit(0)> in a C<BEGIN> block no longer permits
+C<INIT> blocks to run before exiting.  [perl #2754]
+
+=item *
+
+The canonical truth value no longer has a spurious special meaning as
+a callable.  It used to be a magic placeholder for a missing C<import>
+or C<unimport> method.  It is now treated like any other string C<1>.
+[perl #126042]
+
+=item *
+
+The C<readpipe()> built-in function now checks at compile time that
+it has only one parameter expression, and puts it in scalar context,
+thus ensuring that it doesn't corrupt the stack at runtime.  [perl #4574]
+
+=item *
+
+C<sort> now performs correct reference counting when aliasing C<$a> and
+C<$b>, thus avoiding premature destruction and leakage of scalars if they
+are re-aliased during execution of the sort comparator.  [perl #92264]
+
+=item *
+
+C<reverse> with no operand, reversing C<$_> by default, is no longer in
+danger of corrupting the stack.  [perl #132544]
+
+=item *
+
+C<exec>, C<system>, et al are no longer liable to have their argument
+lists corrupted by reentrant calls and by magic such as tied scalars.
+[perl #129888]
+
+=item *
+
+Perl's own C<malloc> no longer gets confused by attempts to allocate
+more than a gigabyte on a 64-bit platform.  [perl #119829]
 
 =item *
 
-C<stat()>, C<lstat()>, and file test operators now reliably set C<$!> when
-failing due to being applied to a closed or otherwise invalid file handle.
+Stacked file test operators in a sort comparator expression no longer
+cause a crash.  [perl #129347]
 
 =item *
 
-File test operators for Unix permission bits that don't exist on a
-particular platform, such as C<-k> (sticky bit) on Windows, now check that
-the file being tested exists before returning the blanket false result,
-and yield the appropriate errors if the argument doesn't refer to a file.
+An identity C<tr///> transformation on a reference is no longer mistaken
+for that reference for the purposes of deciding whether it can be
+assigned to.  [perl #130578]
 
 =item *
 
-The in-place reverse optimisation now correctly strengthens weak
-references using the L<C<sv_rvunweaken()>|perlapi/sv_rvunweaken>
-API function.
+Lengthy hexadecimal, octal, or binary floating point literals no
+longer cause undefined behaviour when parsing digits that are of such
+low significance that they can't affect the floating point value.
+[perl #131894]
 
 =item *
 
-Fixed a read before buffer when parsing a range starting with C<\N{}>
-at the beginning of the character set for the transliteration
-operator.  [perl #132245]
+C<open $$scalarref...> and similar invocations no longer leak the file
+handle.  [perl #115814]
 
 =item *
 
-Fixed a leaked SV when parsing an empty C<\N{}> at compile-time.
-[perl #132245]
+Some convoluted kinds of regexp no longer cause an arithmetic overflow
+when compiled.  [perl #131893]
 
 =item *
 
-Calling C<do $path> on a directory or block device now yields a meaningful
-error code in C<$!>.  [perl #125774]
+The default typemap, by avoiding C<newGVgen>, now no longer leaks when
+XSUBs return file handles (C<PerlIO *> or C<FILE *>).  [perl #115814]
 
 =item *
 
-Lexical sub declarations in C<do> blocks such as C<do { my sub lex; 123 }>
-could corrupt the stack, erasing items already on the stack in the
-enclosing statement.  This has been fixed.  [perl #132442]
+Creating a C<BEGIN> block as an XS subroutine with a prototype no longer
+crashes because of the early freeing of the subroutine.
 
 =back
 
@@ -652,14 +664,14 @@ the perldelta of a previous release.
 
 =head1 Obituary
 
-XXX If any significant core contributor has died, we've added a short obituary
-here.
+XXX If any significant core contributor or member of the CPAN community has
+died, add a short obituary here.
 
 =head1 Acknowledgements
 
 XXX Generate this with:
 
-  perl Porting/acknowledgements.pl v5.27.5..HEAD
+  perl Porting/acknowledgements.pl v5.27.6..HEAD
 
 =head1 Reporting Bugs