X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/e61cab1ae55f80d9be2ae83f1a64a72c2b0e2f41..12cd6c6b7c1f412faa98318e7c8571489cc4e44b:/pod/perldelta.pod diff --git a/pod/perldelta.pod b/pod/perldelta.pod index af358ca..84a8382 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -1,3 +1,8 @@ +=for todo +b47a847f62 win32/win32sck.c: dont close() a freed socket os handle +35e037e846 Commit 1735f6f started to escape all... +9b4bdfd44e fix chop formats with non PV vars + =encoding utf8 =head1 NAME @@ -27,6 +32,13 @@ here, but most should go in the L section. [ List each enhancement as a =head2 entry ] +=head2 $a and $b warnings exemption + +The special variables $a and $b, used in C, are now exempt from "used +once" warnings, even where C is not used. This makes it easier for +CPAN modules to provide functions using $a and $b for similar purposes. +[perl #120462] + =head1 Security XXX Any security-related notices go here. In particular, any security @@ -86,7 +98,10 @@ There may well be none in a stable release. =item * -XXX +Constant hash key lookups (C<$hash{key}> as opposed to C<$hash{$key}>) have +long had the internal hash value computed at compile time, to speed up +lookup. This optimisation has only now been applied to hash slices as +well. =back @@ -125,6 +140,35 @@ chr 256 remains chr 256, instead of turning into "\xc4\x80". This allows L to deparse Unicode regular expression correctly. [perl #120182] +C<< B::HV->ARRAY >> now preserves the UTF8 flag on returned hash keys. +[perl #120535] + +=item * + +L has been upgraded from version 0.99 to 0.991. + +B<-debug> output now includes C pointers. + +=item * + +L has been upgraded from version 1.23 to 1.24. + +C is now deparsed in a way that does not issue warnings when +parsed again. [perl #119807] + +C is now deparsed correctly, rather than as C<< >> or +similar. + +C is now deparsed correctly with the CORE:: prefix when there +is a subroutine named "glob". + +=item * + +L has been upgraded from version 1.21 to 1.22. + +Removing a closed file handle from an IO::Select object now correctly +updates its internal state and returns the correct value. [perl #75156] + =item * L has been upgraded from version 3.00 to 3.01. @@ -133,6 +177,14 @@ The list of Perl versions covered has been updated. =item * +L has been upgraded from version 0.17 to 0.18. + +A bug fix in 0.17 caused references to be stringified as soon as a handle +to it was opened, even if it was opened only for reading. It also croaked +on read-only references. This has been fixed. [perl #119529] + +=item * + L has been upgraded from version 4.3 to 4.4. It no longer prints C<$\> twice. [perl #120202] @@ -222,7 +274,11 @@ XXX Changes (i.e. rewording) of diagnostic messages go here =item * -XXX Describe change here +L<%%s[%s] in scalar context better written as $%s[%s]|perldiag/"%%s[%s] in scalar context better written as $%s[%s]">: + +This warning now occurs for any C<%array[$index]> or C<%hash{key}> known to +be in scalar context at compile time. Previously it was worded "Scalar +value %%s[%s] better written as $%s[%s]". =back @@ -276,7 +332,9 @@ that they represent may be covered elsewhere. =item * -XXX +F has been converted from manual C +statements to Test::More functions. Each test now has a description. +[perl #120503] =back @@ -344,7 +402,9 @@ well. =item * -XXX +Compiling with C<-Accflags=-PERL_BOOL_AS_CHAR> now allows C99 and C++ +compilers to emulate the aliasing of C to C that perl does for +C89 compilers. [perl #120314] =back @@ -359,7 +419,8 @@ files in F and F are best summarized in L. =item * -XXX +Perl 5.18.0 accidentally disallowed C<-bareword> under C and +C. This has been fixed. [perl #120288] =item * @@ -367,6 +428,161 @@ C<-a> at the start of a line (or a hyphen with any single letter that is not a filetest operator) no longer produces an erroneous 'Use of "-a" without parentheses is ambiguous' warning. [perl #120288] +=item * + +Lvalue context is now properly propagated into bare blocks and C and +C blocks in lvalue subroutines. Previously, arrays and hashes would +sometimes incorrectly be flattened when returned in lvalue list context, or +"Bizarre copy" errors could occur. [perl #119797] + +=item * + +Lvalue context is now propagated to the branches of C<||> and C<&&> (and +their alphabetic equivalents, C and C). This means +C now allows C to be modified +through $_. + +=item * + +C<*DB::DB = sub {} if 0> no longer stops Perl's debugging mode from finding +C subs declared thereafter. + +=item * + +C and C remember the last handle used; the former +for the special C<_> filehandle, the latter for C<${^LAST_FH}>. +C where *foo was the last handle passed to C +or C could cause that handle to be forgotten if the +handle were not opened yet. This has been fixed. + +=item * + +Various cases of C, C etc. causing a crash +have been fixed. [perl #54044] + +=item * + +Assigning another typeglob to C<*^R> no longer makes the regular expression +engine crash. + +=item * + +C<%{'_<...'}> hashes now set breakpoints on the corresponding C<@{'_<...'}> +rather than whichever array C<@DB::dbline> is aliased to. [perl #119799] + +=item * + +Setting C<$!> to EACCESS before calling C could affect +C's behaviour. This has been fixed. + +=item * + +The "Can't use \1 to mean $1 in expression" warning message now only occurs +on the right-hand (replacement) part of a substitution. Formerly it could +happen in code embedded in the left-hand side, or in any other quote-like +operator. + +=item * + +The C<\N> regular expression escape, when used without the curly braces (to +mean C<[^\n]>), was ignoring a following C<*> if followed by whitespace +under /x. It had been this way since C<\N> to mean C<[^\n]> was introduced +in 5.12.0. + +=item * + +Blessing into a reference (C) has long been +disallowed, but magical scalars for the second like C<$/> and those tied +were exempt. They no longer are. [perl #119809] + +=item * + +Blessing into a reference was accidentally allowed in 5.18 if the class +argument were a blessed reference with stale method caches (i.e., whose +class had had subs defined since the last method call). They are +disallowed once more, as in 5.16. + +=item * + +An undefined lexical sub used as an inherited method no longer crashes. + +=item * + +C<< $x->{key} >> where $x was declared as C no longer crashes +if a Class::FIELDS subroutine stub has been declared. + +=item * + +C<@$obj{'key'}> and C<${$obj}{key}> used to be exempt from compile-time +field checking ("No such class field"; see L) but no longer are. + +=item * + +That compile-time field checking also applies now to the C<%$obj{'key'}> +syntax, added recently in Perl 5.19.4. + +=item * + +A nonexistent array element with a large index passed to a subroutine that +ties the array and then tries to access the element no longer results in a +crash. + +=item * + +Declaring a subroutine stub named NEGATIVE_INDICES no longer makes negative +array indices crash when the current package is a tied array class. + +=item * + +Declaring a C, C, or C subroutine stub in the +CORE::GLOBAL:: package no longer makes compilation of calls to the +corresponding functions crash. + +=item * + +Aliasing CORE::GLOBAL:: functions to constants stopped working in Perl 5.10 +but has now been fixed. + +=item * + +When C<`...`> or C calls a C override, double-quotish +interpolation now happens, as is the case when there is no override. +Previously, the presence of an override would make these quote-like +operators act like C, suppressing interpolation. [perl #115330] + +=item * + +C<<<`...`> here-docs (with backticks as the delimiters) now call +C overrides. [perl #119827] + +=item * + +The presence of a lexical sub named "CORE" no longer stops the CORE:: +prefix from working. + +=item * + +C<&CORE::exit()> and C<&CORE::die()> now respect L hints. + +=item * + +Undefining a glob that triggers a DESTROY method that undefines the same +glob is now safe. It used to produce "Attempt to free unreferenced glob +pointer" warnings and leak memory. + +=item * + +If subroutine redefinition (C or C for XS code) +triggers a DESTROY method on the sub that is being redefined, and that +method assigns a subroutine to the same slot (C<*foo = sub {}>), C<$_[0]> +is no longer left pointing to a freed scalar. Now DESTROY is delayed until +the new subroutine has been installed. + +=item * + +C, C and C now work when a wide character is used as the +delimiter. [perl #120463] + =back =head1 Known Problems @@ -381,8 +597,10 @@ platform specific bugs also go here. =item * -Perl 5.18.0 accidentally disallowed C<-bareword> under C and -C. This has been fixed. [perl #120288] +C used to call a sub named "CORE" and treat its return value as +a file name to execute. A bug fix inadvertently caused it to be +interpreted as the deprecated "do-SUB" construct. (Yes, C()> is inconsistent.) This will likely be changed back. =back