This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perldelta: Avoid ‘deprecated’ for non-deprecated module
[perl5.git] / pod / perldelta.pod
index 7a09daf..31c8174 100644 (file)
@@ -27,6 +27,11 @@ here, but most should go in the L</Performance Enhancements> section.
 
 [ List each enhancement as a =head2 entry ]
 
+=head2  The C<sprintf> C<%j> format size modifier is now available with
+pre-C99 compilers
+
+The actual size used depends on the platform, so remains unportable.
+
 =head1 Security
 
 XXX Any security-related notices go here.  In particular, any security
@@ -85,10 +90,35 @@ It is known that these changes will break some users of L<autodie>,
 the documentation of which has long recommended some uses of these
 experimental features that are not portable across these changes.
 
+=head2 Over-radix digits in floating point literals
+
+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 Return type of C<unpackstring()>
+
+The return types of the C API functions C<unpackstring()> and
+C<unpack_str()> have changed from C<I32> to C<SSize_t>, in order to
+accommodate datasets of more than two billion items.
+
 =head1 Deprecations
 
 XXX Any deprecated features, syntax, modules etc. should be listed here.
 
+=head2 Assignment to C<$[> will be fatal in Perl 5.30
+
+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.
+
+=head2 hostname() won't accept arguments in Perl 5.32
+
+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 not applicable.
@@ -109,7 +139,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.
@@ -165,9 +195,57 @@ XXX Remove this section if not applicable.
 
 =item *
 
-L<XXX> has been upgraded from version A.xx to B.yy.
+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 *
+
+L<DynaLoader> has been upgraded from version 1.44 to 1.45.
+Its documentation now shows the use of C<__PACKAGE__> and direct object
+syntax [perl #132247].
+
+=item *
+
+L<GDBM_File> has been upgraded from version 1.16 to 1.17.
+Its documentation now explains that C<each> and C<delete> don't mix in
+hashes tied to this module [perl #117449].
+It will now retry opening with an acceptable block size if asking gdbm
+to default the block size failed [perl #119623].
+
+=item *
 
-If there was something important to note about this change, include that here.
+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<Locale::Codes> has been upgraded from version 3.54 to 3.55
+
+B<NOTE>: L<Locale::Codes> scheduled to be removed from core in Perl 5.30.
+
+=item *
+
+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]
+
+=item *
+
+L<warnings> has been upgraded from version 1.38 to 1.39.
+It now includes new functions with names ending in C<_at_level>, allowing
+callers to specify the exact call frame.  [perl #132468]
+
+=item *
+
+L<XSLoader> has been upgraded from version 0.28 to 0.29.
+Its documentation now shows the use of C<__PACKAGE__>, and direct object
+syntax for example C<DynaLoader> usage [perl #132247].
 
 =back
 
@@ -206,7 +284,99 @@ section.
 
 Additionally, the following selected changes have been made:
 
-=head3 L<XXX>
+=head3 L<perlapi>
+
+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.
+
+The documentation of C<newGIVENOP()> has been belatedly updated to
+account for the removal of lexical C<$_>.
+
+The API functions C<newCONSTSUB()> and C<newCONSTSUB_flags()> are
+documented much more comprehensively than before.
+
+=head3 L<perlop>
+
+The general explanation of operator precedence and associativity has
+been corrected and clarified.  [perl #127391]
+
+The documentation for the C<\> referencing operator now explains the
+unusual context that it supplies to its operand.  [perl #131061]
+
+=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<ref> has been rewritten for clarity.
+
+The documentation of C<use> now explains what syntactically qualifies
+as a version number for its module version checking feature.
+
+The documentation of C<warn> has been updated to reflect that since Perl
+5.14 it has treated complex exception objects in a manner equivalent
+to C<die>.  [perl #121372]
+
+The documentation of C<die> and C<warn> has been revised for clarity.
+
+=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 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
 
@@ -236,7 +406,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
 
@@ -246,7 +419,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
 
@@ -260,6 +438,30 @@ XXX Changes (i.e. rewording) of diagnostic messages go here
 
 XXX Describe change here
 
+=item *
+
+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
 
 =head1 Utility Changes
@@ -296,6 +498,13 @@ L</Platform Support> section, instead.
 
 XXX
 
+=item *
+
+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
 
 =head1 Testing
@@ -370,9 +579,10 @@ L</Modules and Pragmata> section.
 
 =over 4
 
-=item XXX-some-platform
+=item Windows
 
-XXX
+We now set C<$Config{libpth}> correctly for 64-bit builds using Visual C++
+versions earlier than 14.1.
 
 =back
 
@@ -382,13 +592,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 *
 
-XXX
+XS modules can now automatically get reentrant versions of system
+functions on threaded perls.
+
+By saying
+
+ #define PERL_REENTRANT
+
+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
 
@@ -405,6 +627,103 @@ files in F<ext/> and F<lib/> are best summarized in L</Modules and Pragmata>.
 
 XXX
 
+=item *
+
+C<pack> and C<unpack> can now handle repeat counts and lengths that
+exceed two billion.  [perl #119367]
+
+=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 *
+
+C<system> now reduces its arguments to strings in the parent process, so
+any effects of stringifying them (such as overload methods being called
+or warnings being emitted) are visible in the way the program expects.
+[perl #121105]
+
+=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 *
+
+Stacked file test operators in a sort comparator expression no longer
+cause a crash.  [perl #129347]
+
+=item *
+
+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 *
+
+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 *
+
+C<open $$scalarref...> and similar invocations no longer leak the file
+handle.  [perl #115814]
+
+=item *
+
+Some convoluted kinds of regexp no longer cause an arithmetic overflow
+when compiled.  [perl #131893]
+
+=item *
+
+The default typemap, by avoiding C<newGVgen>, now no longer leaks when
+XSUBs return file handles (C<PerlIO *> or C<FILE *>).  [perl #115814]
+
+=item *
+
+Creating a C<BEGIN> block as an XS subroutine with a prototype no longer
+crashes because of the early freeing of the subroutine.
+
 =back
 
 =head1 Known Problems