This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perldelta up to 6728c8514a
[perl5.git] / pod / perldelta.pod
index f8cefc2..d9e72df 100644 (file)
@@ -1,8 +1,10 @@
 =encoding utf8
 
 =for comment
-This has been completed up to a74fb2cdc8f, except for
-e032854 khw [perl #32080] is_utf8_string() reads too far
+This has been completed up to 6728c8514a, except for
+b0f2e9e nwclark     Fix two bugs related to pod files outside of pod/ (important enough?)
+43d9ecf jpeacock    Set all version object math ops to noop
+f300909 smueller    EU::ParseXS: Silence warning (probably unnecessary)
 
 =head1 NAME
 
@@ -44,13 +46,41 @@ The B<t> command in the debugger, which toggles tracing mode, now accepts a
 numerical argument that determines how many levels of subroutine calls to
 trace.
 
+=head2 Return value of C<tied>
+
+The value returned by C<tied> on a tied variable is now the actual scalar
+that holds the object to which the variable is tied.  This allows ties to
+be weakened with C<Scalar::Util::weaken(tied $tied_variable)>.
+
+=head2 Lvalue C<scalar>
+
+C<scalar> can now be used as an lvalue.  You might consider this a new
+feature (which is why it is listed in this section), but the author of
+the change considered it a bug fix, since C<scalar> is only supposed to be
+setting scalar context, not changing lvalueness [perl #24346].
+
 =head1 Security
 
 XXX Any security-related notices go here.  In particular, any security
 vulnerabilities closed should be noted here rather than in the
 L</Selected Bug Fixes> section.
 
-[ List each security issue as a =head2 entry ]
+=head2 C<is_utf8_char()>
+
+The XS-callable function C<is_utf8_char()> when presented with malformed
+UTF-8 input can read up to 12 bytes beyond the end of the string.  This
+cannot be fixed without changing its API.  It is not called from CPAN.
+The documentation for it now describes how to use it safely.
+
+=head2 Other C<is_utf8_foo()> functions, as well as C<utf8_to_foo()>, etc.
+
+Most of the other XS-callable functions that take UTF-8 encoded input
+implicitly assume that the UTF-8 is valid (not malformed) in regards to
+buffer length.  Do not do things such as change a character's case or
+see if it is alphanumeric without first being sure that it is valid
+UTF-8.  This can be safely done for a whole string by using one of the
+functions C<is_utf8_string()>, C<is_utf8_string_loc()>, and
+C<is_utf8_string_loclen()>.
 
 =head1 Incompatible Changes
 
@@ -61,6 +91,41 @@ XXX For a release on a stable branch, this section aspires to be:
 
 [ List each incompatible change as a =head2 entry ]
 
+=head2 C<use I<VERSION>>
+
+As of this release, version declarations like C<use v5.16> now disable all
+features before enabling the new feature bundle.  This means that the
+following holds true:
+
+    use 5.016;
+    # 5.16 features enabled here
+    use 5.014;
+    # 5.16 features disabled here
+
+C<use v5.12> and higher continue to enable strict, but explicit
+C<use strict> and C<no strict> now override the version declaration, even
+when they come first:
+
+    no strict;
+    use 5.012;
+    # no strict here
+
+There is a new ":default" feature bundle, that represents the set of
+features enabled before any version declaration or C<use feature> has been
+seen.  Version declarations below 5.10 now enable the ":default" feature
+set.  This does not actually change the behaviour of C<use v5.8>, because
+features added to the ":default" set are those that were traditionally
+enabled by default, before they could be turned off.
+
+C<$[> is now disabled under C<use v5.16>.  It is part of the default
+feature set and can be turned on or off explicitly
+with C<use feature 'array_base'>.
+
+=head2 C<UNIVERSAL::VERSION>
+
+The change to C<UNIVERSAL::VERSION> in 5.15.2 has been reverted.  It now
+returns a stringified version object once more.
+
 =head2 C<substr> lvalue revamp
 
 When C<substr> is called in lvalue or potential lvalue context with two or
@@ -117,7 +182,9 @@ C<substr> has changed.
 Passing a substring of a read-only value or a typeglob to a function (potential lvalue context) no longer causes an immediate "Can't coerce" or "Modification of a read-only value" error.  That error only occurs if and
 when the value passed is assigned to.
 
-The same thing happens with the "substr outside of string" error.
+The same thing happens with the "substr outside of string" error.  If the
+lvalue is only read, not written to, it is now just a warning, as with
+rvalue C<substr>.
 
 =item *
 
@@ -130,6 +197,19 @@ It was impossible to fix all the bugs without an incompatible change, and
 the behaviour of negative offsets was never specified, so the change was
 deemed acceptable.
 
+=head2 Return value of C<eval>
+
+C<eval> returns C<undef> in scalar context or an empty list in list context
+when there is a run-time error.  For syntax errors (when C<eval> is passed
+a string), in list context it used to return a list containing a single
+undefined element.  Now it returns an empty list in list context for all
+errors [perl #80630].
+
+=head2 Anonymous handles
+
+Automatically generated file handles are now named __ANONIO__ when the
+variable name cannot be determined, rather than $__ANONIO__.
+
 =head2 XS API tweak
 
 The C<newCONSTSUB_flags> C-level function, added in 5.15.4, now has a
@@ -172,6 +252,12 @@ Assign to a variable that holds a typeglob or copy-on-write scalar is now
 much faster.  Previously the typeglob would be stringified or the
 copy-on-write scalar would be copied before being clobbered.
 
+=item *
+
+Assignment to a substring in void context is now more than twice its
+previous speed.  Instead of creating and returning a special lvalue scalar
+that is then assigned to, C<substr> modifies the original string itself.
+
 =back
 
 =head1 Modules and Pragmata
@@ -217,11 +303,78 @@ L<B::Debug> has been upgraded from version 1.16 to version 1.17.
 
 =item *
 
-L<B::Deparse> has been upgraded from version 1.09 to 1.10.
+L<B::Deparse> has been upgraded from version 1.09 to version 1.10.
+
+Various constructs that used to be deparsed incorrectly have been fixed:
+
+=over
+
+=item C<sort(foo(bar))>
+
+C<sort foo(bar)>, how it used to deparse, makes foo the sort routine,
+rather than a regular function call.
+
+=item Keys and values in C<%^H>
+
+Undefined values in the hint hash were being deparsed as empty strings.
+Whenever the hint hash changed, all undefined values, even those
+unmodified, were being printed.
+
+Special characters, such as quotation marks, were not being escaped
+properly.
+
+Some values used to be omitted if, for instance, a key was the same as a
+previous value and vice versa.
+
+=item "method BLOCK" syntax
+
+C<method { $expr }> used to be deparsed as something like
+C<< do{ $expr }->method >>, but the latter puts the $expr in scalar
+context, whereas the former puts in list context.
+
+=item C<do +{}> and C<do({})>
+
+These are both variants of do-file syntax, but were being deparsed as
+do-blocks.
+
+=item Keywords that do not follow the llafr
+
+Keywords like C<return> and C<last> that do not follow the
+looks-like-a-function rule are now deparsed correctly with parentheses in
+the right place.
+
+Similarly, C<not>, which I<does> follow the llafr, was being deparsed as
+though it does not.
+
+=item C<=~>
+
+In various cases, B::Deparse started adding a spurious C<$_ =~> before the
+right-hand side in Perl 5.14; e.g., C<< "" =~ <$a> >> would become
+C<< "" =~ ($_ =~ <$a>) >>.
+
+=item C<open local *FH>
+
+C<open>, C<pipe> and other functions that autovivify handles used to omit
+C<local *> from C<local *FH>.
+
+=item Negated single-letter subroutine calls
+
+Negated subroutine calls like C<- f()> and C<-(f())> were being deparsed
+as file test operators.
+
+=item C<&{&}>
+
+C<&{&}> and C<& &>, which are calls to the subroutine named "&", believe it
+or not, were being deparsed as C<&&>.
+
+=back
+
+=item *
+
+L<Carp> has been upgraded from version 1.23 to version 1.24.
 
-C<sort(foo(bar))> is now deparsed correctly. (C<sort foo(bar)>, how it used
-to deparse, makes foo the sort routine, rather than a regular function
-call.)
+It now tacks the last-accessed filehandle and line number on to the end of
+the error message, just like C<die> [perl #96672].
 
 =item *
 
@@ -233,7 +386,15 @@ L<Compress::Raw::Bzip2> has been upgraded from version 2.042 to version 2.045.
 
 =item *
 
-L<Data::Dumper> has been upgraded from version 2.134 to 2.135.
+L<CPAN::Meta::YAML> has been upgraded from version 0.004 to version 0.005.
+
+=item *
+
+L<CPANPLUS> has been upgraded from version 0.9112 to version 0.9113.
+
+=item *
+
+L<Data::Dumper> has been upgraded from version 2.134 to version 2.135.
 
 The XS implementation has been updated to account for the Unicode symbol
 changes in Perl 5.15.4.  It also knows how to output typeglobs with nulls
@@ -241,6 +402,20 @@ in their names.
 
 =item *
 
+L<Digest::SHA> has been upgraded from version 5.63 to version 5.70.
+
+Added BITS mode to addfile method and shasum which makes partial-byte inputs
+now possible via files/STDIN and allows shasum to check all 8074 NIST Msg vectors,
+where previously special programming was required to do this.
+
+=item *
+
+L<Exporter> has been upgraded from version 5.65 to version 5.66.
+
+It no longer tries to localise C<$_> unnecessarily.
+
+=item *
+
 L<ExtUtils::ParseXS> has been upgraded from version 3.05 to version 3.07.
 
 =item *
@@ -278,6 +453,24 @@ replaces ----- with -{}-{}-{}-{}-
 
 =item *
 
+L<POSIX> has been upgraded from version 1.26 to version 1.27.
+
+It no longer produces a "Constant subroutine TCSANOW redefined" warning on
+Windows.
+
+XXX When did it start producing that warning?  Was it post-5.15.5?  Even if
+it was not, adding a note will help whoever compiles perl5160delta.
+
+=item *
+
+L<Socket> has been upgraded from version 1.94_02 to version 1.97.
+
+=item *
+
+L<threads> has been upgraded from version 1.85 to version 1.86.
+
+=item *
+
 L<Unicode::Collate> has been upgraded from version 0.85 to version 0.87.
 
 Tailored compatibility ideographs as well as unified ideographs for
@@ -285,6 +478,12 @@ the locales: ja, ko, zh__big5han, zh__gb2312han, zh__pinyin, zh__stroke.
 
 Now Locale/*.pl files are searched in @INC.
 
+=item *
+
+L<UNIVERSAL> has been upgraded from version 1.10 to version 1.11.
+
+Documentation change clarifies return values from UNIVERSAL::VERSION.
+
 =back
 
 =head2 Removed Modules and Pragmata
@@ -293,7 +492,13 @@ Now Locale/*.pl files are searched in @INC.
 
 =item *
 
-XXX
+Changing the case of a UTF-8 encoded string under C<use locale> now
+gives better, but still imperfect, results.  Previously, such a string
+would entirely lose locale semantics and silently be treated as Unicode.
+Now, the code points that are less than 256 are treated with locale
+rules, while those above 255 are, of course, treated as Unicode.  See
+L<perlfunc/lc> for more details, including the deficiencies of this
+scheme.
 
 =back
 
@@ -316,13 +521,16 @@ 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<XXX>
+=head3 L<perlsec/Laundering and Detecting Tainted Data>
 
 =over 4
 
 =item *
 
-XXX Description of the change here
+The example function for checking for taintedness contained a subtle
+error.  C<$@> needs to be localized to prevent its changing this
+global's value outside the function.  The preferred method to check for
+this, though, remains to use L<Scalar::Util/tainted>.
 
 =back
 
@@ -390,6 +598,14 @@ The 'Use of "foo" without parentheses is ambiguous' warning has been
 extended to apply also to user-defined subroutines with a (;$) prototype,
 and not just to built-in functions.
 
+=item *
+
+The error messages for using C<default> and C<when> outside of a
+topicalizer have been standardised to match the messages for C<continue>
+and loop controls.  They now read 'Can't "default" outside a topicalizer'
+and 'Can't "when" outside a topicalizer'.  They both used to be 'Can't use
+when() outside a topicalizer' [perl #91514].
+
 =back
 
 =head1 Utility Changes
@@ -436,6 +652,11 @@ F<unicore/Name.pm>.  This has been corrected [perl #104226].
 
 XXX Is that Perl version correct?  Is the file path correct?
 
+=item *
+
+The -Dusesitecustomize and -Duserelocatableinc options now work together
+properly.
+
 =back
 
 =head1 Testing
@@ -500,11 +721,27 @@ and compilation changes or changes in portability/compatibility.  However,
 changes within modules for platforms should generally be listed in the
 L</Modules and Pragmata> section.
 
+=head3 VMS
+
 =over 4
 
-=item XXX-some-platform
+=item *
 
-XXX
+A link-time error on VMS versions without C<symlink> support was
+introduced in 5.15.1, but has now been corrected.
+
+=item *
+
+Explicit support for VMS versions prior to v7.0 and DEC C versions prior
+to v6.0 has been removed.
+
+=item *
+
+Since Perl 5.10.1, the home-grown C<stat> wrapper has been unable to
+distinguish between a directory name containing an underscore and an
+otherwise-identical filename containing a dot in the same position
+(e.g., t/test_pl as a directory and t/test.pl as a file). This problem
+has been corrected.
 
 =back
 
@@ -536,6 +773,20 @@ L</Modules and Pragmata>.
 
 =item *
 
+RT #78266: The regex engine has been leaking memory when accessing
+named captures that weren't matched as part of a regex ever since 5.10
+when they were introduced, e.g. this would consume over a hundred MB
+of memory:
+
+    for (1..10_000_000) {
+       if ("foo" =~ /(foo|(?<capture>bar))?/) {
+           my $capture = $+{capture}
+       }
+    }
+    system "ps -o rss $$"'
+
+=item *
+
 A constant subroutine assigned to a glob whose name contains a null will no
 longer cause extra globs to pop into existence when the constant is
 referenced under its new name.
@@ -639,6 +890,83 @@ variable was anything other than a string or typeglob.
 The C<evalbytes> keyword added in 5.15.5 was respecting C<use utf8>
 declarations from the outer scope, when it should have been ignoring them.
 
+=item *
+
+C<goto &func> no longers crashes, but produces an error message, when the
+unwinding of the current subroutine's scope fires a destructor that
+undefines the subroutine being "goneto" [perl #99850].
+
+=item *
+
+Arithmetic assignment (C<$left += $right>) involving overloaded objects that
+rely on the 'nomethod' override no longer segfault when the left operand is not
+overloaded.
+
+=item *
+
+Assigning C<__PACKAGE__> or any other shared hash key scalar to a stash
+element no longer causes a double free.  Regardless of this change, the
+results of such assignments are still undefined.
+
+=item *
+
+Creating a C<UNIVERSAL::AUTOLOAD> sub no longer stops C<%+>, C<%-> and
+C<%!> from working some of the time [perl #105024].
+
+=item *
+
+Assigning C<__PACKAGE__> or another shared hash key string to a variable no
+longer stops that variable from being tied if it happens to be a PVMG or
+PVLV internally.
+
+=item *
+
+When presented with malformed UTF-8 input, the XS-callable functions
+C<is_utf8_string()>, C<is_utf8_string_loc()>, and
+C<is_utf8_string_loclen()> could read beyond the end of the input
+string by up to 12 bytes.  This no longer happens.  [perl #32080].
+However, currently, C<is_utf8_char()> still has this defect,
+see L</is_utf8_char()> above.
+
+=item *
+
+Doing a substitution on a tied variable returning a copy-on-write scalar
+used to cause an assertion failure or an "Attempt to free nonexistent
+shared string" warning.
+
+=item *
+
+A change in perl 5.15.4 caused C<caller()> to produce malloc errors and a
+crash with Perl's own malloc, and possibly with other malloc
+implementations, too [perl #104034].
+
+=item *
+
+A bug fix in 5.15.5 could sometimes result in assertion failures under
+debugging builds of perl for certain syntax errors in C<eval>, such as
+C<eval(q|""!=!~//|);>
+
+=item *
+
+The "c [line num]" debugger command was broken by other debugger changes
+release in 5.15.3.  This is now fixed.
+
+=item *
+
+Breakpoints were not properly restored after a debugger restart using the
+"R" command.  This was broken in 5.15.3.  This is now fixed.
+
+=item *
+
+The debugger prompt did not display the current line in.  This was broken
+in 5.15.3.  This is now fixed.
+
+=item *
+
+Class method calls still suffered from the Unicode bug with Latin-1 package
+names.  This was missed in the Unicode package name cleanup in 5.15.4
+[perl #105922].
+
 =back
 
 =head1 Known Problems