This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perldelta: Oops, duplicate entry
[perl5.git] / pod / perldelta.pod
index 301f6b4..270c2c7 100644 (file)
@@ -1,22 +1,20 @@
 =encoding utf8
 
-=for comment complete up to commit 80b8b050d2c6976822563e9f8edb2baa83539b12
-
 =head1 NAME
 
 [ 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.17.0
+perldelta - what is new for perl v5.17.2
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.16.0 release and
-the 5.17.0 release.
+This document describes differences between the 5.17.1 release and
+the 5.17.2 release.
 
-If you are upgrading from an earlier release such as 5.16.0, first read
-L<perl5160delta>, which describes differences between 5.14.0 and
-5.16.0.
+If you are upgrading from an earlier release such as 5.17.0, first read
+L<perl5171delta>, which describes differences between 5.17.0 and
+5.17.1.
 
 =head1 Notice
 
@@ -48,27 +46,6 @@ XXX For a release on a stable branch, this section aspires to be:
 
 [ List each incompatible change as a =head2 entry ]
 
-=head2 qw(...) can no longer be used as parentheses
-
-C<qw> lists used to fool the parser into thinking they were always
-surrounded by parentheses.  This permitted some surprising constructions
-such as C<foreach $x qw(a b c) {...}>, which should really be written
-C<foreach $x (qw(a b c)) {...}>.  These would sometimes get the lexer into
-the wrong state, so they didn't fully work, and the similar C<foreach qw(a
-b c) {...}> that one might expect to be permitted never worked at all.
-
-This side effect of C<qw> has now been abolished.  It has been deprecated
-since Perl 5.13.11.  It is now necessary to use real parentheses
-everywhere that the grammar calls for them.
-
-=head2 C<\s> in regular expressions now matches a Vertical Tab (experimental)
-
-This is an experiment early in the development cycle to see what
-repercussions arise from this change.  It may well be that we decide
-to require a C<"use feature"> to activate this behavior.  Because
-of the experimental nature of this, which may be reversed, the
-documentation has not been changed to reflect it.
-
 =head1 Deprecations
 
 XXX Any deprecated features, syntax, modules etc. should be listed here.
@@ -77,14 +54,6 @@ listed as an updated module in the L</Modules and Pragmata> section.
 
 [ List each deprecation as a =head2 entry ]
 
-=head2 Unescaped braces in regexps
-
-Literal unescaped C<{> in regular expressions is now deprecated.  Every
-brace character should be either escaped (by a preceding backslash) or
-part of a construct where it's a metacharacter.  This catches likely typos
-such as C</f{,3}/>.  It will also allow braces to be used in the future
-to delimit parameters to metacharacters that currently take no parameters.
-
 =head1 Performance Enhancements
 
 XXX Changes which enhance performance without changing behaviour go here. There
@@ -96,15 +65,6 @@ may well be none in a stable release.
 
 =item *
 
-Filetest ops manage the stack in a fractionally more efficient manner.
-
-=item *
-
-Globs used in a numeric context are now numerified directly in most cases,
-rather than being numerified via stringification.
-
-=item *
-
 XXX
 
 =back
@@ -137,84 +97,22 @@ XXX
 
 =item *
 
-L<B> has been upgraded from version 1.34 to 1.35.
-
-The C<stashlen> method of COPs has been added.   This provides access to an
-internal field added in perl 5.16 under threaded builds [perl #113034].
-
-=item *
-
-L<ExtUtils::ParseXS> has been upgraded from version 3.16 to 3.17.
+L<File::stat> has been upgraded from version 1.06 to 1.07.
 
-The generated C code now avoids unnecessarily incrementing
-C<PL_amagic_generation> on Perl versions where it's done automatically
-(or on current Perl where the variable no longer exists).
+Previously C<File::stat>'s overloaded C<-x> and C<-X> operators did not give
+the correct results for directories or executable files when running as
+root. They had been treating executable permissions for root just like for
+any other user, performing group membership tests I<etc> for files not owned
+by root. They now follow the correct Unix behaviour - for a directory they
+are always true, and for a file if any of the three execute permission bits
+are set then they report that root can execute the file. Perl's builtin
+C<-x> and C<-X> operators have always been correct.
 
 =item *
 
-L<File::DosGlob> has been upgraded from version 1.06 to 1.07.
-
-Small documentation and comment fixes.
-
-=item *
-
-L<File::Find> has been upgraded from version 1.20 to 1.21.
-
-Individual files may now appear in list of directories to be searched
-[perl #59750].
-
-=item *
-
-L<File::stat> has been upgraded from version 1.05 to 1.06.
-
-C<File::stat> ignores the L<filetest> pragma, and warns when used in
-combination therewith.  But it was not warning for C<-r>.  This has been
-fixed [perl #111640].
-
-C<-p> now works, and does not return false for pipes [perl #111638].
-
-=item *
-
-L<Hash::Util> has been upgraded from version 0.11 to 0.12.
-
-C<hash_unlocked> and C<hashref_unlocked> now returns true if the hash is
-unlocked, instead of always returning false [perl #112126].
-
-C<hash_unlocked>, C<hashref_unlocked>, C<lock_hash_recurse> and
-C<unlock_hash_recurse> are now exportable [perl #112126].
-
-Two new functions, C<hash_locked> and C<hashref_locked>, have been added.
-Oddly enough, these two functions were already exported, even though they
-did not exist [perl #112126].
-
-=item *
+L<Tie::StdHandle> has been upgraded from version 4.2 to 4.3.
 
-L<overload> has been upgraded from version 1.18 to 1.19.
-
-C<no overload> now warns for invalid arguments, just like C<use overload>.
-
-=item *
-
-L<Pod::Functions> has been upgraded from version 1.05 to 1.06.
-
-Typo fix in generated documentation.
-
-=item *
-
-L<Storable> has been upgraded from version 2.34 to 2.35.
-
-Modifying C<$_[0]> within C<STORABLE_freeze> no longer results in crashes
-[perl #112358].
-
-An object whose class implements C<STORABLE_attach> is now thawed only once
-when there are multiple references to it in the structure being thawed
-[perl #111918].
-
-=item *
-
-L<utf8> has been upgraded from version 1.09 to 1.10.
-
-Some documentation has been clarified.
+C<READ> now respects the offset argument to C<read> [perl #112826].
 
 =back
 
@@ -224,8 +122,7 @@ Some documentation has been clarified.
 
 =item *
 
-L<Version::Requirements> has been removed from the core distribution.  It is
-available under a different name: L<CPAN::Meta::Requirements>.
+XXX
 
 =back
 
@@ -248,50 +145,6 @@ XXX Changes which significantly change existing files in F<pod/> go here.
 However, any changes to F<pod/perldiag.pod> should go in the L</Diagnostics>
 section.
 
-=head3 L<perldata>
-
-=over 4
-
-=item *
-
-Now explicitly documents the behaviour of hash initializer lists that
-contain duplicate keys.
-
-=item *
-
-XXX Description of the change here
-
-=back
-
-=head3 L<perldiag>
-
-=over 4
-
-=item *
-
-The explanation of symbolic references being prevented by "strict refs"
-now doesn't assume that the reader knows what symbolic references are.
-
-=item *
-
-XXX Description of the change here
-
-=back
-
-=head3 L<perlfunc>
-
-=over 4
-
-=item *
-
-The return value of C<pipe> is now documented.
-
-=item *
-
-XXX Description of the change here
-
-=back
-
 =head3 L<XXX>
 
 =over 4
@@ -329,7 +182,10 @@ XXX Newly added diagnostic messages go here
 
 =item *
 
-XXX L<message|perldiag/"message">
+L<Group name must start with a non-digit word character in regex; marked by <-- HERE in m/%s/|perldiag/"Group name must start with a non-digit word character in regex; marked by <-- HERE in m/%s/">
+
+This error has been added for C<(?&0)>, which is invalid.  It used to
+produce an incomprehensible error message [perl #101666].
 
 =back
 
@@ -339,14 +195,12 @@ XXX L<message|perldiag/"message">
 
 =item *
 
-"L<Unescaped left brace in regex is deprecated, passed
-through|perldiag/"Unescaped left brace in regex is deprecated, passed
-through">" is a new deprecation warning.  See L</Unescaped braces in
-regexps>.
+C<chr()> now warns when passed a negative value [perl #83048].
 
 =item *
 
-XXX L<message|perldiag/"message">
+C<srand()> now warns when passed a value that doesn't fit in a C<UV> (since the
+value will be truncated rather than overflowing) [perl #40605].
 
 =back
 
@@ -394,13 +248,6 @@ L</Platform Support> section, instead.
 
 =item *
 
-The test suite now has a section for tests that require very large amounts
-of memory.  These tests won't run by default; they can be enabled by
-setting the C<PERL_TEST_MEMORY> environment variable to the number of
-gibibytes of memory that may be safely used.
-
-=item *
-
 XXX
 
 =back
@@ -439,22 +286,6 @@ source tree.
 
 =over 4
 
-=item clang++
-
-There is now a workaround for a compiler bug that prevented compiling
-with clang++ since Perl 5.15.7 [perl #112786].
-
-=item C++
-
-When compiling the Perl core as C++ (which is only semi-supported), the
-mathom functions are now compiled as C<extern "C">, to ensure proper
-binary compatibility.  (However, binary compatibility isn't generally
-guaranteed anyway in the situations where this would matter.)
-
-=item VMS
-
-It should now be possible to compile Perl as C++ on VMS.
-
 =item XXX-some-platform
 
 XXX
@@ -500,33 +331,7 @@ be noted as well.
 
 =item *
 
-The C<CV *> typemap entry now supports C<&{}> overloading and typeglobs,
-just like C<&{...}> [perl #96872].
-
-=item *
-
-The C<SVf_AMAGIC> flag to indicate overloading is now on the stash, not the
-object.  It is now set automatically whenever a method or @ISA changes, so
-its meaning has changed, too.  It now means "potentially overloaded".  When
-the overload table is calculated, the flag is automatically turned off if
-there is no overloading, so there should be no noticeable slowdown.
-
-The staleness of the overload tables is now checked when overload methods
-are invoked, rather than during C<bless>.
-
-"A" magic is gone.  The changes to the handling of the C<SVf_AMAGIC> flag
-eliminate the need for it.
-
-C<PL_amagic_generation> has been removed as no longer necessary.  For XS
-modules, it is now a macro alias to C<PL_na>.
-
-The fallback overload setting is now stored in a stash entry separate from
-overloadedness itself.
-
-=item *
-
-The character-processing code has been cleaned up in places.  The changes
-should be operationally invisible.
+XXX
 
 =back
 
@@ -542,131 +347,64 @@ L</Modules and Pragmata>.
 
 =item *
 
-C<goto ''> now looks for an empty label, producing the "goto must have
-label" error message, instead of exiting the program [perl #111794].
-
-=item *
-
-C<goto "\0"> now dies with "Can't find label" instead of "goto must have
-label".
-
-=item *
-
-The C function C<hv_store> used to result in crashes when used on C<%^H>
-[perl #111000].
-
-=item *
-
-A call checker attached to a closure prototype via C<cv_set_call_checker>
-is now copied to closures cloned from it.  So C<cv_set_call_checker> now
-works inside an attribute handler for a closure.
+A regression introduced in v5.14.0 has been fixed, in which some calls
+to the C<re> module would clobber C<$_>.
 
 =item *
 
-Writing to C<$^N> used to have no effect.  Now it croaks with "Modification
-of a read-only value" by default, but that can be overridden by a custom
-regular expression engine, as with C<$1> [perl #112184].
+C<do FILE> now always either sets or clears C<$@>, even when the file can't be
+read. This ensures that testing C<$@> first (as recommended by the
+documentation) always returns the correct result.
 
 =item *
 
-C<undef> on a control character glob (C<undef *^H>) no longer emits an
-erroneous warning about ambiguity [perl #112456].
-
-=item *
+The array iterator used for the C<each @array> construct is now correctly
+reset when C<@array> is cleared (RT #75596). This happens for example when the
+array is globally assigned to, as in C<@array = (...)>, but not when its
+B<values> are assigned to. In terms of the XS API, it means that C<av_clear()>
+will now reset the iterator.
 
-For efficiency's sake, many operators and built-in functions return the
-same scalar each time.  Lvalue subroutines and subroutines in the CORE::
-namespace were allowing this implementation detail to leak through.
-C<print &CORE::uc("a"), &CORE::uc("b")> used to print "BB".  The same thing
-would happen with an lvalue subroutine returning the return value of C<uc>.
-Now the value is copied in such cases.
+This mirrors the behaviour of the hash iterator when the hash is cleared.
 
 =item *
 
-C<method {}> syntax with an empty block or a block returning an empty list
-used to crash or use some random value left on the stack as its invocant.
-Now it produces an error.
+C<< $class->can >>, C<< $class->isa >>, and C<< $class->DOES >> now return
+correct results, regardless of whether that package referred to by C<$class>
+exists [perl #47113].
 
 =item *
 
-C<vec> now works with extremely large offsets (>2 GB) [perl #111730].
+Arriving signals no longer clear C<$@> [perl #45173].
 
 =item *
 
-Changes to overload settings now take effect immediately, as do changes to
-inheritance that affect overloading.  They used to take effect only after
-C<bless>.
-
-Objects that were created before a class had any overloading used to remain
-non-overloaded even if the class gained overloading through C<use overload>
-or @ISA changes, and even after C<bless>.  This has been fixed
-[perl #112708].
+Allow C<my ()> declarations with an empty variable list [perl #113554].
 
 =item *
 
-Classes with overloading can now inherit fallback values.
+During parsing, subs declared after errors no longer leave stubs
+[perl #113712].
 
 =item *
 
-Overloading was not respecting a fallback value of 0 if there were
-overloaded objects on both sides of an assignment operator like C<+=>
-[perl #111856].
+Closures containing no string evals no longer hang on to their containing
+subroutines, allowing variables closed over by outer subroutines to be
+freed when the outer sub is freed, even if the inner sub still exists
+[perl #89544].
 
 =item *
 
-C<pos> now croaks with hash and array arguments, instead of producing
-erroneous warnings.
-
-=item *
-
-C<while(each %h)> now implies C<while(defined($_ = each %h))>, like
-C<readline> and C<readdir>.
-
-=item *
-
-Subs in the CORE:: namespace no longer crash after C<undef *_> when called
-with no argument list (C<&CORE::time> with no parentheses).
-
-=item *
-
-Unicode 6.1 published an incorrect alias for one of the
-Canonical_Combining_Class property's values (which range between 0 and
-254).  The alias C<CCC133> should have been C<CCC132>.  Perl now
-overrides the data file furnished by Unicode to give the correct value.
-
-=item *
-
-C<unpack> no longer produces the "'/' must follow a numeric type in unpack"
-error when it is the data that are at fault [perl #60204].
-
-=item *
-
-C<join> and C<"@array"> now call FETCH only once on a tied C<$">
-[perl #8931].
-
-=item *
-
-Some subroutine calls generated by compiling core ops affected by a
-C<CORE::GLOBAL> override had op checking performed twice.  The checking
-is always idempotent for pure Perl code, but the double checking can
-matter when custom call checkers are involved.
-
-=item *
-
-A race condition used to exist around fork that could cause a signal sent to
-the parent to be handled by both parent and child. Signals are now blocked
-briefly around fork to prevent this from happening [perl #82580].
+Duplication of in-memory filehandles by opening with a "<&=" or ">&=" mode
+stopped working properly in 5.16.0.  It was causing the new handle to
+reference a different scalar variable.  This has been fixed [perl #113764].
 
 =back
 
 =head1 Known Problems
 
 XXX Descriptions of platform agnostic bugs we know we can't fix go here. Any
-tests that had to be C<TODO>ed for the release would be noted here, unless
-they were specific to a particular platform (see below).
-
-This is a list of some significant unfixed bugs, which are regressions
-from either 5.XXX.XXX or 5.XXX.XXX.
+tests that had to be C<TODO>ed for the release would be noted here. Unfixed
+platform specific bugs also go here.
 
 [ List each fix as a =item entry ]
 
@@ -687,7 +425,7 @@ here.
 
 XXX Generate this with:
 
-  perl Porting/acknowledgements.pl v5.16.0..HEAD
+  perl Porting/acknowledgements.pl v5.17.1..HEAD
 
 =head1 Reporting Bugs