X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/531ba486567a7e92e8fadc6d5c89b5c3e2386194..ae4de4099e764f5284fc664e66a465483a959592:/pod/perldelta.pod diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 8731d74..3cc778b 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -1,27 +1,26 @@ =encoding utf8 =for comment -This has been completed up to 7c5c3d9b except for: -a1da11a30dfa4f3543dcab00834ff535202f5085 (GNU/Hurd hints) -f0d0a205cc02c769ca48d6df00f3eea304ff91d8 (similar) -a058c51605ec2d38bf37f2e2c4f81926e3a90ea9 (Leon Timmermans; setresgid) -928b2f01177c40be013139c657d79c631790a916 (Reini Urban; Errno) +This has been completed up to 5dca8ed9d28, 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 [ 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.5 +perldelta - what is new for perl v5.15.6 =head1 DESCRIPTION -This document describes differences between the 5.15.4 release and -the 5.15.5 release. +This document describes differences between the 5.15.5 release and +the 5.15.6 release. -If you are upgrading from an earlier release such as 5.15.3, first read -L, which describes differences between 5.15.3 and -5.15.4. +If you are upgrading from an earlier release such as 5.15.4, first read +L, which describes differences between 5.15.4 and +5.15.5. =head1 Notice @@ -33,32 +32,32 @@ XXX New core language features go here. Summarise user-visible core language enhancements. Particularly prominent performance optimisations could go here, but most should go in the L section. -=head2 More consistent C +[ List each enhancement as a =head2 entry ] -The C operator sometimes treats a string argument as a sequence of -characters and sometimes as a sequence of bytes, depending on the internal -encoding. The internal encoding is not supposed to make any difference, -but there is code that relies on this inconsistency. +=head2 C<__SUB__> -Under C and higher, the C and C -features resolve this. The C feature causes C -to treat the string always as Unicode. The C features provides -a function, itself called C, which evaluates its argument always -as a string of bytes. +The new C<__SUB__> token, available under the "current_sub" feature (see +L) or C, returns a reference to the current subroutine, +making it easier to write recursive closures. -These features also fix oddities with source filters leaking to outer -dynamic scopes. +=head2 New option for the debugger's B command -See L for more detail. +The B command in the debugger, which toggles tracing mode, now accepts a +numerical argument that determines how many levels of subroutine calls to +trace. -=head2 C<$[> is back +=head2 Return value of C -The C<$[> variable is back again, but is now implemented as a module, so -programs that do not mention it (i.e., most of them), will not incur any -run-time penalty. In a later release in the 5.15 branch it might be -disabled in the scope of C. +The value returned by C 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. -The new implementation has some bug fixes. See L. +=head2 Lvalue C + +C 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 is only supposed to be +setting scalar context, not changing lvalueness [perl #24346]. =head1 Security @@ -66,7 +65,22 @@ XXX Any security-related notices go here. In particular, any security vulnerabilities closed should be noted here rather than in the L section. -[ List each security issue as a =head2 entry ] +=head2 C + +The XS-callable function C 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 functions, as well as C, 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, C, and +C. =head1 Incompatible Changes @@ -75,34 +89,131 @@ XXX For a release on a stable branch, this section aspires to be: There are no changes intentionally incompatible with 5.XXX.XXX If any exist, they are bugs and reports are welcome. -=head2 Certain deprecated Unicode properties are no longer supported by default +[ List each incompatible change as a =head2 entry ] + +=head2 C> + +As of this release, version declarations like C 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 and higher continue to enable strict, but explicit +C and C 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 has been +seen. Version declarations below 5.10 now enable the ":default" feature +set. This does not actually change the behaviour of C, because +features added to the ":default" set are those that were traditionally +enabled by default, before they could be turned off. -Perl should never have exposed certain Unicode properties that are used -by Unicode internally and not meant to be publicly available. Use of -these has generated deprecated warning messages since Perl 5.12. The -removed properties are Other_Alphabetic, -Other_Default_Ignorable_Code_Point, Other_Grapheme_Extend, -Other_ID_Continue, Other_ID_Start, Other_Lowercase, Other_Math, and -Other_Uppercase. +C<$[> is now disabled under C. It is part of the default +feature set and can be turned on or off explicitly +with C. + +=head2 C + +The change to C in 5.15.2 has been reverted. It now +returns a stringified version object once more. + +=head2 C lvalue revamp + +When C is called in lvalue or potential lvalue context with two or +three arguments, a special lvalue scalar is returned that modifies the +original string (the first argument) when assigned to. + +Previously, the offsets (the second and third arguments) passed to +C would be converted immediately to match the string, negative +offsets being translated to positive and offsets beyond the end of the +string being truncated. + +Now, the offsets are recorded without modification in the special lvalue +scalar that is returned, and the original string is not even looked at by +C itself, but only when the returned lvalue is read or modified. + +These changes result in several incompatible changes and bug fixes: + +=over + +=item * -Perl may be recompiled to include any or all of them; instructions are -given in -L. +If the original string changes length after the call to C but +before assignment to its return value, negative offsets will remember +their position from the end of the string, affecting code like this: + my $string = "string"; + my $lvalue = \substr $string, -4, 2; + print $lvalue, "\n"; # prints "ri" + $string = "bailing twine"; + print $lvalue, "\n"; # prints "wi"; used to print "il" + +The same thing happens with an omitted third argument. The returned lvalue +will always extend to the end of the string, even if the string becomes +longer. + +=item * + +Tied (and otherwise magical) variables are no longer exempt from the +"Attempt ot use reference as lvalue in substr" warning. + +=item * + +That warning now occurs when the returned lvalue is assigned to, not when +C itself is called. This only makes a difference if the return +value of C is referenced and assigned to later. + +=item * + +The order in which "uninitialized" warnings occur for arguments to +C has changed. + +=item * + +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. If the +lvalue is only read, not written to, it is now just a warning, as with +rvalue C. + +=item * + +C assignments no longer call FETCH twice if the first argument is a +tied variable, but just once. + +=back -=head2 Dereferencing IO thingies as typeglobs +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. -The C<*{...}> operator, when passed a reference to an IO thingy (as in -C<*{*STDIN{IO}}>), creates a new typeglob containing just that IO object. +=head2 Return value of C -Previously, it would stringify as an empty string, but some operators would -treat it as undefined, producing an "uninitialized" warning. +C returns C in scalar context or an empty list in list context +when there is a run-time error. For syntax errors (when C 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]. -Having a typeglob appear as an empty string is a side effect of the -implementation that has caused various bugs over the years. +=head2 Anonymous handles -The solution was to make it stringify like a normal anonymous typeglob, -like those produced by C{bar}, ...)> [perl #96326]. +Automatically generated file handles are now named __ANONIO__ when the +variable name cannot be determined, rather than $__ANONIO__. + +=head2 XS API tweak + +The C C-level function, added in 5.15.4, now has a +C parameter. =head1 Deprecations @@ -112,19 +223,6 @@ listed as an updated module in the L section. [ List each deprecation as a =head2 entry ] -=head2 Don't read the Unicode data base files in F - -It is now deprecated to directly read the Unicode data base files. -These are stored in the F directory. Instead, you should -use the new functions in L. These provide a stable API, -and give complete information. (This API is, however, subject to change -somewhat during the 5.15 development cycle, as we gain experience and -get feedback from using it.) - -Perl may at some point in the future change or remove the files. The -file most likely for applications to have used is F. -L can be used to get at its data instead. - =head1 Performance Enhancements XXX Changes which enhance performance without changing behaviour go here. There @@ -136,12 +234,29 @@ may well be none in a stable release. =item * -Due to changes in L, Perl's C function and its -C<< <...> >> equivalent are now much faster. The splitting of the pattern -into words has been rewritten in C, resulting in speed-ups of 20% in some -cases. +Perl 5.12.0 sped up the destruction of objects whose classes define empty +C methods (to prevent autoloading), simply by not calling such +empty methods. This release takes this optimisation a step further, by not +calling any C method that begins with an C statement. +This can be useful for destructors that are only used for debugging: -This does not affect VMS, as it does not use File::Glob. + use constant DEBUG => 1; + sub DESTROY { return unless DEBUG; ... } + +Constant-folding will reduce the first statement to C if DEBUG is +set to 0, triggering this optimisation. + +=item * + +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 modifies the original string itself. =back @@ -163,7 +278,7 @@ cribbed. =item * -L -- this new module implements the C<$[> variable. +XXX =back @@ -173,125 +288,194 @@ L -- this new module implements the C<$[> variable. =item * -L has been upgraded from version 0.56 to version 0.58. +L has been upgraded from version 1.80 to version 1.82. + +Adjustments to handle files >8gb (>0777777777777 octal) and a feature to +return the MD5SUM of files in the archive. =item * -L has been upgraded from version 1.08 to 1.08. +L has been upgraded from version 5.71 to version 5.72. -It now correctly deparses C, C and slices of empty -lists. +=item * + +L has been upgraded from version 1.16 to version 1.17. =item * -L has been upgraded from version 3.55 to version 3.58. +L 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 + +C, 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 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 and C + +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 and C that do not follow the +looks-like-a-function rule are now deparsed correctly with parentheses in +the right place. + +Similarly, C, which I 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 + +C, C and other functions that autovivify handles used to omit +C from C. + +=item Negated single-letter subroutine calls + +Negated subroutine calls like C<- f()> and C<-(f())> were being deparsed +as file test operators. + +=item C<&{&}> -Use public and documented FCGI.pm API in CGI::Fast -CGI::Fast was using an FCGI API that was deprecated and removed from -documentation more than ten years ago. Usage of this deprecated API with -FCGI >= 0.70 or FCGI <= 0.73 introduces a security issue. -L -L +C<&{&}> and C<& &>, which are calls to the subroutine named "&", believe it +or not, were being deparsed as C<&&>. + +=back =item * -L has been upgraded from version 2.037 to version 2.040. +L has been upgraded from version 2.042 to version 2.045. =item * -L has been upgraded from version 2.037 to version 2.040. +L has been upgraded from version 2.042 to version 2.045. =item * -L has been upgraded from version 2.037 to version 2.040. +L has been upgraded from version 0.004 to version 0.005. =item * -L has been upgraded from version 0.9111 to version 0.9112. +L has been upgraded from version 0.9112 to version 0.9113. =item * -L has been upgraded from version 0.58 to version 0.60. +L 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 +in their names. =item * -L has been upgraded from version 5.62 to version 5.63. +L has been upgraded from version 5.63 to version 5.70. -Added code to allow very large data inputs all at once, which had previously been -limited to several hundred megabytes at a time +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 has been upgraded from version 6.61_01 to version 6.63_02. +L has been upgraded from version 5.65 to version 5.66. + +It no longer tries to localise C<$_> unnecessarily. =item * -L has been upgraded from version 1.13 to 1.14. +L has been upgraded from version 3.05 to version 3.07. + +=item * -It has a new C<:bsd_glob> export tag, intended to replace C<:glob>. Like -C<:glob> it overrides C with a function that does not split the glob -pattern into words, but, unlike C<:glob>, it iterates properly in scalar -context, instead of returning the last file. +L has been upgraded from version 2.042 to version 2.045. -There are other changes affecting Perl's own C operator (which uses -File::Glob internally, except on VMS). See L -and L. +Added zipdetails utility. =item * -L has been upgraded from version 0.013 to version 0.016. +L has been upgraded from version 3.18 to version 3.20. -Adds additional shorthand methods for all common HTTP verbs, -a C method for POST-ing x-www-form-urlencoded data and -a C utility method. +The code2XXX, XXX2code, all_XXX_codes, and all_XXX_names functions now support retired codes. +All codesets may be specified by a constant or by their name now. Previously, +they were specified only by a constant. +The alias_code function exists for backward compatibility. It has been replaced by rename_country_code. +The alias_code function will be removed sometime after September, 2013. +All work is now done in the central module (Locale::Codes). Previously, some was still done in the +wrapper modules (Locale::Codes::*) but that is gone now. +Added Language Family codes (langfam) as defined in ISO 639-5. =item * -L has been upgraded from version 5.0150035 to version 5.0150036. +L has been uprgaded from version 0.06 to version 0.08. + +=item * + +L has been upgraded from version 0.59 to version 0.60. + +Added another LaTeX escape: --- => -{}-{}- + +Pod::LaTeX doesn't handle -- in PODs specially, passing it directly to +LaTeX, which then proceeds to replace it with a single -. This patch +replaces ----- with -{}-{}-{}-{}- =item * -L as been upgraded from version 1.94_01 to 1.94_02. +L has been upgraded from version 1.26 to version 1.27. -It has new functions and constants for handling IPv6 sockets: +It no longer produces a "Constant subroutine TCSANOW redefined" warning on +Windows. - pack_ipv6_mreq - unpack_ipv6_mreq - IPV6_ADD_MEMBERSHIP - IPV6_DROP_MEMBERSHIP - IPV6_MTU - IPV6_MTU_DISCOVER - IPV6_MULTICAST_HOPS - IPV6_MULTICAST_IF - IPV6_MULTICAST_LOOP - IPV6_UNICAST_HOPS - IPV6_V6ONLY +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 has been upgraded from version 2.32 to 2.33. +L has been upgraded from version 1.94_02 to version 1.97. + +=item * -The ability to add a fake entry to %INC to prevent Log::Agent from loading -has been restored. In version 2.27 (included with perl 5.14.0), Storable -starting producing an error instead. +L has been upgraded from version 1.85 to version 1.86. =item * -L has been upgraded from version 0.80 to version 0.84. +L has been upgraded from version 0.85 to version 0.87. -Locales updated to CLDR 2.0: mk, mt, nb, nn, ro, ru, sk, sr, sv, uk -Newly supported locales: fa, ml, mr, or, pa, si, si__dictionary, -sr_Latn, sv__reformed, ta, te, th, ur, wae. +Tailored compatibility ideographs as well as unified ideographs for +the locales: ja, ko, zh__big5han, zh__gb2312han, zh__pinyin, zh__stroke. + +Now Locale/*.pl files are searched in @INC. =item * -L has been upgraded from version 0.36 to version 0.37. -This adds four new functions: C, and -C which are used to find all the Unicode-approved -synonyms for property names, or to convert from one name to another; -C which returns all the code points matching a given -Unicode binary property; and C which returns the complete -specification of a given Unicode property. +L has been upgraded from version 1.10 to version 1.11. + +Documentation change clarifies return values from UNIVERSAL::VERSION. =back @@ -301,7 +485,13 @@ specification of a given Unicode property. =item * -XXX +Changing the case of a UTF-8 encoded string under C 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 for more details, including the deficiencies of this +scheme. =back @@ -324,13 +514,16 @@ XXX Changes which significantly change existing files in F go here. However, any changes to F should go in the L section. -=head3 L +=head3 L =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. =back @@ -371,11 +564,7 @@ XXX L =item * -L<$[ used in %s (did you mean $] ?)|perldiag/"$[ used in %s (did you mean $] ?)"> - -This new warning exists to catch the mistaken use of C<$[> in version -checks. C<$]>, not C<$[>, contains the version number. C<$[> in a numeric -comparison is almost always wrong. +XXX L =back @@ -387,7 +576,20 @@ XXX Changes (i.e. rewording) of diagnostic messages go here =item * -XXX Describe change here +Redefinition warnings for constant subroutines used to be mandatory, even +occurring under C. Now they respect the L pragma. + +=item * + +The "Attempt to free non-existent shared string" has had the spelling of +"non-existent" corrected to "nonexistent". It was already listed with the +correct spelling in L. + +=item * + +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. =back @@ -400,16 +602,14 @@ 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 * -F, used by the build process to build L, has been -refactored and simplified. It now only contains code to build L; -the code to regenerate Makefiles has been moved to F. -It's a bug if this change has any material affect on the build process. +L displays information about the internal record structure of the zip file. +It is not concerned with displaying any details of the compressed data stored in the zip file. =back @@ -426,7 +626,21 @@ L section, instead. =item * -XXX +F is now build by F, instead of being shipped +with the distribution. Its list of manpages is now generated (and therefore +current). See also RT #103202 for an unresolved related issue. + +=item * + +Perl 5.15.5 had a bug in its installation script, which did not install +F. 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 @@ -444,7 +658,10 @@ that they represent may be covered elsewhere. =item * -XXX +The F and F scripts for testing C have been +moved under F, where they were originally. They had been moved +under F along with the substitution tests when that directory was +created. =back @@ -489,11 +706,27 @@ and compilation changes or changes in portability/compatibility. However, changes within modules for platforms should generally be listed in the L section. +=head3 VMS + =over 4 -=item XXX-some-platform +=item * -XXX +A link-time error on VMS versions without C 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 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 @@ -509,7 +742,7 @@ be noted as well. =item * -C is now reference-counted. +XXX =back @@ -525,129 +758,193 @@ L. =item * -Perl now holds an extra reference count on the package that code is -currently compiling in. This means that the following code no longer crashes [perl #101486]: +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|(?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. + +=item * + +C was not treating C and C as equivalent when such +a sub was provided as the comparison routine. It used to croak on +C. + +=item * + +Subroutines from the C namespace are once more exempt from +redefinition warnings. This used to work in 5.005, but was broken in 5.6 +for most subroutines. For subs created via XS that redefine subroutines +from the C package, this stopped working in 5.10. + +=item * + +New XSUBs now produce redefinition warnings if they overwrite existing +subs, as they did in 5.8.x. (The C logic was reversed in 5.10-14. +Only subroutines from the C namespace would warn when clobbered.) + +=item * + +Redefinition warnings triggered by the creation of XSUBs now respect +Unicode glob names, instead of using the internal representation. This was +missed in 5.15.4, partly because this warning was so hard to trigger. (See +the previous item.) + +=item * + +C used to use compile-time warning hints, instead of run-time +hints. The following code should never produce a redefinition warning, but +it used to, if C redefine and existing subroutine: - package Foo; - BEGIN {*Foo:: = *Bar::} - sub foo; + use warnings; + BEGIN { + no warnings; + some_XS_function_that_calls_new_CONSTSUB(); + } =item * -F, and consequently the C command in the debugger, have been -fixed to handle objects blessed into classes whose names contain "=". The -contents of such objects used not to be dumped [perl #101814]. +Redefinition warnings for constant subroutines are on by default (what are +known as severe warnings in L). This was only the case when it +was a glob assignment or declaration of a Perl subroutine that caused the +warning. If the creation of XSUBs triggered the warning, it was not a +default warning. This has been corrected. =item * -The C repetition operator no longer crashes on 64-bit builds with large -repeate counts [perl #94560]. +The internal check to see whether a redefinition warning should occur used +to emit "uninitialized" warnings in cases like this: + + use warnings "uninitialized"; + use constant {u=>undef,v=>undef}; + sub foo(){u} sub foo(){v} =item * -A fix to C under miniperl (used to configure modules when perl itself -is built) in Perl 5.15.3 stopped C<< <~> >> from returning the home -directory, because it cleared %ENV before calling csh. Now C<$ENV{HOME}> -is preserved. This fix probably does not affect anything. If -L fails to load for some reason, Perl reverts to using csh. -So it would apply in that case. +A bug fix in Perl 5.14 introduced a new bug, causing "uninitialized" +warnings to report the wrong variable if the operator in question has +two operands and one is C<%{...}> or C<@{...}>. This has been fixed +[perl #103766]. =item * -On OSes other than VMS, Perl's C operator (and the C<< <...> >> form) -use L underneath. L splits the pattern into words, -before feeding each word to its C function. +C<< version->new("version") >> and C no longer +crash [perl #102586]. + +=item * + +C<$tied =~ y/a/b/>, C and C now call FETCH just +once when $tied holds a reference. + +=item * + +Four-argument C no longer produces its "Non-string passed as +bitmask" warning on tied or tainted variables that are strings. + +=item * -There were several inconsistencies in the way the split was done. Now -quotation marks (' and ") are always treated as shell-style word delimiters -(that allow whitespace as part of a word) and backslashes are always -preserved, unless they exist to escape quotation marks. Before, those -would only sometimes be the case, depending on whether the pattern -contained whitespace. Also, escaped whitespace at the end of the pattern -is no longer stripped [perl #40470]. +C now always calls FETCH on the buffer passed to it if it is tied. +It used to skip the call if the tied variable happened to hold a typeglob. =item * -C now works as a way to call the default globbing function. It -used to respect overrides, despite the C prefix. +C<< $tied .= <> >> now calls FETCH once on C<$tied>. It used to call it +multiple times if the last value assigned to or returned from the tied +variable was anything other than a string or typeglob. =item * -In 5.14, C and C no longer matched the -opposite case. This has been fixed [perl #101970]. +The C keyword added in 5.15.5 was respecting C +declarations from the outer scope, when it should have been ignoring them. =item * -A regular expression match with an overloaded object on the right-hand side -would in some cases stringify the object too many times. +C 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 * -The C-level C function could become confused as to whether the -pattern was in UTF8 if the pattern was an overloaded, tied, or otherwise -magical scalar [perl #101940]. +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 * -A regression has been fixed that was introduced in 5.14, in C -regular expression matching, in which a match improperly fails if the -pattern is in UTF-8, the target string is not, and a Latin-1 character -precedes a character in the string that should match the pattern. [perl -#101710] +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 * -C<@{"..."} = reverse ...> started crashing in 5.15.3. This has been fixed. +Creating a C sub no longer stops C<%+>, C<%-> and +C<%!> from working some of the time [perl #105024]. =item * -C in a tainted expression started producing an "sv_upgrade" error in -5.15.4. This has been fixed. +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 * -Weak references to lexical hashes going out of scope were not going stale -(becoming undefined), but continued to point to the hash. +When presented with malformed UTF-8 input, the XS-callable functions +C, C, and +C could read beyond the end of the input +string by up to 12 bytes. This no longer happens. [perl #32080]. +However, currently, C still has this defect, +see L above. =item * -Weak references to lexical variables going out of scope are now broken -before any magical methods (e.g., DESTROY on a tie object) are called. -This prevents such methods from modifying the variable that will be seen -the next time the scope is entered. +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 C optimisation in Perl 5.12.0 to make it faster on empty hashes -caused C not to reset the iterator if called after the last element -was deleted. This has been fixed. +A change in perl 5.15.4 caused C to produce malloc errors and a +crash with Perl's own malloc, and possibly with other malloc +implementations, too [perl #104034]. =item * -The C<#line 42 foo> directive used not to update the arrays of lines used -by the debugger if it occurred in a string eval. This was partially fixed -in 5.14, but it only worked for a single C<#line 42 foo> in each eval. Now -it works for multiple. +A bug fix in 5.15.5 could sometimes result in assertion failures under +debugging builds of perl for certain syntax errors in C, such as +C =item * -String eval used not to localise C<%^H> when compiling its argument if it -was empty at the time the C call itself was compiled. This could -lead to scary side effects, like C enabling other flags that -the surrounding code was trying to enable for its caller [perl #68750]. +The "c [line num]" debugger command was broken by other debugger changes +release in 5.15.3. This is now fixed. =item * -Creating a BEGIN block from XS code (via C or C) would, -on completion, make the hints of the current compiling code the current -hints. This could cause warnings to occur in a non-warning scope. +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 * -C and C no longer localise hints (C<$^H> and C<%^H>) -at run time, but only during compilation of the $string or required file. -This makes C equivalent to -C [perl #70151]. +The debugger prompt did not display the current line in. This was broken in +5.15.3. This is now fixed. =back @@ -679,7 +976,7 @@ here. XXX Generate this with: - perl Porting/acknowledgements.pl v5.15.4..HEAD + perl Porting/acknowledgements.pl v5.15.5..HEAD =head1 Reporting Bugs