X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/632c5d30411034128e91ad264a6401fe25d27710..985213f2fede57896814a0d7f5d12b04cc05be5b:/pod/perldelta.pod diff --git a/pod/perldelta.pod b/pod/perldelta.pod index e3a75de..7c26831 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -1,26 +1,25 @@ =encoding utf8 =for comment -This has been completed up to 1a50d74bac4, except for: -8629c11317 smueller Escape double-quotes in generated #line directives -8dc67a69b shlomif perl -d: display lines inside subroutines. -3dfd1b5cd2 leont Export PerlIOBase_open +This has been completed up to 0aae26c14, except for: +803e389 rurban CYG17 utf8 paths +d9298c1 rurban mymalloc isn't thread safe =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.15.7 +perldelta - what is new for perl v5.15.8 =head1 DESCRIPTION -This document describes differences between the 5.15.6 release and -the 5.15.7 release. +This document describes differences between the 5.15.7 release and +the 5.15.8 release. -If you are upgrading from an earlier release such as 5.15.5, first read -L, which describes differences between 5.15.5 and -5.15.6. +If you are upgrading from an earlier release such as 5.15.6, first read +L, which describes differences between 5.15.6 and +5.15.7. =head1 Notice @@ -34,31 +33,125 @@ here, but most should go in the L section. [ List each enhancement as a =head2 entry ] -=head2 C no longer needed for C<\N{I}> - -The C module is now automatically loaded when needed as if -the C<:full> and C<:short> options had been specified. See -L. - -=head2 Improved performance for Unicode properties in regular expressions - -Matching a code point against a Unicode property is now done via a -binary search instead of linear. This means for example that the worst -case for a 1000 item property is 10 probes instead of 1000. This -inefficiency has been compensated for in the past by permanently storing -in a hash the results of a given probe plus the results for the adjacent -64 code points, under the theory that near-by code points are likely to -be searched for. A separate hash was used for each mention of a Unicode -property in each regular expression. Thus, C -would generate two hashes. Any probes in one instance would be unknown -to the other, and the hashes could expand separately to be quite large -if the regular expression were used on many different widely-separated -code points. This can lead to running out of memory in extreme cases. -Now, however, there is just one hash shared by all instances of a given -property. This means that if C<\p{foo}> is matched against "A" in one -regular expression in a thread, the result will be known immediately to -all regular expressions, and the relentless march of using up memory is -slowed considerably. +=head2 Improved ability to mix locales and Unicode, including UTF-8 locales + +An optional parameter has been added to C + + use locale ':not_characters'; + +which tells Perl to use all but the C and C +portions of the current locale. Instead, the character set is assumed +to be Unicode. This allows locales and Unicode to be seamlessly mixed, +including the increasingly frequent UTF-8 locales. When using this +hybrid form of locales, the C<:locale> layer to the L pragma can +be used to interface with the file system, and there are CPAN modules +available for ARGV and environment variable conversions. + +Full details are in L. + +=head2 New function C and corresponding escape sequence C<\F> for Unicode foldcase + +Unicode foldcase is an extension to lowercase that gives better results +when comparing two strings case-insensitively. It has long been used +internally in regular expression C matching. Now it is available +explicitly through the new C function call (enabled by +S>, or C, or explicitly callable via +C) or through the new C<\F> sequence in double-quotish +strings. + +Full details are in L. + +=head2 C<_> in subroutine prototypes + +The C<_> character in subroutine prototypes is now allowed before C<@> or +C<%>. + +=head2 Supports (I) Unicode 6.1 + +Besides the addition of whole new scripts, and new characters in +existing scripts, this new version of Unicode, as always, makes some +changes to existing characters. One change that may trip up some +applications is that the General Category of two characters in the +Latin-1 range, PILCROW SIGN and SECTION SIGN, has been changed from +Other_Symbol to Other_Punctuation. The same change has been made for +a character in each of Tibetan, Ethiopic, and Aegean. +The code points U+3248..U+324F (CIRCLED NUMBER TEN ON BLACK SQUARE +through CIRCLED NUMBER EIGHTY ON BLACK SQUARE) have had their General +Category changed from Other_Symbol to Other_Numeric. The Line Break +property has changes for Hebrew and Japanese; and as a consequence of +other changes in 6.1, the Perl regular expression construct C<\X> now +works differently for some characters in Thai and Lao. + +New aliases (synonyms) have been defined for many property values; +these, along with the previously existing ones, are all cross indexed in +L. + +The return value of C is affected by other +changes: + + Code point Old Name New Name + U+000A LINE FEED (LF) LINE FEED + U+000C FORM FEED (FF) FORM FEED + U+000D CARRIAGE RETURN (CR) CARRIAGE RETURN + U+0085 NEXT LINE (NEL) NEXT LINE + U+008E SINGLE-SHIFT 2 SINGLE-SHIFT-2 + U+008F SINGLE-SHIFT 3 SINGLE-SHIFT-3 + U+0091 PRIVATE USE 1 PRIVATE USE-1 + U+0092 PRIVATE USE 2 PRIVATE USE-2 + U+2118 SCRIPT CAPITAL P WEIERSTRASS ELLIPTIC FUNCTION + +Perl will accept any of these names as input, but +C now returns the new name of each pair. The +change for U+2118 is considered by Unicode to be a correction, that is +the original name was a mistake (but again, it will remain forever valid +to use it to refer to U+2118). But most of these changes are the +fallout of the mistake Unicode 6.0 made in naming a character used in +Japanese cell phones to be "BELL", which conflicts with the long +standing industry use of (and Unicode's recommendation to use) that name +to mean the ASCII control character at U+0007. As a result, that name +has been deprecated in Perl since v5.14; and any use of it will raise a +warning message (unless turned off). The name "ALERT" is now the +preferred name for this code point, with "BEL" being an acceptable short +form. The name for the new cell phone character, at code point U+1F514, +remains undefined in this version of Perl (hence we don't quite +implement all of Unicode 6.1), but starting in v5.18, BELL will mean +this character, and not U+0007. + +Unicode has taken steps to make sure that this sort of mistake does not +happen again. The Standard now includes all the generally accepted +names and abbreviations for control characters, whereas previously it +didn't (though there were recommended names for most of them, which Perl +used). This means that most of those recommended names are now +officially in the Standard. Unicode did not recommend names for the +four code points listed above between U+008E and U+008F, and in +standardizing them Unicode subtly changed the names that Perl had +previously given them, by replacing the final blank in each name by a +hyphen. Unicode also officially accepts names that Perl had deprecated, +such as FILE SEPARATOR. Now the only deprecated name is BELL. +Finally, Perl now uses the new official names instead of the old +(now considered obsolete) names for the first four code points in the +list above (the ones which have the parentheses in them). + +Now that the names have been placed in the Unicode standard, these kinds +of changes should not happen again, though corrections, such as to +U+2118, are still possible. + +Unicode also added some name abbreviations, which Perl now accepts: +SP for SPACE; +TAB for CHARACTER TABULATION; +NEW LINE, END OF LINE, NL, and EOL for LINE FEED; +LOCKING-SHIFT ONE for SHIFT OUT; +LOCKING-SHIFT ZERO for SHIFT IN; +and ZWNBSP for ZERO WIDTH NO-BREAK SPACE. + +More details on this version of Unicode are provided in +L. + +=head2 Added C + +This function is designed to replace the deprecated L +function. It includes an extra parameter to make sure it doesn't read +past the end of the input buffer. =head1 Security @@ -68,6 +161,13 @@ L section. [ List each security issue as a =head2 entry ] +=head2 Use C and not C + +The latter function is now deprecated because its API is insufficient to +guarantee that it doesn't read (up to 12 bytes in the worst case) beyond +the end of its input string. See +L. + =head1 Incompatible Changes XXX For a release on a stable branch, this section aspires to be: @@ -78,6 +178,82 @@ XXX For a release on a stable branch, this section aspires to be: [ List each incompatible change as a =head2 entry ] +=head2 Special blocks called in void context + +Special blocks (C, C, C, C, C) are now +called in void context. This avoids wasteful copying of the result of the +last statement [perl #108794]. + +=head2 The C pragma and regexp objects + +With C, regular expression objects returned by C are +now stringified as "Regexp=REGEXP(0xbe600d)" instead of the regular +expression itself [perl #108780]. + +=head2 Two XS typemap Entries removed + +Two presumably unused XS typemap entries have been removed from the +core typemap: T_DATAUNIT and T_CALLBACK. If you are, against all odds, +a user of these, please see the instructions on how to regain them +in L. + +=head2 Unicode 6.1 has incompatibilities with Unicode 6.0 + +These are detailed in L above. + +=head2 Changed returns for some properties in C + +The return values for C have been changed for some +properties to make the returned lists significantly smaller. This +allows those lists to be searched faster. + +This function was introduced earlier in the v5.15 series of releases, +and the API will not be considered stable until v5.16. + +See L for details on the new interface. + +=head2 C<$$> and C no longer emulate POSIX semantics under LinuxThreads + +The POSIX emulation of C<$$> and C under the obsolete +LinuxThreads implementation has been removed (the C<$$> emulation was +actually removed in v5.15.0). This only impacts users of Linux 2.4 and +users of Debian GNU/kFreeBSD up to and including 6.0, not the vast +majority of Linux installations that use NPTL threads. + +This means that C like C<$$> is now always guaranteed to +return the OS's idea of the current state of the process, not perl's +cached version of it. + +See the documentation for L<$$|perlvar/$$> for details. + +=head2 C<< $< >>, C<< $> >>, C<$(> and C<$)> are no longer cached + +Similarly to the changes to C<$$> and C the internal +caching of C<< $< >>, C<< $> >>, C<$(> and C<$)> has been removed. + +When we cached these values our idea of what they were would drift out +of sync with reality if someone (e.g. someone embedding perl) called +sete?[ug]id() without updating C. Having to deal with +this complexity wasn't worth it given how cheap the C +system call is. + +This change will break a handful of CPAN modules that use the XS-level +C, C, C or C variables. + +The fix for those breakages is to use C to +retrieve them (e.g. C), and not to assign to +C if you change the UID/GID/EUID/EGID. There is no longer +any need to do so since perl will always retrieve the up-to-date +version of those values from the OS. + +=head2 Which Non-ASCII characters get quoted by C and C<\Q> has changed + +This is unlikely to result in a real problem, as Perl does not attach +special meaning to any non-ASCII character, so it is currently +irrelevant which are quoted or not. This change fixes bug [perl #77654] and +bring Perl's behavior more into line with Unicode's recommendations. +See L. + =head1 Deprecations XXX Any deprecated features, syntax, modules etc. should be listed here. @@ -86,17 +262,11 @@ listed as an updated module in the L section. [ List each deprecation as a =head2 entry ] -=head2 Deprecated Modules +=head2 C -=over - -=item L - -Version::Requirements is now DEPRECATED, use CPAN::Meta::Requirements, -which is a drop-in replacement. It will be deleted from perl.git blead -in v5.17.0. - -=back +This function is deprecated because it could read beyond the end of the +input string. Use the new L +instead. =head1 Performance Enhancements @@ -109,13 +279,7 @@ may well be none in a stable release. =item * -Version declarations with the C keyword (e.g., C) are now -faster, as they enable features without loading F. - -=item * - -C is faster now, as it no longer iterates through magic that it -is not going to copy anyway. +XXX =back @@ -137,7 +301,8 @@ cribbed. =item * -XXX +The C PerlIO layer is no longer implemented by perl itself, but has +been moved out into the new L module. =back @@ -147,169 +312,146 @@ XXX =item * -L has been upgraded from version 1.10 to version 1.11. +L has been upgraded from version 0.03 to version 0.04. -It now deparses C correctly. It used to omit the -quotation marks, which did not work if the string were not a valid -identifier [perl #91416]. +List slices no longer modify items on the stack belonging to outer lists +[perl #109570]. -A similar bug also affected hash and array elements such as -C<< 'random string'->[0] >>, which would deparse as C<$random string[0]>. -This has been fixed. +=item * -Those same syntaxes used to drop the package name from variables beginning -with a punctuation mark, as in C<< "foo::]"->{$key} >>. This, too, has -been fixed. +L has been upgraded from version 1.33 to version 1.34. -B::Deparse no longer hangs when deparsing a program with stash -circularities, such as C [perl #91384]. +C now has a C method, corresponding to a new internal +field added in 5.15.4 [perl #108860]. -C used to be deparsed as C<$s[1]> if @s were a lexical variable -[perl #81424]. Similarly, C would be deparsed as C<$#s> for both -lexical and package variables. These has been fixed. +=item * -The C regular expression flags are no longer omitted. +L has been upgraded from version 1.24 to version 1.25. -Feature hints are now deparsed with C rather than C<%^H> -assignments. +It now puts a dot after the file and line number, just like errors from +C [perl #106538]. -A regression in 1.10 that caused C to disable strict mode -in obscure cases has been fixed. +=item * -Strict mode is now fully deparsed, including subs and vars [perl #24027]. +L has been upgraded from version 2.045 to version 2.049. -The global variables C<$(>, C<$|> and C<$)> are now deparsed with braces -(i.e., C<${(}>) in regular expressions [perl #86060]. +=item * -C blocks after C loops are now deparsed correctly, as they -were back in 0.67 (included with Perl 5.8.5) [perl #108224] +L has been upgraded from version 2.045 to version 2.049. -=item * +Include zlib 1.2.6 source -L has been upgraded from version 3.58 to version 3.59. +=item * -We no longer read from STDIN when the Content-Length is not set, preventing -requests with no Content-Length from freezing in some cases. This is consistent -with the CGI RFC 3875, and is also consistent with CGI::Simple. However, the old -behavior may have been expected by some command-line uses of CGI.pm. +L has been upgraded from version 2.046 to version 2.049. =item * -L has been upgraded from version 2.112621 to version 2.113640. +L has been upgraded from version 2.113640 to version 2.120351. -Version::Requirements has now been merged as CPAN::Meta::Requirements. +Work around a memory leak bug involving version objects in boolean context. =item * -L has been upgraded from version 0.9113 to version 0.9116. +L has been upgraded from version 0.005 to version 0.007. =item * -L has been upgraded from version 2.135_01 to version -2.135_03. +L has been upgraded from version 0.9116 to version 0.9118. -It can now dump vstrings [perl #101162]. +=item * -The nameless typeglob (C<*{""}>) is now dumped properly. +L has been upgraded from version 0.60 to version 0.62. =item * -L has been upgraded from version 1.26 to version 1.27. - -See the entry for splain in the L section, for the -changes. The diagnostics module and the splain utility are actually one -and the same. +L has been upgraded from version 1.824 to version 1.826. =item * -L has been upgraded from version 1.45 to version 1.46. +L has been upgraded from version 1.27 to version 1.28. -It no longer produces "used once" warnings when the C and C -methods are called while the main program is still compiling (e.g., from -within a BEGIN block) [perl #107410] [rt.cpan.org #50315]. +When searching for F, it no longer uses paths that were only +relevant on Perl 5.004 and earlier. =item * -L has been upgraded from version 3.9 to version 4.0. +L has been upgraded from version 3.12 to version 3.15. -=item * +The new version comes with important tools for sharing typemaps between +different CPAN distributions. -L has been upgraded from version 1.16 to version 1.17. +=item * -C no longer calls C on the class, but uses -another means to determine whether the object has overloading. It was -never correct for it to call C, as overloading does not respect -AUTOLOAD. So classes that autoload methods and implement C no longer -have to account for overloading [perl #40333]. +L has been upgraded from version 2.21 to version 2.23. -A warning is now produced for invalid arguments. See L. +It no longer emits warnings when copying files with newlines in their names +[perl #109104]. =item * -L has been upgraded from version 5.0150036 to version 5.0150037. +L has been upgraded from version 0.72 to version 0.76. =item * -L has been upgraded from version 0.12 to version 0.13. +L has been upgraded from version 1.58 to version 1.59. -(This is the module that implements C<< open $fh, '>', \$scalar >>.) +This avoids a new core warning. -It no longer assumes during C that $scalar is a string internally. -If it didn't crash, it was close to doing so [perl #92706]. +=item * + +L has been upgraded from version 1.000007 to version 1.000009. + +Adds C method to generate a CPAN META provides data structure +correctly; use of C is discouraged. -Printing to an in-memory handle now works if the $scalar holds a reference, -stringifying the reference before modifying it. References used to be -treated as empty strings. +=item * -Printing to an in-memory handle no longer crashes if the $scalar happens to -hold a number internally, but no string buffer. +L has been upgraded from version 1.4401 to version 1.4402. =item * -L has been upgraded from version 1.12 to 1.13 +L has been upgraded from version 5.0150038 to version 5.0150039. =item * -L has been upgraded from version 1.27 to version 1.29. +L has been upgraded from version 1.04 to version 1.05. -C and C now run signals handle before returning, as the -whole point of these two functions is to wait until a signal has -arrived, and then return I it has been triggered. Delayed, or -"safe", signals were preventing that from happening, possibly resulting in -race conditions [perl #107216]. -C is now a direct call into the underlying OS C -function, instead of being a Perl wrapper on C. C -now returns the correct value on Win32 (I the file descriptor). -C C and C and C now -dispatch safe signals immediately before returning to their caller. +F is now generated at perl build time from annotations in +F. This will ensure that L and L +remain in synchronisation. =item * -L has been upgraded from version 3.15_01 to version 3.15_15. +L has been upgraded from version 1.37 to version 1.51. =item * -L has been upgraded from version 0.26 to version 0.30. +L has been upgraded from version 1.07 to version 1.08. + +Its C method now supports L event loops, and not just +L. A more general mechanism has been proposed, so this may be reverted +before Perl 5.16 [perl #108470]. =item * -L has been upgraded from version 0.96 to version 0.98. +L has been upgraded from version 1.97 to version 1.98. =item * -L has been upgraded from version 0.37 to version 0.38. -This changes the output of C for the Name_Alias property -to reflect the changes that are planned for Unicode 6.1, so that there -won't be a format change when upgrading to 6.1. Briefly, a second -component of each alias is added that gives the type of alias it is. -Examples are at L. +L has been upgraded from version 1.9724 to version 1.9725. + +C no longer corrupts the Perl stack. =item * -L has been upgraded from version 0.101020 to version 0.101021. +L has been upgraded from version 0.39 to 0.40. -Version::Requirements is now DEPRECATED, use CPAN::Meta::Requirements, -which is a drop-in replacement. +The only change is to fix a formatting error in the Pod. + +=item * + +L has been upgraded from version 0.101021 to version 0.101022. =back @@ -332,6 +474,12 @@ file and be sure to link to the appropriate page, e.g. L. XXX Changes which create B files in F go here. +=head3 L + +The new manual describes the XS typemapping mechanism in unprecedented +detail and combines new documentation with information extracted from +L and the previously unofficial list of all core typemaps. + =head3 L XXX Description of the purpose of the new file here @@ -342,37 +490,13 @@ XXX Changes which significantly change existing files in F go here. However, any changes to F should go in the L section. -=head3 L - -=over 4 - -=item * - -C treats a 0 mode as a special case, that prevents a nonexistent -file from being created. This has been the case since Perl 5.000, but was -never documented anywhere. Now the perlfunc entry mentions it -[perl #90064]. - -=item * - -The entry for C has been rewritten. It is now far clearer than -before. - -=back - -=head3 L and L +=head3 L =over 4 =item * -Documentation of the smartmatch operator has been reworked and moved from -perlsyn to perlop where it belongs. - -=item * - -Documentation of the ellipsis statement (C<...>) has been reworked and -moved from perlop to perlsyn. +XXX Description of the change here =back @@ -395,23 +519,15 @@ include any changes in L that reconcile it to the C code. =head2 New Diagnostics +XXX Newly added diagnostic messages go here + =head3 New Errors =over 4 =item * -L - -This error occurs when C tries to set C<@DB::args> but finds it -tied. Before this error was added, it used to crash instead. - -=item * - -L - -This error is part of a safety check that the C operator does before -tying a special array like C<@_>. You should never see this message. +XXX L =back @@ -421,24 +537,7 @@ tying a special array like C<@_>. You should never see this message. =item * -L - -The long-deprecated C now also warns for package variables. -Previously it only issued a warning for lexical variables. - -=item * - -L - -C<\E> does nothing unless preceded by C<\Q>, C<\L> or C<\U>. - -=item * - -L - -This warning, in the "overload" category, is produced when the overload -pragma is given an argument it doesn't recognize, presumably a mistyped -operator. +XXX L =back @@ -454,23 +553,6 @@ XXX Describe change here =back -=head2 Removals - -=over 4 - -=item * - -"sort is now a reserved word" - -This error used to occur when C was called without arguments, followed by C<;> or C<)>. (E.g., C would die, but C<{sort}> was -OK.) This error message was added in Perl 3 to catch code like -C which would no longer work. More than two decades later, -this message is no longer appropriate. Now C without arguments is -always allowed, and returns an empty list, as it did in those cases where -it was already allowed [perl #90030]. - -=back - =head1 Utility Changes XXX Changes to installed programs such as F and F go @@ -480,35 +562,13 @@ here. Most of these are built within the directories F and F. entries for each change Use L with program names to get proper documentation linking. ] -=head3 L +=head3 L =over 4 =item * -splain no longer emits backtraces with the first line number repeated. -This: - - Uncaught exception from user code: - Cannot fwiddle the fwuddle at -e line 1. - at -e line 1 - main::baz() called at -e line 1 - main::bar() called at -e line 1 - main::foo() called at -e line 1 - -has become this: - - Uncaught exception from user code: - Cannot fwiddle the fwuddle at -e line 1. - main::baz() called at -e line 1 - main::bar() called at -e line 1 - main::foo() called at -e line 1 - -=item * - -Some error messages consist of multiple lines that are listed as separate -entries in L. splain has been taught to find the separate -entries in these cases, instead of simply failing to find the message. +XXX =back @@ -525,11 +585,7 @@ L section, instead. =item * -The Pod files for the perl FAQ, L, L and L -are once again correctly installed in the same directory as the other core -Pods. - -=for 5.16.0 This isn't a regression from 5.14.x, so don't mention this. +XXX =back @@ -547,11 +603,22 @@ that they represent may be covered elsewhere. =item * -F now tests that various utility scripts compile cleanly. -During development, this avoids the embarrassment of inadvertently pushing a -commit which breaks code which isn't otherwise tested by the regression test -suite. For example, F and F, needed by -C, are tested here. +F has been added, to avoid the problem of +C passing 100%, but the subsequent git commit causing +F to fail, because it uses a "new" e-mail address. + +This test is only run if one is building inside a git checkout, B one +has made local changes. Otherwise it's skipped. + +=item * + +F has been added, to test that changes to +F do not inadvertently break the build of L. + +=item * + +The test suite for typemaps has been extended to cover a larger fraction of +the core typemaps. =back @@ -616,26 +683,7 @@ be noted as well. =item * -There are now feature bundle hints in C (C<$^H>) that version -declarations use, to avoid having to load F. One setting of -the hint bits indicates a "custom" feature bundle, which means that the -entries in C<%^H> still apply. F uses that. - -The C macro is defined in F along with other -hints. Other macros for setting and testing features and bundles are in -the new F. C (which has moved to -F) is no longer used throughout the codebase, but more specific -macros, e.g., C, that are defined in F. - -=item * - -F is now a generated file, created by the new -F script, which also generates F. - -=item * - -Tied arrays are now always C. If C<@_> or C is tied, it -is reified first, to make sure this is always the case. +XXX =back @@ -649,324 +697,104 @@ L. =over 4 -=item * "b . COND" in the debugger has been fixed - -Breaking on the current line with C was broken by previous work and -has now been fixed. - -=item * Tying C<%^H> - -Tying C<%^H> no longer causes perl to crash or ignore -the contents of C<%^H> when entering a compilation -scope [perl #106282]. - -=item * C<~> on vstrings - -The bitwise complement operator (and possibly other operators, too) when -passed a vstring would leave vstring magic attached to the return value, -even though the string had changed. This meant that -C<< version->new(~v1.2.3) >> would create a version looking like "v1.2.3" -even though the string passed to C<< version->new >> was actually -"\376\375\374". This also caused L to deparse C<~v1.2.3> -incorrectly, without the C<~> [perl #29070]. - -=item * Vstrings blowing away magic - -Assigning a vstring to a magic (e.g., tied, C<$!>) variable and then -assigning something else used to blow away all the magic. This meant that -tied variables would come undone, C<$!> would stop getting updated on -failed system calls, C<$|> would stop setting autoflush, and other -mischief would take place. This has been fixed. - -=item * C and tied hashes - -The C XS function now works on tied hashes, instead of crashing or -returning an empty hash. - -=item * Hashes will null elements - -It is possible from XS code to create hashes with elements that have no -values. Perl itself sometimes creates such hashes, but they are rarely -visible to Perl code. The hash element and slice operators used to crash -when handling these in lvalue context. These have been fixed. They now -produce a "Modification of non-creatable hash value attempted" error -message. - -=item * No warning for C - -When one writes C, which used to work in Perl 4, a -"Precedence problem" warning is produced. This warning used erroneously to -apply to fully-qualified bareword handle names not followed by C<||>. This -has been corrected. - -=item * C with 0 or 1 argument -would sometimes return a name that could not be used to refer to the -filehandle, or sometimes it would return C even when a filehandle -was selected. Now it returns a typeglob reference in such cases. - -=item * C and tied variables - -C no longer ignores FETCH on tied variables as it used -to most of the time [perl #97956]. - -=item * C and numbers - -C no longer ignores some arguments that it thinks are -numeric, while treating others as filehandle names. It is now consistent -for flat scalars (i.e., not references). - -=item * Lvalue subs and strict mode - -Lvalue sub calls that are not determined to be such at compile time -(C<&$name> or &{"name"}) are no longer exempt from strict refs if they -occur in the last statement of an lvalue subroutine [perl #102486]. - -=item * Non-lvalue sub calls in potentially lvalue context - -Sub calls whose subs are not visible at compile time, if -they occurred in the last statement of an lvalue subroutine, -would reject non-lvalue subroutines and die with "Can't modify non-lvalue -subroutine call" [perl #102486]. - -Non-lvalue sub calls whose subs I visible at compile time exhibited -the opposite bug. If the call occurred in the last statement of an lvalue -subroutine, there would be no error when the lvalue sub was called in -lvalue context. Perl would blindly assign to the temporary value returned -by the non-lvalue subroutine. - -=item * AUTOLOADing lvalue subs - -C routines used to take precedence over the actual sub being -called (i.e., when autoloading wasn't needed), for sub calls in lvalue or -potential lvalue context, if the subroutine was not visible at compile -time. - -=item * C and tied C<@DB::args> - -C sets C<@DB::args> to the subroutine arguments when called from -the DB package. It used to crash when doing so if C<@DB::args> happened to -be tied. Now it croaks instead. - -=item * Tying C<@_> - -Under debugging builds, this code: - - sub TIEARRAY{bless[]} - sub { - tie @_, ""; - \@_; - }->(1); - -use to produce an "av_reify called on tied array" warning. It doesn't any -more. - -=item * Unrecognised switches on C<#!> line - -If a switch, such as B<-x>, that cannot occur on the C<#!> line is used -there, perl dies with "Can't emulate...". - -It used to produce the same message for switches that perl did not -recognise at all, whether on the command line or the C<#!> line. - -Now it produces the "Unrecognized switch" error message [perl #104288]. - -=item * C and SIGCHLD - -C now temporarily blocks the SIGCHLD signal handler, to prevent the -signal handler from stealing the exit status [perl #105700]. - -=item * Deleting methods via C - -Deletion of methods via C syntax used to update -method caches if called in void context, but not scalar or list context. -Now it always updates those caches. - -=item * Hash element deletion and destructors - -When hash elements are deleted in void context, the internal hash entry is -now freed before the value is freed, to prevent destructors called by that -latter freeing from seeing the hash in an inconsistent state. It was -possible to cause double-frees if the destructor freed the hash itself -[perl #100340]. - -=item * C<(s)printf>'s %n formatting code - -The %n formatting code, which causes the number of characters to be -assigned to the next argument to C or C now actually -assigns the number of characters, instead of the number of bytes. - -It also works now with special lvalue functions like C and with -nonexistent hash and array elements [perl #103492]. - -=item * Typeglobs and threads - -Typeglobs returned from threads are no longer cloned if the parent thread -already has a glob with the same name. This means that returned -subroutines will now assign to the right package variables [perl #107366]. - -=item * C - -In Perl 5.14, C was changed to create a new variable not tied to -anything, even if $_ was tied before that. But, due to an oversight, it -would still call FETCH once on a tied $_ before replacing it with the new -variable. This has been fixed [perl #105912]. - -=item * Returning tied variables - -When returning a value from a non-lvalue subroutine, Perl copies the value. -Sometimes it cheats for the sake of speed, and does not copy the value if -it makes no observable difference. This optimisation was erroneously -allowing the copy to be skipped on tied variables, causing a difference in -behaviour depending on the tied variable's reference count. This has been -fixed [perl #95548]. - -=item * C<{@a = sort}> no longer crashes - -This particular piece of code (C with no arguments assigned to an -array, inside a block with no C<;>) started crashing in an earlier 5.15.x -release. It has been fixed. - -=item * C and read-only scalars - -C now refuses to modify read-only scalars [perl #91850]. - -=item * C with undefined mode - -C now only warns once, rather than three times, if the mode -argument is C [perl #90064]. - -=item * Freeing an aggregate during list assignment - -If list assignment to a hash or array triggered destructors that freed the -hash or array itself, a crash would ensue. This is no longer the case -[perl #107440]. - -=item * Confused internal bookkeeping with @ISA arrays - -Creating a weak reference to an @ISA array or accessing the array index -(C<$#ISA>) could result in confused internal bookkeeping for elements -subsequently added to the @ISA array. For instance, creating a weak -reference to the element itself could push that weak reference on to @ISA; -and elements added after use of C<$#ISA> would be ignored by method lookup -[perl #85670]. - -=item * DELETE on scalar ties - -Tying an element of %ENV or C<%^H> and then deleting that element would -result in a call to the tie object's DELETE method, even though tying the -element itself is supposed to be equivalent to tying a scalar (the element -is, of course, a scalar) [perl #67490]. - -=item * Freeing $_ inside C or C - -Freeing $_ inside a C or C block or a code block embedded in a -regular expression used to result in double frees [perl #92254, #92256]. - -=item * Warnings with C<+=> - -The C<+=> operator does not usually warn when the left-hand side is -C, but it was doing so for tied variables. This has been fixed -[perl #44895]. - -=item * Tying and autovivification +=item * -When Perl autovivifies an element of a tied array or hash (which entails -calling STORE with a new reference), it now calls FETCH immediately after -the STORE, instead of assuming that FETCH would have returned the same -reference. This can make it easier to implement tied objects [perl #35865, #43011]. +C<~~> now correctly handles the precedence of Any~~Object, and is not tricked +by an overloaded object on the left-hand side. -=item * C<@&> and C<$&> +=item * -Mentioning a variable named "&" other than C<$&> (i.e., C<@&> or C<%&>) no -longer stops C<$&> from working. The same applies to variables named "'" -and "`" [perl #24237]. +C no longer warns about unopened filehandles [perl #71002]. -=item * Stacked filetests +=item * -C<-T> and C<-B> now work when stacked up with other filetest operators -[perl #77388]. +C on an unopened filehandle now warns consistently, instead of +skipping the warning at times. -=item * Filetests and stat buffers +=item * -Perl keeps several internal variables to keep track of the last stat -buffer, from which file(handle) it originated, what type it was, and -whether the last stat succeeded. +A change in an earlier 5.15 release caused warning hints to propagate into +C. This has been fixed [rt.cpan.org #72767]. -There were various cases where these could get out of synch, resulting in -inconsistent or erratic behaviour in edge cases (every mention of C<-T> -applies to C<-B> as well): +=item * -=over +Starting with 5.12.0, Perl used to get its internal bookkeeping muddled up +after assigning C<${ qr// }> to a hash element and locking it with +L. This could result in double frees, crashes or erratic +behaviour. =item * -C<-T I>, even though it does a C, was not resetting the last -stat type, so an C following it would merrily return the wrong -results. Also, it was not setting the success status. +In 5.15.7, some typeglobs in the CORE namespace were made read-only by +mistake. This has been fixed [rt.cpan.org #74289]. =item * -Freeing the handle last used by C or a filetest could result in -S> using an unrelated handle. +C<-t> now works when stacked with other filetest operators [perl #77388]. =item * -C with an IO reference (as returned by C<*STDIO{IO}>, for instance) -would not reset the stat type. +Stacked filetest operators now only call FETCH once on a tied argument. =item * -C with an IO reference was not recording the filehandle for -S> to use. +C would sometimes refuse to match at the end of a string that ends +with "\n". This has been fixed [perl #109206]. =item * -The presence of fatal warnings could cause the stat buffer not to be reset -for a filetest operator on an unopened filehandle or C<-l> on any handle. +C and C now match identically (when not +under a differing locale). This fixes a regression introduced in 5.14 +in which the first expression could match characters outside of ASCII, +such as the KELVIN SIGN. =item * -Fatal warnings would stop C<-T> from setting C<$!>. +Method calls whose arguments were all surrounded with C or C +(as in C<<$object->method(my($a,$b)) >>) used to force lvalue context on +the subroutine. This would prevent lvalue methods from returning certain +values. Due to lvalue fixes earlier in the 5.15.x series, it would also +prevent non-lvalue methods from being called [perl #109264]. + +=for comment +This bug I affect earlier stable releases. It is just the last +sentence that does not apply to 5.14. =item * -When the last stat was on an unreadable file, C<-T _> is supposed to -return C, leaving the last stat buffer unchanged. But it was -setting the stat type, causing C to stop working. +The C C function no longer tries to modify its argument, +resulting in errors [perl #108994]. =item * -C<-T I> was not resetting the internal stat buffers for -unreadable files. +C now works properly with magical variables. -=back - -These have all been fixed. +=item * -=item * C +C now works properly non-PVs. -An earlier 5.15.x release caused this construct to stop the C<%!> hash -from working. Likewise C and C caused -C<%+> and C<%->, respectively, to stop working. This has been fixed. +=item * -=item * C<-T _> with no preceding C +C and C now use locale rules under +C when the platform supports that. Previously, they used +the platform's native character set. -This used to produce a confusing "uninitialized" warning, even though there -is no visible uninitialized value to speak of. +=item * -=item * C> and fstat failures +A regression introduced in 5.13.6 was fixed. This involved an inverted +bracketed character class in a regular expression that consisted solely +of a Unicode property, that property wasn't getting inverted outside the +Latin1 range. -If the operating system's C function failed, C would warn -about an unopened handle, even though that was not the case. This has been -fixed. +=item * -=item * C> +C now quotes consistently the same non-ASCII characters under +C, regardless of whether the string is +encoded in UTF-8 or not, hence fixing the last vestiges (we hope) of the +infamous L. [perl #77654]. -C is documented to fall back to C (with a warning) when given -a filehandle. When passed an IO reference, it was actually doing the -equivalent of S> and ignoring the handle. +Which of these code points is quoted has changed, based on Unicode's +recommendations. See L for details. =back @@ -998,7 +826,7 @@ here. XXX Generate this with: - perl Porting/acknowledgements.pl v5.15.6..HEAD + perl Porting/acknowledgements.pl v5.15.7..HEAD =head1 Reporting Bugs