diff options
-rw-r--r-- | MANIFEST | 11 | ||||
-rwxr-xr-x | Makefile.SH | 6 | ||||
-rw-r--r-- | Porting/perl5160delta.pod | 3692 | ||||
-rw-r--r-- | pod/perl.pod | 11 | ||||
-rw-r--r-- | pod/perl5150delta.pod | 1256 | ||||
-rw-r--r-- | pod/perl5151delta.pod | 630 | ||||
-rw-r--r-- | pod/perl5152delta.pod | 474 | ||||
-rw-r--r-- | pod/perl5153delta.pod | 843 | ||||
-rw-r--r-- | pod/perl5154delta.pod | 580 | ||||
-rw-r--r-- | pod/perl5155delta.pod | 659 | ||||
-rw-r--r-- | pod/perl5156delta.pod | 946 | ||||
-rw-r--r-- | pod/perl5157delta.pod | 890 | ||||
-rw-r--r-- | pod/perl5158delta.pod | 708 | ||||
-rw-r--r-- | pod/perl5159delta.pod | 402 | ||||
-rw-r--r-- | pod/perldelta.pod | 3595 | ||||
-rw-r--r-- | vms/descrip_mms.template | 2 | ||||
-rw-r--r-- | win32/Makefile | 4 | ||||
-rw-r--r-- | win32/makefile.mk | 4 | ||||
-rw-r--r-- | win32/pod.mak | 48 |
19 files changed, 3455 insertions, 11306 deletions
@@ -4644,16 +4644,6 @@ pod/perl5124delta.pod Perl changes in version 5.12.4 pod/perl5140delta.pod Perl changes in version 5.14.0 pod/perl5141delta.pod Perl changes in version 5.14.1 pod/perl5142delta.pod Perl changes in version 5.14.2 -pod/perl5150delta.pod Perl changes in version 5.15.0 -pod/perl5151delta.pod Perl changes in version 5.15.1 -pod/perl5152delta.pod Perl changes in version 5.15.2 -pod/perl5153delta.pod Perl changes in version 5.15.3 -pod/perl5154delta.pod Perl changes in version 5.15.4 -pod/perl5155delta.pod Perl changes in version 5.15.5 -pod/perl5156delta.pod Perl changes in version 5.15.6 -pod/perl5157delta.pod Perl changes in version 5.15.7 -pod/perl5158delta.pod Perl changes in version 5.15.8 -pod/perl5159delta.pod Perl changes in version 5.15.9 pod/perl561delta.pod Perl changes in version 5.6.1 pod/perl56delta.pod Perl changes in version 5.6 pod/perl581delta.pod Perl changes in version 5.8.1 @@ -4807,7 +4797,6 @@ Porting/manicheck Check against MANIFEST Porting/manisort Sort the MANIFEST Porting/new-perldelta.pl Generate a new perldelta Porting/newtests-perldelta.pl Generate Perldelta stub for newly added tests -Porting/perl5160delta.pod The perldelta that will be perl5160delta Porting/perldelta_template.pod Template for creating new perldelta.pod files Porting/perlhist_calculate.pl Perform calculations to update perlhist Porting/pod_lib.pl Code for handling generated pods diff --git a/Makefile.SH b/Makefile.SH index ba5ab79d3a..2b500337ea 100755 --- a/Makefile.SH +++ b/Makefile.SH @@ -482,7 +482,7 @@ mini_obj = $(minindt_obj) $(MINIDTRACE_O) ndt_obj = $(obj0) $(obj1) $(obj2) $(obj3) $(ARCHOBJS) obj = $(ndt_obj) $(DTRACE_O) -perltoc_pod_prereqs = extra.pods pod/perl51510delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod pod/perluniprops.pod +perltoc_pod_prereqs = extra.pods pod/perl5160delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod pod/perluniprops.pod generated_pods = pod/perltoc.pod $(perltoc_pod_prereqs) generated_headers = uudmap.h bitcount.h mg_data.h @@ -1058,8 +1058,8 @@ pod/perlintern.pod: $(MINIPERL_EXE) autodoc.pl embed.fnc pod/perlmodlib.pod: $(MINIPERL_EXE) pod/perlmodlib.PL MANIFEST $(MINIPERL) $(Icwd) pod/perlmodlib.PL -q -pod/perl51510delta.pod: pod/perldelta.pod - $(LNS) perldelta.pod pod/perl51510delta.pod +pod/perl5160delta.pod: pod/perldelta.pod + $(LNS) perldelta.pod pod/perl5160delta.pod extra.pods: $(MINIPERL_EXE) -@test ! -f extra.pods || rm -f `cat extra.pods` diff --git a/Porting/perl5160delta.pod b/Porting/perl5160delta.pod deleted file mode 100644 index d408536523..0000000000 --- a/Porting/perl5160delta.pod +++ /dev/null @@ -1,3692 +0,0 @@ -=encoding utf8 - -=head1 NAME - -perl5160delta - what is new for perl v5.16.0 - -=head1 DESCRIPTION - -This document describes differences between the 5.14.0 release and -the 5.16.0 release. - -If you are upgrading from an earlier release such as 5.12.0, first read -L<perl5140delta>, which describes differences between 5.12.0 and -5.14.0. - -=head1 Notice - -As described in L<perlpolicy>, the release of Perl 5.16.0 marks the -official end of support for Perl 5.12. Users of Perl 5.12 or earlier -should consider upgrading to a more recent release of Perl. - -=head1 Core Enhancements - -=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; - # only 5.16 features enabled here - use 5.014; - # only 5.14 features enabled here (not 5.16) - -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<< no feature >> now resets to the default feature set. To disable all -features (which is likely to be a pretty special-purpose request, since -it presumably won't match any named set of semantics) you can now -write C<< no feature ':all' >>. - -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<__SUB__> - -The new C<__SUB__> token, available under the C<current_sub> feature -(see L<feature>) or C<use v5.16>, returns a reference to the current -subroutine, making it easier to write recursive closures. - -=head2 New and Improved Built-ins - -=head3 More consistent C<eval> - -The C<eval> 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. - -The new C<unicode_eval> and C<evalbytes> features (enabled under C<use -5.16.0>) resolve this. The C<unicode_eval> feature causes C<eval -$string> to treat the string always as Unicode. The C<evalbytes> -features provides a function, itself called C<evalbytes>, which -evaluates its argument always as a string of bytes. - -These features also fix oddities with source filters leaking to outer -dynamic scopes. - -See L<feature> for more detail. - -=head3 C<substr> lvalue revamp - -=for comment Does this belong here, or under Incomptable Changes? - -When C<substr> 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<substr> 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<substr> itself, but only when the returned lvalue is -read or modified. - -These changes result in an incompatible change: - -If the original string changes length after the call to C<substr> 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. - -Since this change also allowed many bugs to be fixed (see -L</The C<substr> operator>), and since the behaviour -of negative offsets has never been specified, so the -change was deemed acceptable. - -=head3 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 Unicode Support - -=head3 Supports (I<almost>) 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<perluniprops>. - -The return value of C<charnames::viacode()> 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<charnames::viacode()> 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 longstanding -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<http://www.unicode.org/versions/Unicode6.1.0/>. - -=head3 C<use charnames> is no longer needed for C<\N{I<name>}> - -When C<\N{I<name>}> is encountered, the C<charnames> module is now -automatically loaded when needed as if the C<:full> and C<:short> -options had been specified. See L<charnames> for more information. - -=head3 C<\N{...}> can now have Unicode loose name matching - -This is described in the C<charnames> item in -L</Updated Modules and Pragmata> below. - -=head3 Unicode Symbol Names - -Perl now has proper support for Unicode in symbol names. It used to be -that C<*{$foo}> would ignore the internal UTF8 flag and use the bytes of -the underlying representation to look up the symbol. That meant that -C<*{"\x{100}"}> and C<*{"\xc4\x80"}> would return the same thing. All -these parts of Perl have been fixed to account for Unicode: - -=over - -=item * - -Method names (including those passed to C<use overload>) - -=item * - -Typeglob names (including names of variables, subroutines and filehandles) - -=item * - -Package names - -=item * - -C<goto> - -=item * - -Symbolic dereferencing - -=item * - -Second argument to C<bless()> and C<tie()> - -=item * - -Return value of C<ref()> - -=item * - -Subroutine prototypes - -=item * - -Attributes - -=item * - -Various warnings and error messages that mention variable names or values, -methods, etc. - -=back - -In addition, a parsing bug has been fixed that prevented C<*{é}> from -implicitly quoting the name, but instead interpreted it as C<*{+é}>, which -would cause a strict violation. - -C<*{"*a::b"}> automatically strips off the * if it is followed by an ASCII -letter. That has been extended to all Unicode identifier characters. - -One-character non-ASCII non-punctuation variables (like C<$é>) are now -subject to "Used only once" warnings. They used to be exempt, as they -was treated as punctuation variables. - -Also, single-character Unicode punctuation variables (like C<$‰>) are now -supported [perl #69032]. - -=head3 Improved ability to mix locales and Unicode, including UTF-8 locales - -An optional parameter has been added to C<use locale> - - use locale ':not_characters'; - -which tells Perl to use all but the C<LC_CTYPE> and C<LC_COLLATE> -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<open> 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<perllocale>. - -=head3 New function C<fc> 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</i> matching. Now it is available -explicitly through the new C<fc> function call (enabled by -S<C<"use feature 'fc'">>, or C<use v5.16>, or explicitly callable via -C<CORE::fc>) or through the new C<\F> sequence in double-quotish -strings. - -Full details are in L<perlfunc/fc>. - -=head3 The Unicode C<Script_Extensions> property is now supported. - -New in Unicode 6.0, this is an improved C<Script> property. Details -are in L<perlunicode/Scripts>. - -=head2 XS Changes - -=head3 Improved typemaps for Some Builtin Types - -Most XS authors will be aware that there is a longstanding bug in the -OUTPUT typemap for T_AVREF (C<AV*>), T_HVREF (C<HV*>), T_CVREF (C<CV*>), -and T_SVREF (C<SVREF> or C<\$foo>) that requires manually decrementing -the reference count of the return value instead of the typemap taking -care of this. For backwards-compatibility, this cannot be changed in the -default typemaps. But we now provide additional typemaps -C<T_AVREF_REFCOUNT_FIXED>, etc. that do not exhibit this bug. Using -them in your extension is as simple as having one line in your -C<TYPEMAP> section: - - HV* T_HVREF_REFCOUNT_FIXED - -=head3 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 now describes how to use it -safely. - -=head3 Added C<is_utf8_char_buf()> - -This function is designed to replace the deprecated L</is_utf8_char()> -function. It includes an extra parameter to make sure it doesn't read -past the end of the input buffer. - -=head3 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()>. - -=head3 New Pad API - -Many new functions have been added to the API for manipulating lexical -pads. See L<perlapi/Pad Data Structures> for more information. - -=head2 Changes to Special Variables - -=head3 C<$$> can be assigned to - -C<$$> was made read-only in Perl 5.8.0. But only sometimes: C<local $$> -would make it writable again. Some CPAN modules were using C<local $$> or -XS code to bypass the read-only check, so there is no reason to keep C<$$> -read-only. (This change also allowed a bug to be fixed while maintaining -backward compatibility.) - -=head3 C<$^X> converted to an absolute path on FreeBSD, OS X and Solaris - -C<$^X> is now converted to an absolute path on OS X, FreeBSD (without -needing F</proc> mounted) and Solaris 10 and 11. This augments the -previous approach of using F</proc> on Linux, FreeBSD and NetBSD -(in all cases, where mounted). - -This makes relocatable perl installations more useful on these platforms. -(See "Relocatable @INC" in F<INSTALL>) - -=head2 Debugger Changes - -=head3 Features inside the debugger - -The current Perl's L<feature> bundle is now enabled for commands entered -in the interactive debugger. - -=head3 New option for the debugger's B<t> command - -The B<t> command in the debugger, which toggles tracing mode, now -accepts a numeric argument that determines how many levels of subroutine -calls to trace. - -=head3 C<enable> and C<disable> - -The debugger now has C<disable> and C<enable> commands for disabling -existing breakpoints and re-enabling them. See L<perldebug>. - -=head3 Breakpoints with file names - -The debugger's "b" command for setting breakpoints now allows a line -number to be prefixed with a file name. See -L<perldebug/"b [file]:[line] [condition]">. - -=head2 The C<CORE> Namespace - -=head3 The C<CORE::> prefix - -The C<CORE::> prefix can now be used on keywords enabled by -L<feature.pm|feature>, even outside the scope of C<use feature>. - -=head3 Subroutines in the C<CORE> namespace - -Many Perl keywords are now available as subroutines in the CORE namespace. -This allows them to be aliased: - - BEGIN { *entangle = \&CORE::tie } - entangle $variable, $package, @args; - -And for prototypes to be bypassed: - - sub mytie(\[%$*@]$@) { - my ($ref, $pack, @args) = @_; - ... do something ... - goto &CORE::tie; - } - -Some of these cannot be called through references or via C<&foo> syntax, -but must be called as barewords. - -See L<CORE> for details. - -=head2 Other Changes - -=head3 Anonymous handles - -Automatically generated file handles are now named __ANONIO__ when the -variable name cannot be determined, rather than $__ANONIO__. - -=head3 Autoloaded sort Subroutines - -Custom sort subroutines can now be autoloaded [perl #30661]: - - sub AUTOLOAD { ... } - @sorted = sort foo @list; # uses AUTOLOAD - -=head3 C<continue> no longer requires the "switch" feature - -The C<continue> keyword has two meanings. It can introduce a C<continue> -block after a loop, or it can exit the current C<when> block. Up till now, -the latter meaning was only valid with the "switch" feature enabled, and -was a syntax error otherwise. Since the main purpose of feature.pm is to -avoid conflicts with user-defined subroutines, there is no reason for -C<continue> to depend on it. - -=head3 DTrace probes for interpreter phase change - -The C<phase-change> probes will fire when the interpreter's phase -changes, which tracks the C<${^GLOBAL_PHASE}> variable. C<arg0> is -the new phase name; C<arg1> is the old one. This is useful mostly -for limiting your instrumentation to one or more of: compile time, -run time, destruct time. - -=head3 C<__FILE__()> Syntax - -The C<__FILE__>, C<__LINE__> and C<__PACKAGE__> tokens can now be written -with an empty pair of parentheses after them. This makes them parse the -same way as C<time>, C<fork> and other built-in functions. - -=head3 The C<\$> prototype accepts any scalar lvalue - -The C<\$> and C<\[$]> subroutine prototypes now accept any scalar lvalue -argument. Previously they only accepted scalars beginning with C<$> and -hash and array elements. This change makes them consistent with the way -the built-in C<read> and C<recv> functions (among others) parse their -arguments. This means that one can override the built-in functions with -custom subroutines that parse their arguments the same way. - -=head3 C<_> in subroutine prototypes - -The C<_> character in subroutine prototypes is now allowed before C<@> or -C<%>. - -=head1 Security - -=head2 Use C<is_utf8_char_buf()> and not C<is_utf8_char()> - -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<is_utf8_char_buf()|/Added is_utf8_char_buf()>. - -=head2 Malformed UTF-8 input could cause attempts to read beyond the end of the buffer - -Two new XS-accessible functions, C<utf8_to_uvchr_buf()> and -C<utf8_to_uvuni_buf()> are now available to prevent this, and the Perl -core has been converted to use them. -See L</Internal Changes>. - -=head2 C<File::Glob::bsd_glob()> memory error with GLOB_ALTDIRFUNC (CVE-2011-2728). - -Calling C<File::Glob::bsd_glob> with the unsupported flag -GLOB_ALTDIRFUNC would cause an access violation / segfault. A Perl -program that accepts a flags value from an external source could expose -itself to denial of service or arbitrary code execution attacks. There -are no known exploits in the wild. The problem has been corrected by -explicitly disabling all unsupported flags and setting unused function -pointers to null. Bug reported by Clément Lecigne. - -=head2 Privileges are now set correctly when assigning to C<$(> - -A hypothetical bug (probably non-exploitable in practice) due to the -incorrect setting of the effective group ID while setting C<$(> has been -fixed. The bug would only have affected systems that have C<setresgid()> -but not C<setregid()>, but no such systems are known of. - -=head1 Deprecations - -=head2 Don't read the Unicode data base files in F<lib/unicore> - -It is now deprecated to directly read the Unicode data base files. -These are stored in the F<lib/unicore> directory. Instead, you should -use the new functions in L<Unicode::UCD>. These provide a stable API, -and give complete information. - -Perl may at some point in the future change or remove the files. The -file most likely for applications to have used is -F<lib/unicore/ToDigit.pl>. L<Unicode::UCD/prop_invmap()> can be used to -get at its data instead. - -=head2 XS functions C<is_utf8_char()>, C<utf8_to_uvchr()> and -C<utf8_to_uvuni()> - -This function is deprecated because it could read beyond the end of the -input string. Use the new L<is_utf8_char_buf()|/Added is_utf8_char_buf()>, -C<utf8_to_uvchr_buf()> and C<utf8_to_uvuni_buf()> instead. - -=head1 Future Deprecations - -This section serves as a notice of features that are I<likely> to be -removed or L<deprecated|perlpolicy/deprecated> in the next release of -perl (5.18.0). If your code depends on these features, you should -contact the Perl 5 Porters via the L<mailing -list|http://lists.perl.org/list/perl5-porters.html> or L<perlbug> to -explain your use case and inform the deprecation process. - -=head2 Core Modules - -These modules may be marked as deprecated I<from the core>. This only -means that they will no longer be installed by default with the core -distribution, but will remain available on the CPAN. - -=over - -=item * - -CPANPLUS - -=item * - -Filter::Simple - -=item * - -PerlIO::mmap - -=item * - -Pod::Parser, Pod::LaTeX - -=item * - -SelfLoader - -=item * - -Text::Soundex - -=item * - -Thread.pm - -=back - -=head2 Platforms with no supporting programmers: - -These platforms will probably have their -special build support removed during the -5.17.0 development series. - -=over - -=item * - -BeOS - -=item * - -djgpp - -=item * - -dgux - -=item * - -EPOC - -=item * - -MPE/iX - -=item * - -Rhapsody - -=item * - -UTS - -=item * - -VM/ESA - -=back - -=head2 Other Future Deprecations - -=over - -=item * - -Swapping of $< and $> - -For more information about this future deprecation, see L<the relevant RT -ticket|https://rt.perl.org/rt3/Ticket/Display.html?id=96212>. - -=item * - -sfio, stdio - -Perl supports being built without PerlIO proper, using a stdio or sfio -wrapper instead. A perl build like this will not support IO layers and -thus Unicode IO, making it rather handicapped. - -PerlIO supports a C<stdio> layer if stdio use is desired, and similarly a -sfio layer could be produced. - -=item * - -Unescaped literal C<< "{" >> in regular expressions. - -It is planned starting in v5.20 to require a literal C<"{"> to be -escaped by, for example, preceding it with a backslash. In v5.18, a -deprecated warning message will be emitted for all such uses. Note that -this only affects patterns which are to match a literal C<"{">. Other -uses of this character, such as part of a quantifier or sequence like in -the ones below are completely unaffected: - - /foo{3,5}/ - /\p{Alphabetic}/ - /\N{DIGIT ZERO} - -The removal of this will allow extensions to pattern syntax, and better -error checking of existing syntax. See L<perlre/Quantifiers> for an -example. - -=back - -=head1 Incompatible Changes - -=head2 Special blocks called in void context - -Special blocks (C<BEGIN>, C<CHECK>, C<INIT>, C<UNITCHECK>, C<END>) are now -called in void context. This avoids wasteful copying of the result of the -last statement [perl #108794]. - -=head2 The C<overloading> pragma and regexp objects - -With C<no overloading>, regular expression objects returned by C<qr//> 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<perlxstypemap>. - -=head2 Unicode 6.1 has incompatibilities with Unicode 6.0 - -These are detailed in L</Supports (almost) Unicode 6.1> above. -You can compile this version of Perl to use Unicode 6.0. See -L<perlunicode/Hacking Perl to work on earlier Unicode versions (for very serious hackers only)>. - -=head2 Borland compiler - -All support for the Borland compiler has been dropped. The code had not -worked for a long time anyway. - -=head2 Certain deprecated Unicode properties are no longer supported by default - -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. - -Perl may be recompiled to include any or all of them; instructions are -given in -L<perluniprops/Unicode character properties that are NOT accepted by Perl>. - -=head2 Dereferencing IO thingies as typeglobs - -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. -Previously, it would stringify as an empty string, but some operators would -treat it as undefined, producing an "uninitialized" warning. -Now it stringifies as __ANONIO__ [perl #96326]. - -=head2 User-defined case-changing operations - -This feature was deprecated in Perl 5.14, and has now been removed. -The CPAN module L<Unicode::Casing> provides better functionality without -the drawbacks that this feature had, as are detailed in the 5.14 -documentation: -L<http://perldoc.perl.org/5.14.0/perlunicode.html#User-Defined-Case-Mappings-%28for-serious-hackers-only%29> - -=head2 XSUBs are now 'static' - -XSUB C functions are now 'static', that is, they are not visible from -outside the compilation unit. Users can use the new C<XS_EXTERNAL(name)> -and C<XS_INTERNAL(name)> macros to pick the desired linking behaviour. -The ordinary C<XS(name)> declaration for XSUBs will continue to declare -non-'static' XSUBs for compatibility, but the XS compiler, -C<ExtUtils::ParseXS> (C<xsubpp>) will emit 'static' XSUBs by default. -C<ExtUtils::ParseXS>'s behaviour can be reconfigured from XS using the -C<EXPORT_XSUB_SYMBOLS> keyword. See L<perlxs> for details. - -=head2 Weakening read-only references - -Weakening read-only references is no longer permitted. It should never -have worked anyway, and in some cases could result in crashes. - -=head2 Tying scalars that hold typeglobs - -Attempting to tie a scalar after a typeglob was assigned to it would -instead tie the handle in the typeglob's IO slot. This meant that it was -impossible to tie the scalar itself. Similar problems affected C<tied> and -C<untie>: C<tied $scalar> would return false on a tied scalar if the last -thing returned was a typeglob, and C<untie $scalar> on such a tied scalar -would do nothing. - -We fixed this problem before Perl 5.14.0, but it caused problems with some -CPAN modules, so we put in a deprecation cycle instead. - -Now the deprecation has been removed and this bug has been fixed. So -C<tie $scalar> will always tie the scalar, not the handle it holds. To tie -the handle, use C<tie *$scalar> (with an explicit asterisk). The same -applies to C<tied *$scalar> and C<untie *$scalar>. - -=head2 IPC::Open3 no longer provides C<xfork()>, C<xclose_on_exec()> -and C<xpipe_anon()> - -All three functions were private, undocumented and unexported. They do -not appear to be used by any code on CPAN. Two have been inlined and one -deleted entirely. - -=head2 C<$$> no longer caches PID - -Previously, if one called fork(3) from C, Perl's -notion of C<$$> could go out of sync with what getpid() returns. By always -fetching the value of C<$$> via getpid(), this potential bug is eliminated. -Code that depends on the caching behavior will break. As described in -L<Core Enhancements|/C<$$> can be assigned to>, -C<$$> is now writable, but it will be reset during a -fork. - -=head2 C<$$> and C<getppid()> no longer emulate POSIX semantics under LinuxThreads - -The POSIX emulation of C<$$> and C<getppid()> under the obsolete -LinuxThreads implementation has been removed. -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<getppid()>, 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<getppid()>, 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 -C<sete?[ug]id()> without updating C<PL_e?[ug]id>. Having to deal with -this complexity wasn't worth it given how cheap the C<gete?[ug]id()> -system call is. - -This change will break a handful of CPAN modules that use the XS-level -C<PL_uid>, C<PL_gid>, C<PL_euid> or C<PL_egid> variables. - -The fix for those breakages is to use C<PerlProc_gete?[ug]id()> to -retrieve them (e.g. C<PerlProc_getuid()>), and not to assign to -C<PL_e?[ug]id> 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<quotemeta> 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<perlfunc/quotemeta>. - -=head1 Performance Enhancements - -=over - -=item * - -Improved performance for Unicode properties in regular expressions - -=for comment Can this be compacted some? -- rjbs, 2012-02-20 - -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<qr/\p{foo}abc\p{foo}/> -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. - -=item * - -Version declarations with the C<use> keyword (e.g., C<use 5.012>) are now -faster, as they enable features without loading F<feature.pm>. - -=item * - -C<local $_> is faster now, as it no longer iterates through magic that it -is not going to copy anyway. - -=item * - -Perl 5.12.0 sped up the destruction of objects whose classes define -empty C<DESTROY> methods (to prevent autoloading), by simply not -calling such empty methods. This release takes this optimisation a -step further, by not calling any C<DESTROY> method that begins with a -C<return> statement. This can be useful for destructors that are only -used for debugging: - - use constant DEBUG => 1; - sub DESTROY { return unless DEBUG; ... } - -Constant-folding will reduce the first statement to C<return;> if DEBUG -is set to 0, triggering this optimisation. - -=item * - -Assigning 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 C<substr> 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. - -=item * - -C<substr> no longer calculates a value to return when called in void -context. - -=item * - -Due to changes in L<File::Glob>, Perl's C<glob> 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. - -This does not affect C<glob> on VMS, as it does not use File::Glob. - -=item * - -The short-circuiting operators C<&&>, C<||>, and C<//>, when chained -(such as C<$a || $b || $c>), are now considerably faster to short-circuit, -due to reduced optree traversal. - -=item * - -The implementation of C<s///r> makes one fewer copy of the scalar's value. - -=item * - -C<study> is now a no-op. - -=item * - -Recursive calls to lvalue subroutines in lvalue scalar context use less -memory. - -=back - -=head1 Modules and Pragmata - -=head2 Deprecated Modules - -=over - -=item L<Version::Requirements> - -Version::Requirements is now DEPRECATED, use L<CPAN::Meta::Requirements>, -which is a drop-in replacement. It will be deleted from perl.git blead -in v5.17.0. - -=back - -=head2 New Modules and Pragmata - -=over 4 - -=item * - -L<arybase> -- this new module implements the C<$[> variable. - -=item * - -C<PerlIO::mmap> 0.010 has been added to the Perl core. - -The C<mmap> PerlIO layer is no longer implemented by perl itself, but has -been moved out into the new L<PerlIO::mmap> module. - -=back - -=head2 Updated Modules and Pragmata - -=over 4 - -=item * - -L<XXX> has been upgraded from version 0.69 to version 0.70. - -=back - -=head2 Removed Modules and Pragmata - -As promised in Perl 5.14.0's release notes, the following modules have -been removed from the core distribution, and if needed should be installed -from CPAN instead. - -=over - -=item * - -C<Devel::DProf> has been removed from the Perl core. Prior version was -20110228.00. - -=item * - -C<Shell> has been removed from the Perl core. Prior version was 0.72_01. - -=back - -=head1 Documentation - -=head2 New Documentation - -=head3 L<perldtrace> - -L<perldtrace> describes Perl's DTrace support, listing the provided probes -and gives examples of their use. - -=head3 L<perlexperiment> - -This document is intended to provide a list of experimental features in -Perl. It is still a work in progress. - -=head3 L<perlootut> - -This a new OO tutorial. It focuses on basic OO concepts, and then recommends -that readers choose an OO framework from CPAN. - -=head3 L<perlxstypemap> - -The new manual describes the XS typemapping mechanism in unprecedented -detail and combines new documentation with information extracted from -L<perlxs> and the previously unofficial list of all core typemaps. - -=head2 Changes to Existing Documentation - -=head3 L<perlapi> - -=over 4 - -=item * - -The HV API has long accepted negative lengths to indicate that the key is -in UTF8. Now this is documented. - -=item * - -The C<boolSV()> macro is now documented. - -=back - -=head3 L<perlfunc> - -=over 4 - -=item * - -C<dbmopen> 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 * - -As an accident of history, C<open $fh, "<:", ...> applies the default -layers for the platform (C<:raw> on Unix, C<:crlf> on Windows), ignoring -whatever is declared by L<open.pm|open>. This seems such a useful feature -it has been documented in L<perlfunc|perlfunc/open> and L<open>. - -=item * - -The entry for C<split> has been rewritten. It is now far clearer than -before. - -=back - -=head3 L<perlguts> - -=over 4 - -=item * - -A new section, L<Autoloading with XSUBs|perlguts/Autoloading with XSUBs>, -has been added, which explains the two APIs for accessing the name of the -autoloaded sub. - -=item * - -Some of the function descriptions in L<perlguts> were confusing, as it was -not clear whether they referred to the function above or below the -description. This has been clarified [perl #91790]. - -=back - -=head3 L<perlobj> - -=over 4 - -=item * - -This document has been rewritten from scratch, and its coverage of various OO -concepts has been expanded. - -=back - -=head3 L<perlop> - -=over 4 - -=item * - -Documentation of the smartmatch operator has been reworked and moved from -perlsyn to perlop where it belongs. - -It has also been corrected for the case of C<undef> on the left-hand -side. The list of different smart match behaviours had an item in the -wrong place. - -=item * - -Documentation of the ellipsis statement (C<...>) has been reworked and -moved from perlop to perlsyn. - -=item * - -The explanation of bitwise operators has been expanded to explain how they -work on Unicode strings (5.14.1). - -=item * - -More examples for C<m//g> have been added (5.14.1). - -=item * - -The C<<< <<\FOO >>> here-doc syntax has been documented (5.14.1). - -=back - -=head3 L<perlpragma> - -=over 4 - -=item * - -There is now a standard convention for naming keys in the C<%^H>, -documented under L<Key naming|perlpragma/Key naming>. - -=back - -=head3 L<perlsec/Laundering and Detecting Tainted Data> - -=over 4 - -=item * - -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 remains L<Scalar::Util/tainted>. - -=back - -=head3 L<perllol> - -=over - -=item * - -L<perllol> has been expanded with examples using the new C<push $scalar> -syntax introduced in Perl 5.14.0 (5.14.1). - -=back - -=head3 L<perlmod> - -=over - -=item * - -L<perlmod> now states explicitly that some types of explicit symbol table -manipulation are not supported. This codifies what was effectively already -the case [perl #78074]. - -=back - -=head3 L<perlpodstyle> - -=over 4 - -=item * - -The tips on which formatting codes to use have been corrected and greatly -expanded. - -=item * - -There are now a couple of example one-liners for previewing POD files after -they have been edited. - -=back - -=head3 L<perlre> - -=over - -=item * - -The C<(*COMMIT)> directive is now listed in the right section -(L<Verbs without an argument|perlre/Verbs without an argument>). - -=back - -=head3 L<perlrun> - -=over - -=item * - -L<perlrun> has undergone a significant clean-up. Most notably, the -B<-0x...> form of the B<-0> flag has been clarified, and the final section -on environment variables has been corrected and expanded (5.14.1). - -=back - -=head3 L<perlsub> - -=over - -=item * - -The ($;) prototype syntax, which has existed for rather a long time, is now -documented in L<perlsub>. It allows a unary function to have the same -precedence as a list operator. - -=back - -=head3 L<perltie> - -=over - -=item * - -The required syntax for tying handles has been documented. - -=back - -=head3 L<perlvar> - -=over - -=item * - -The documentation for L<$!|perlvar/$!> has been corrected and clarified. -It used to state that $! could be C<undef>, which is not the case. It was -also unclear as to whether system calls set C's C<errno> or Perl's C<$!> -[perl #91614]. - -=item * - -Documentation for L<$$|perlvar/$$> has been amended with additional -cautions regarding changing the process ID. - -=back - -=head3 Other Changes - -=over 4 - -=item * - -L<perlxs> was extended with documentation on inline typemaps. - -=item * - -L<perlref> has a new L<Circular References|perlref/Circular References> -section explaining how circularities may not be freed and how to solve that -with weak references. - -=item * - -Parts of L<perlapi> were clarified, and Perl equivalents of some C -functions have been added as an additional mode of exposition. - -=item * - -A few parts of L<perlre> and L<perlrecharclass> were clarified. - -=back - -=head2 Removed Documentation - -=head3 Old OO Documentation - -All the old OO tutorials, perltoot, perltooc, and perlboot, have been -removed. The perlbot (bag of object tricks) document has been removed -as well. - -=head3 Development Deltas - -The perldelta files for development releases are no longer packaged with -perl. These can still be found in the perl source code repository. - -=head1 Diagnostics - -The following additions or changes have been made to diagnostic output, -including warnings and fatal error messages. For the complete list of -diagnostic messages, see L<perldiag>. - -=head2 New Diagnostics - -=head3 New Errors - -=over 4 - -=item * - -L<Cannot set tied @DB::args|perldiag/"Cannot set tied @DB::args"> - -This error occurs when C<caller> tries to set C<@DB::args> but finds it -tied. Before this error was added, it used to crash instead. - -=item * - -L<Cannot tie unreifiable array|perldiag/"Cannot tie unreifiable array"> - -This error is part of a safety check that the C<tie> operator does before -tying a special array like C<@_>. You should never see this message. - -=item * - -L<&CORE::%s cannot be called directly|perldiag/"&CORE::%s cannot be called directly"> - -This occurs when a subroutine in the C<CORE::> namespace is called -with C<&foo> syntax or through a reference. Some subroutines -in this package cannot yet be called that way, but must be -called as barewords. See L</Subroutines in the C<CORE> namespace>, above. - -=item * - -L<Source filters apply only to byte streams|perldiag/"Source filters apply only to byte streams"> - -This new error occurs when you try to activate a source filter (usually by -loading a source filter module) within a string passed to C<eval> under the -C<unicode_eval> feature. - -=back - -=head3 New Warnings - -=over 4 - -=item * - -L<defined(@array) is deprecated|perldiag/"defined(@array) is deprecated"> - -The long-deprecated C<defined(@array)> now also warns for package variables. -Previously it only issued a warning for lexical variables. - -=item * - -L<length() used on %s|perldiag/length() used on %s> - -This new warning occurs when C<length> is used on an array or hash, instead -of C<scalar(@array)> or C<scalar(keys %hash)>. - -=item * - -L<lvalue attribute %s already-defined subroutine|perldiag/"lvalue attribute %s already-defined subroutine"> - -L<attributes.pm|attributes> now emits this warning when the :lvalue -attribute is applied to a Perl subroutine that has already been defined, as -doing so can have unexpected side-effects. - -=item * - -L<overload arg '%s' is invalid|perldiag/"overload arg '%s' is invalid"> - -This warning, in the "overload" category, is produced when the overload -pragma is given an argument it doesn't recognize, presumably a mistyped -operator. - -=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. - -=item * - -L<Useless assignment to a temporary|perldiag/"Useless assignment to a temporary"> - -Assigning to a temporary scalar returned -from an lvalue subroutine now produces this -warning [perl #31946]. - -=item * - -L<Useless use of \E|perldiag/"Useless use of \E"> - -C<\E> does nothing unless preceded by C<\Q>, C<\L> or C<\U>. - -=back - -=head2 Removed Errors - -=over - -=item * - -"sort is now a reserved word" - -This error used to occur when C<sort> was called without arguments, -followed by C<;> or C<)>. (E.g., C<sort;> would die, but C<{sort}> was -OK.) This error message was added in Perl 3 to catch code like -C<close(sort)> which would no longer work. More than two decades later, -this message is no longer appropriate. Now C<sort> without arguments is -always allowed, and returns an empty list, as it did in those cases -where it was already allowed [perl #90030]. - -=back - -=head2 Changes to Existing Diagnostics - -=over 4 - -=item * - -The "Applying pattern match..." or similar warning produced when an -array or hash is on the left-hand side of the C<=~> operator now -mentions the name of the variable. - -=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<perldiag>. - -=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]. - -=item * - -The message, "Code point 0x%X is not Unicode, no properties match it; -all inverse properties do" has been changed to "Code point 0x%X is not -Unicode, all \p{} matches fail; all \P{} matches succeed". - -=item * - -Redefinition warnings for constant subroutines used to be mandatory, -even occurring under C<no warnings>. Now they respect the L<warnings> -pragma. - -=item * - -The "glob failed" warning message is now suppressible via C<no warnings> -[perl #111656]. - -=item * - -The L<Invalid version format|perldiag/"Invalid version format (%s)"> -error message now says "negative version number" within the parentheses, -rather than "non-numeric data", for negative numbers. - -=item * - -The two warnings -L<Possible attempt to put comments in qw() list|perldiag/"Possible attempt to put comments in qw() list"> -and -L<Possible attempt to separate words with commas|perldiag/"Possible attempt to separate words with commas"> -are no longer mutually exclusive: the same C<qw> construct may produce -both. - -=item * - -The uninitialized warning for C<y///r> when C<$_> is implicit and -undefined now mentions the variable name, just like the non-/r variation -of the operator. - -=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. - -=item * - -Warnings that mention the names of lexical (C<my>) variables with -Unicode characters in them now respect the presence or absence of the -C<:utf8> layer on the output handle, instead of outputting UTF8 -regardless. Also, the correct names are included in the strings passed -to C<$SIG{__WARN__}> handlers, rather than the raw UTF8 bytes. - -=back - -=head1 Utility Changes - -=head3 L<h2ph> - -=over 4 - -=item * - -L<h2ph> used to generate code of the form - - unless(defined(&FOO)) { - sub FOO () {42;} - } - -But the subroutine is a compile-time declaration, and is hence unaffected -by the condition. It has now been corrected to emit a string C<eval> -around the subroutine [perl #99368]. - -=back - -=head3 L<splain> - -=over 4 - -=item * - -F<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<perldiag>. splain has been taught to find the separate -entries in these cases, instead of simply failing to find the message. - -=back - -=head3 L<zipdetails> - -=over 4 - -=item * - -This is a new utility, included as part of an -L<IO::Compress::Base> upgrade. - -L<zipdetails> 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 - -=head1 Configuration and Compilation - -=over 4 - -=item * - -F<regexp.h> has been modified for compatibility with GCC's B<-Werror> -option, as used by some projects that include perl's header files (5.14.1). - -=item * - -C<USE_LOCALE{,_COLLATE,_CTYPE,_NUMERIC}> have been added the output of perl -V -as they have affect the behaviour of the interpreter binary (albeit only -in a small area). - -=item * - -The code and tests for L<IPC::Open2> have been moved from F<ext/IPC-Open2> -into F<ext/IPC-Open3>, as C<IPC::Open2::open2()> is implemented as a thin -wrapper around C<IPC::Open3::_open3()>, and hence is very tightly coupled to -it. - -=item * - -The magic types and magic vtables are now generated from data in a new script -F<regen/mg_vtable.pl>, instead of being maintained by hand. As different -EBCDIC variants can't agree on the code point for '~', the character to code -point conversion is done at build time by F<generate_uudmap> to a new generated -header F<mg_data.h>. C<PL_vtbl_bm> and C<PL_vtbl_fm> are now defined by the -pre-processor as C<PL_vtbl_regexp>, instead of being distinct C variables. -C<PL_vtbl_sig> has been removed. - -=item * - -Building with C<-DPERL_GLOBAL_STRUCT> works again. This configuration is not -generally used. - -=item * - -Perl configured with I<MAD> now correctly frees C<MADPROP> structures when -OPs are freed. C<MADPROP>s are now allocated with C<PerlMemShared_malloc()> - -=item * - -F<makedef.pl> has been refactored. This should have no noticeable affect on -any of the platforms that use it as part of their build (AIX, VMS, Win32). - -=item * - -C<useperlio> can no longer be disabled. - -=item * - -The file F<global.sym> is no longer needed, and has been removed. It -contained a list of all exported functions, one of the files generated by -F<regen/embed.pl> from data in F<embed.fnc> and F<regen/opcodes>. The code -has been refactored so that the only user of F<global.sym>, F<makedef.pl>, -now reads F<embed.fnc> and F<regen/opcodes> directly, removing the need to -store the list of exported functions in an intermediate file. - -As F<global.sym> was never installed, this change should not be visible -outside the build process. - -=item * - -F<pod/buildtoc>, used by the build process to build L<perltoc>, has been -refactored and simplified. It now only contains code to build L<perltoc>; -the code to regenerate Makefiles has been moved to F<Porting/pod_rules.pl>. -It's a bug if this change has any material effect on the build process. - -=item * - -F<pod/roffitall> is now built by F<pod/buildtoc>, 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 * - -The man page for C<XS::Typemap> is no longer installed. C<XS::Typemap> -is a test module which is not installed, hence installing its -documentation makes no sense. - -=item * - -The -Dusesitecustomize and -Duserelocatableinc options now work -together properly. - -=back - -=head1 Platform Support - -=head2 Platform-Specific Notes - -=head3 Cygwin - -=over 4 - -=item * - -Since version 1.7, Cygwin supports native UTF-8 paths. If Perl is built -under that environment, directory and filenames will be UTF-8 encoded. - -Cygwin does not initialize all original Win32 environment variables. See -F<README.cygwin> for a discussion of the newly-added -C<Cygwin::sync_winenv()> function [perl #110190] and for -further links. - -=back - -=head3 HP-UX - -=over 4 - -=item * - -HP-UX PA-RISC/64 now supports gcc-4.x - -A fix to correct the socketsize now makes the test suite pass on HP-UX -PA-RISC for 64bitall builds. - -=back - -=head3 VMS - -=over 4 - -=item * - -Remove unnecessary includes, fix miscellaneous compiler warnings and -close some unclosed comments on F<vms/vms.c>. - -Remove sockadapt layer from the VMS build. - -=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. - -=item * - -The build on VMS now allows names of the resulting symbols in C code for -Perl longer than 31 characters. Symbols like -C<Perl__it_was_the_best_of_times_it_was_the_worst_of_times> can now be -created freely without causing the VMS linker to seize up. - -=back - -=head3 GNU/Hurd - -Numerous build and test failures on GNU/Hurd have been resolved with hints -for building DBM modules, detection of the library search path, and enabling -of large file support. - -=head3 OpenVOS - -Perl is now built with dynamic linking on OpenVOS, the minimum supported -version of which is now Release 17.1.0. - -=head3 SunOS - -The CC workshop C++ compiler is now detected and used on systems that ship -without cc. - -=head1 Internal Changes - -=over 4 - -=item * - -The compiled representation of formats is now stored via the C<mg_ptr> of -their C<PERL_MAGIC_fm>. Previously it was stored in the string buffer, -beyond C<SvLEN()>, the regular end of the string. C<SvCOMPILED()> and -C<SvCOMPILED_{on,off}()> now exist solely for compatibility for XS code. -The first is always 0, the other two now no-ops. (5.14.1) - -=item * - -Some global variables have been marked C<const>, members in the interpreter -structure have been re-ordered, and the opcodes have been re-ordered. The -op C<OP_AELEMFAST> has been split into C<OP_AELEMFAST> and C<OP_AELEMFAST_LEX>. - -=item * - -When empting a hash of its elements (e.g. via undef(%h), or %h=()), HvARRAY -field is no longer temporarily zeroed. Any destructors called on the freed -elements see the remaining elements. Thus, %h=() becomes more like -C<delete $h{$_} for keys %h>. - -=item * - -Boyer-Moore compiled scalars are now PVMGs, and the Boyer-Moore tables are now -stored via the mg_ptr of their C<PERL_MAGIC_bm>. -Previously they were PVGVs, with the tables stored in -the string buffer, beyond C<SvLEN()>. This eliminates -the last place where the core stores data beyond C<SvLEN()>. - -=item * - -Simplified logic in C<Perl_sv_magic()> introduces a small change of -behaviour for error cases involving unknown magic types. Previously, if -C<Perl_sv_magic()> was passed a magic type unknown to it, it would - -=over - -=item 1. - -Croak "Modification of a read-only value attempted" if read only - -=item 2. - -Return without error if the SV happened to already have this magic - -=item 3. - -otherwise croak "Don't know how to handle magic of type \\%o" - -=back - -Now it will always croak "Don't know how to handle magic of type \\%o", even -on read only values, or SVs which already have the unknown magic type. - -=item * - -The experimental C<fetch_cop_label> function has been renamed to -C<cop_fetch_label>. - -=item * - -The C<cop_store_label> function has been added to the API, but is -experimental. - -=item * - -F<embedvar.h> has been simplified, and one level of macro indirection for -PL_* variables has been removed for the default (non-multiplicity) -configuration. PERLVAR*() macros now directly expand their arguments to -tokens such as C<PL_defgv>, instead of expanding to C<PL_Idefgv>, with -F<embedvar.h> defining a macro to map C<PL_Idefgv> to C<PL_defgv>. XS code -which has unwarranted chumminess with the implementation may need updating. - -=item * - -An API has been added to explicitly choose whether or not to export XSUB -symbols. More detail can be found in the comments for commit e64345f8. - -=item * - -The C<is_gv_magical_sv> function has been eliminated and merged with -C<gv_fetchpvn_flags>. It used to be called to determine whether a GV -should be autovivified in rvalue context. Now it has been replaced with a -new C<GV_ADDMG> flag (not part of the API). - -=item * - -The returned code point from the function C<utf8n_to_uvuni()> -when the input is malformed UTF-8, malformations are allowed, and -C<utf8> warnings are off is now the Unicode REPLACEMENT CHARACTER -whenever the malformation is such that no well-defined code point can be -computed. Previously the returned value was essentially garbage. The -only malformations that have well-defined values are a zero-length -string (0 is the return), and overlong UTF-8 sequences. - -=item * - -Padlists are now marked C<AvREAL>; i.e., reference-counted. They have -always been reference-counted, but were not marked real, because F<pad.c> -did its own clean-up, instead of using the usual clean-up code in F<sv.c>. -That caused problems in thread cloning, so now the C<AvREAL> flag is on, -but is turned off in F<pad.c> right before the padlist is freed (after -F<pad.c> has done its custom freeing of the pads). - -=item * - -All the C files that make up the Perl core have been converted to UTF-8. - -=item * - -These new functions have been added as part of the work on Unicode symbols: - - HvNAMELEN - HvNAMEUTF8 - HvENAMELEN - HvENAMEUTF8 - gv_init_pv - gv_init_pvn - gv_init_pvsv - gv_fetchmeth_pv - gv_fetchmeth_pvn - gv_fetchmeth_sv - gv_fetchmeth_pv_autoload - gv_fetchmeth_pvn_autoload - gv_fetchmeth_sv_autoload - gv_fetchmethod_pv_flags - gv_fetchmethod_pvn_flags - gv_fetchmethod_sv_flags - gv_autoload_pv - gv_autoload_pvn - gv_autoload_sv - newGVgen_flags - sv_derived_from_pv - sv_derived_from_pvn - sv_derived_from_sv - sv_does_pv - sv_does_pvn - sv_does_sv - whichsig_pv - whichsig_pvn - whichsig_sv - newCONSTSUB_flags - -The gv_fetchmethod_*_flags functions, like gv_fetchmethod_flags, are -experimental and may change in a future release. - -=item * - -The following functions were added. These are I<not> part of the API: - - GvNAMEUTF8 - GvENAMELEN - GvENAME_HEK - CopSTASH_flags - CopSTASH_flags_set - PmopSTASH_flags - PmopSTASH_flags_set - sv_sethek - HEKfARG - -There is also a C<HEKf> macro corresponding to C<SVf>, for -interpolating HEKs in formatted strings. - -=item * - -C<sv_catpvn_flags> takes a couple of new internal-only flags, -C<SV_CATBYTES> and C<SV_CATUTF8>, which tell it whether the char array to -be concatenated is UTF8. This allows for more efficient concatenation than -creating temporary SVs to pass to C<sv_catsv>. - -=item * - -For XS AUTOLOAD subs, $AUTOLOAD is set once more, as it was in 5.6.0. This -is in addition to setting C<SvPVX(cv)>, for compatibility with 5.8 to 5.14. -See L<perlguts/Autoloading with XSUBs>. - -=item * - -Perl now checks whether the array (the linearised isa) returned by a MRO -plugin begins with the name of the class itself, for which the array was -created, instead of assuming that it does. This prevents the first element -from being skipped during method lookup. It also means that -C<mro::get_linear_isa> may return an array with one more element than the -MRO plugin provided [perl #94306]. - -=item * - -C<PL_curstash> is now reference-counted. - -=item * - -There are now feature bundle hints in C<PL_hints> (C<$^H>) that version -declarations use, to avoid having to load F<feature.pm>. One setting of -the hint bits indicates a "custom" feature bundle, which means that the -entries in C<%^H> still apply. F<feature.pm> uses that. - -The C<HINT_FEATURE_MASK> macro is defined in F<perl.h> along with other -hints. Other macros for setting and testing features and bundles are in -the new F<feature.h>. C<FEATURE_IS_ENABLED> (which has moved to -F<feature.h>) is no longer used throughout the codebase, but more specific -macros, e.g., C<FEATURE_SAY_IS_ENABLED>, that are defined in F<feature.h>. - -=item * - -F<lib/feature.pm> is now a generated file, created by the new -F<regen/feature.pl> script, which also generates F<feature.h>. - -=item * - -Tied arrays are now always C<AvREAL>. If C<@_> or C<DB::args> is tied, it -is reified first, to make sure this is always the case. - -=item * - -Two new functions C<utf8_to_uvchr_buf()> and C<utf8_to_uvuni_buf()> have -been added. These are the same as C<utf8_to_uvchr> and -C<utf8_to_uvuni> (which are now deprecated), but take an extra parameter -that is used to guard against reading beyond the end of the input -string. -See L<perlapi/utf8_to_uvchr_buf> and L<perlapi/utf8_to_uvuni_buf>. - -=item * - -The regular expression engine now does TRIE case insensitive matches -under Unicode. This may change the output of C<< use re 'debug'; >>, -and will speed up various things. - -=item * - -There is a new C<wrap_op_checker()> function, which provides a thread-safe -alternative to writing to C<PL_check> directly. - -=back - -=head1 Selected Bug Fixes - -=head2 Array and hash - -=over - -=item * - -A bug has been fixed that would cause a "Use of freed value in iteration" -error if the next two hash elements that would be iterated over are -deleted [perl #85026]. (5.14.1) - -=item * - -Deleting the current hash iterator (the hash element that would be returend -by the next call to C<each>) in void context used not to free it -[perl #85026]. - -=item * - -Deletion of methods via C<delete $Class::{method}> syntax used to update -method caches if called in void context, but not scalar or list context. - -=item * - -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 * - -A C<keys> optimisation in Perl 5.12.0 to make it faster on empty hashes -caused C<each> not to reset the iterator if called after the last element -was deleted. - -=item * - -Freeing deeply nested hashes no longer crashes [perl #44225]. - -=item * - -It is possible from XS code to create hashes with elements that have no -values. The hash element and slice operators used to crash -when handling these in lvalue context. They now -produce a "Modification of non-creatable hash value attempted" error -message. - -=item * - -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 * - -It used to be possible to free the typeglob of a localised array or hash -(e.g., C<local @{"x"}; delete $::{x}>), resulting in a crash on scope exit. - -=item * - -Some core bugs affecting L<Hash::Util> have been fixed: locking a hash -element that is a glob copy no longer causes subsequent assignment to it to -corrupt the glob, and unlocking a hash element that holds a copy-on-write -scalar no longer causes modifications to that scalar to modify other -scalars that were sharing the same string buffer. - -=back - -=head2 C API fixes - -=over - -=item * - -The C<newHVhv> XS function now works on tied hashes, instead of crashing or -returning an empty hash. - -=item * - -The C<SvIsCOW> C macro now returns false for read-only copies of typeglobs, -such as those created by: - - $hash{elem} = *foo; - Hash::Util::lock_value %hash, 'elem'; - -It used to return true. - -=item * - -The C<SvPVutf8> C function no longer tries to modify its argument, -resulting in errors [perl #108994]. - -=item * - -C<SvPVutf8> now works properly with magical variables. - -=item * - -C<SvPVbyte> now works properly non-PVs. - -=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 * - -The C-level C<pregcomp> 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]. - -=back - -=head2 Compile-time hints - -=over - -=item * - -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<eval $string> and C<require> used not to -localise C<%^H> during compilation if it -was empty at the time the C<eval> call itself was compiled. This could -lead to scary side effects, like C<use re "/m"> enabling other flags that -the surrounding code was trying to enable for its caller [perl #68750]. - -=item * - -C<eval $string> and C<require> 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<BEGIN { $^H{foo}=7 }> equivalent to -C<BEGIN { eval '$^H{foo}=7' }> [perl #70151]. - -=item * - -Creating a BEGIN block from XS code (via C<newXS> or C<newATTRSUB>) 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. - -=back - -=head2 Copy-on-write scalars - -Copy-on-write or shared hash key scalars -were introduced in 5.8.0, but most Perl code -did not encounter them (they were used mostly internally). Perl -5.10.0 extended them, such that assigning C<__PACKAGE__> or a -hash key to a scalar would make it copy-on-write. Several parts -of Perl were not updated to account for them, but have now been fixed. - -=over - -=item * - -C<utf8::decode> had a nasty bug that would modify copy-on-write scalars' -string buffers in place (i.e., skipping the copy). This could result in -hashes having two elements with the same key [perl #91834]. - -=item * - -Lvalue subroutines were not allowing COW scalars to be returned. This was -fixed for lvalue scalar context in Perl 5.12.3 and 5.14.0, but list context -was not fixed until this release. - -=item * - -Elements of restricted hashes (see the L<fields> pragma) containing -copy-on-write values couldn't be deleted, nor could such hashes be cleared -(C<%hash = ()>). - -=item * - -Localising a tied variable used to make it read-only if it contained a -copy-on-write string. - -=item * - -Assigning a copy-on-write string to a stash -element no longer causes a double free. Regardless of this change, the -results of such assignments are still undefined. - -=item * - -Assigning a copy-on-write string to a tied variable no longer stops that -variable from being tied if it happens to be a PVMG or PVLV internally. - -=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 * - -This one is a regression from 5.12: In 5.14.0, the bitwise assignment -operators C<|=>, C<^=> and C<&=> started leaving the left-hand side -undefined if it happened to be a copy-on-write string [perl #108480]. - -=item * - -L<Storable>, L<Devel::Peek> and L<PerlIO::scalar> had similar problems. -See L</Updated Modules and Pragmata>, above. - -=back - -=head2 The debugger - -=over - -=item * - -F<dumpvar.pl>, and consequently the C<x> 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]. - -=item * - -The "R" command for restarting a debugger session has been fixed to work on -Windows, or any other system lacking a C<POSIX::_SC_OPEN_MAX> constant -[perl #87740]. - -=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. - -=item * - -When subroutine calls are intercepted by the debugger, the name of the -subroutine or a reference to it is stored in C<$DB::sub>, for the debugger -to access. In some cases (such as C<$foo = *bar; undef *bar; &$foo>) -C<$DB::sub> would be set to a name that could not be used to find the -subroutine, and so the debugger's attempt to call it would fail. Now the -check to see whether a reference is needed is more robust, so those -problems should not happen anymore [rt.cpan.org #69862]. - -=item * - -Every subroutine has a filename associated with it that the debugger uses. -The one associated with constant subroutines used to be misallocated when -cloned under threads. Consequently, debugging threaded applications could -result in memory corruption [perl #96126]. - -=back - -=head2 Dereferencing operators - -=over - -=item * - -C<defined(${"..."})>, C<defined(*{"..."})>, etc., used to -return true for most, but not all built-in variables, if -they had not been used yet. This bug affected C<${^GLOBAL_PHASE}> and -C<${^UTF8CACHE}>, among others. It also used to return false if the -package name was given as well (C<${"::!"}>) [perl #97978, #97492]. - -=item * - -Perl 5.10.0 introduced a similar bug: C<defined(*{"foo"})> where "foo" -represents the name of a built-in global variable used to return false if -the variable had never been used before, but only on the I<first> call. -This, too, has been fixed. - -=item * - -Since 5.6.0, C<*{ ... }> has been inconsistent in how it treats undefined -values. It would die in strict mode or lvalue context for most undefined -values, but would be treated as the empty string (with a warning) for the -specific scalar return by C<undef()> (C<&PL_sv_undef> internally). This -has been corrected. C<undef()> is now treated like other undefined -scalars, as in Perl 5.005. - -=back - -=head2 Filehandle, last-accessed - -Perl has an internal variable that stores the last filehandle to be -accessed. It is used by C<$.> and by C<tell> and C<eof> without -arguments. - -=over - -=item * - -It used to be possible to set this internal variable to a glob copy and -then modify that glob copy to be something other than a glob, and still -have the last-accessed filehandle associated with the variable after -assigning a glob to it again: - - my $foo = *STDOUT; # $foo is a glob copy - <$foo>; # $foo is now the last-accessed handle - $foo = 3; # no longer a glob - $foo = *STDERR; # still the last-accessed handle - -Now the C<$foo = 3> assignment unsets that internal variable, so there -is no last-accessed filehandle, just as if C<< <$foo> >> had never -happened. - -This also prevents some unrelated handle from becoming the last-accessed -handle if $foo falls out of scope and the same internal SV gets used for -another handle [perl #97988]. - -=item * - -A regression in 5.14 caused these statements not to set that internal -variable: - - my $fh = *STDOUT; - tell $fh; - eof $fh; - seek $fh, 0,0; - tell *$fh; - eof *$fh; - seek *$fh, 0,0; - readline *$fh; - -This is now fixed, but C<tell *{ *$fh }> still has the problem, and it -is not clear how to fix it [perl #106536]. - -=back - -=head2 Filetests and C<stat> - -The term "filetests" refers to the operators that consist of a hyphen -followed by a single letter: C<-r>, C<-x>, C<-M>, etc. The term "stacked" -when applied to filetests means followed by another filetest operator -sharing the same operand, as in C<-r -x -w $fooo>. - -=over - -=item * - -C<stat> produces more consistent warnings. It no longer warns for "_" -[perl #71002] and no longer skips the warning at times for other unopened -handles. It no longer warns about an unopened handle when the operating -system's C<fstat> function fails. - -=item * - -C<stat> would sometimes return negative numbers for large inode numbers, -because it was using the wrong internal C type. [perl #84590] - -=item * - -C<lstat> is documented to fall back to C<stat> (with a warning) when given -a filehandle. When passed an IO reference, it was actually doing the -equivalent of S<C<stat _>> and ignoring the handle. - -=item * - -C<-T _> with no preceding C<stat> used to produce a -confusing "uninitialized" warning, even though there -is no visible uninitialized value to speak of. - -=item * - -C<-T>, C<-B>, C<-l> and C<-t> now work -when stacked with other filetest operators -[perl #77388]. - -=item * - -In 5.14.0, filetest ops (C<-r>, C<-x>, etc.) started calling FETCH on a -tied argument belonging to the previous argument to a list operator, if -called with a bareword argument or no argument at all. This has been -fixed, so C<push @foo, $tied, -r> no longer calls FETCH on C<$tied>. - -=item * - -In Perl 5.6, C<-l> followed by anything other than a bareword would treat -its argument as a file name. That was changed in 5.8 for glob references -(C<\*foo>), but not for globs themselves (C<*foo>). C<-l> started -returning C<undef> for glob references without setting the last -stat buffer that the "_" handle uses, but only if warnings -were turned on. With warnings off, it was the same as 5.6. -In other words, it was simply buggy and inconsistent. Now the 5.6 -behaviour has been restored. - -=item * - -C<-l> followed by a bareword no longer "eats" the previous argument to -the list operator in whose argument list it resides. Hence, -C<print "bar", -l foo> now actually prints "bar", because C<-l> -on longer eats it. - -=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. - -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): - -=over - -=item * - -C<-T I<HANDLE>>, even though it does a C<stat>, was not resetting the last -stat type, so an C<lstat _> following it would merrily return the wrong -results. Also, it was not setting the success status. - -=item * - -Freeing the handle last used by C<stat> or a filetest could result in -S<C<-T _>> using an unrelated handle. - -=item * - -C<stat> with an IO reference would not reset the stat type or record the -filehandle for S<C<-T _>> to use. - -=item * - -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. -Fatal warnings also stopped C<-T> from setting C<$!>. - -=item * - -When the last stat was on an unreadable file, C<-T _> is supposed to -return C<undef>, leaving the last stat buffer unchanged. But it was -setting the stat type, causing C<lstat _> to stop working. - -=item * - -C<-T I<FILENAME>> was not resetting the internal stat buffers for -unreadable files. - -=back - -These have all been fixed. - -=back - -=head2 Formats - -=over - -=item * - -A number of edge cases have been fixed with formats and C<formline>; -in particular, where the format itself is potentially variable (such as -with ties and overloading), and where the format and data differ in their -encoding. In both these cases, it used to possible for the output to be -corrupted [perl #91032]. - -=item * - -C<formline> no longer converts its argument into a string in-place. So -passing a reference to C<formline> no longer destroys the reference -[perl #79532]. - -=item * - -Assignment to C<$^A> (the format output accumulator) now recalculates -the number of lines output. - -=back - -=head2 C<given> and C<when> - -=over - -=item * - -C<given> was not scoping its implicit $_ properly, resulting in memory -leaks or "Variable is not available" warnings [perl #94682]. - -=item * - -C<given> was not calling set-magic on the implicit lexical C<$_> that it -uses. This meant, for example, that C<pos> would be remembered from one -execution of the same C<given> block to the next, even if the input were a -different variable [perl #84526]. - -=item * - -C<when> blocks are now capable of returning variables declared inside the -enclosing C<given> block [perl #93548]. - -=back - -=head2 The C<glob> operator - -=over - -=item * - -On OSes other than VMS, Perl's C<glob> operator (and the C<< <...> >> form) -use L<File::Glob> underneath. L<File::Glob> splits the pattern into words, -before feeding each word to its C<bsd_glob> function. - -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]. - -=item * - -C<CORE::glob> now works as a way to call the default globbing function. It -used to respect overrides, despite the C<CORE::> prefix. - -=item * - -Under miniperl (used to configure modules when perl itself is built), -C<glob> now clears %ENV before calling csh, since the latter croaks on some -systems if it does not like the contents of the LS_COLORS enviroment -variable [perl #98662]. - -=back - -=head2 Lvalue subroutines - -=over - -=item * - -Explicit return now returns the actual argument passed to return, instead -of copying it [perl #72724, #72706]. - -=item * - -Lvalue subroutines used to enforce lvalue syntax (i.e., whatever can go on -the left-hand side of C<=>) for the last statement and the arguments to -return. Since lvalue subroutines are not always called in lvalue context, -this restriction has been lifted. - -=item * - -Lvalue subroutines are less restrictive as to what values can be returned. -It used to croak on values returned by C<shift> and C<delete> and from -other subroutines, but no longer does so [perl #71172]. - -=item * - -Empty lvalue subroutines (C<sub :lvalue {}>) used to return C<@_> in list -context. In fact, all subroutines used to, but regular subs were fixed in -Perl 5.8.2. Now lvalue subroutines have been likewise fixed. - -=item * - -Autovivification now works on values returned from lvalue subroutines -[perl #7946], as does returning C<keys> in lvalue context. - -=item * - -Lvalue subroutines used to copy their return values in rvalue context. Not -only was this a waste of CPU cycles, but it also caused bugs. A C<($)> -prototype would cause an lvalue sub to copy its return value [perl #51408], -and C<while(lvalue_sub() =~ m/.../g) { ... }> would loop endlessly -[perl #78680]. - -=item * - -When called in potential lvalue context -(e.g., subroutine arguments or a list -passed to C<for>), lvalue subroutines used to copy -any read-only value that was returned. E.g., C< sub :lvalue { $] } > -would not return C<$]>, but a copy of it. - -=item * - -When called in potential lvalue context, an lvalue subroutine returning -arrays or hashes used to bind the arrays or hashes to scalar variables, -resulting in bugs. This was fixed in 5.14.0 if an array were the first -thing returned from the subroutine (but not for C<$scalar, @array> or -hashes being returned). Now a more general fix has been applied -[perl #23790]. - -=item * - -Method calls whose arguments were all surrounded with C<my()> or C<our()> -(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. - -=item * - -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 * - -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<are> 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 * - -C<AUTOLOAD> 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 * - -Applying the C<:lvalue> attribute to an XSUB or to an aliased subroutine -stub with C<< sub foo :lvalue; >> syntax stopped working in Perl 5.12. -This has been fixed. - -=item * - -Applying the :lvalue attribute to subroutine that is already defined does -not work properly, as the attribute changes the way the sub is compiled. -Hence, Perl 5.12 began warning when an attempt is made to apply the -attribute to an already defined sub. In such cases, the attribute is -discarded. - -But the change in 5.12 missed the case where custom attributes are also -present: that case still silently and ineffectively applied the attribute. -That omission has now been corrected. C<sub foo :lvalue :Whatever> (when -C<foo> is already defined) now warns about the :lvalue attribute, and does -not apply it. - -=item * - -A bug affecting lvalue context propagation through nested lvalue subroutine -calls has been fixed. Previously, returning a value in nested rvalue -context would be treated as lvalue context by the inner subroutine call, -resulting in some values (such as read-only values) being rejected. - -=back - -=head2 Overloading - -=over - -=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 * - -Errors that occur when methods cannot be found during overloading now -mention the correct package name, as they did in 5.8.x, instead of -erroneously mentioning the "overload" package, as they have since 5.10.0. - -=item * - -Undefining C<%overload::> no longer causes a crash. - -=back - -=head2 Prototypes of built-in keywords - -=over - -=item * - -The C<prototype> function no longer dies for the C<__FILE__>, C<__LINE__> -and C<__PACKAGE__> directives. It now returns an empty-string prototype -for them, because they are syntactically indistinguishable from nullary -functions like C<time>. - -=item * - -C<prototype> now returns C<undef> for all overridable infix operators, -such as C<eq>, which are not callable in any way resembling functions. -It used to return incorrect prototypes for some and die for others -[perl #94984]. - -=item * - -The prototypes of several built-in functions--C<getprotobynumber>, C<lock>, -C<not> and C<select>--have been corrected, or at least are now closer to -reality than before. - -=back - -=head2 Regular expressions - -=for comment Is it possible to merge some of these items? - -=over 4 - -=item * - -C</[[:ascii:]]/> and C</[[:blank:]]/> now use locale rules under -C<use locale> when the platform supports that. Previously, they used -the platform's native character set. - -=item * - -C<m/[[:ascii:]]/i> and C</\p{ASCII}/i> 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 * - -C</.*/g> would sometimes refuse to match at the end of a string that ends -with "\n". This has been fixed [perl #109206]. - -=item * - -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<Hash::Util>. This could result in double frees, crashes or erratic -behaviour. - -=item * - -The new (in 5.14.0) regular expression modifier C</a> when repeated like -C</aa> forbids the characters outside the ASCII range that match -characters inside that range from matching under C</i>. This did not -work under some circumstances, all involving alternation, such as: - - "\N{KELVIN SIGN}" =~ /k|foo/iaa; - -succeeded inappropriately. This is now fixed. - -=item * - -5.14.0 introduced some memory leaks in regular expression character -classes such as C<[\w\s]>, which have now been fixed. (5.14.1) - -=item * - -An edge case in regular expression matching could potentially loop. -This happened only under C</i> in bracketed character classes that have -characters with multi-character folds, and the target string to match -against includes the first portion of the fold, followed by another -character that has a multi-character fold that begins with the remaining -portion of the fold, plus some more. - - "s\N{U+DF}" =~ /[\x{DF}foo]/i - -is one such case. C<\xDF> folds to C<"ss">. (5.14.1) - -=item * - -A few characters in regular expression pattern matches did not -match correctly in some circumstances, all involving C</i>. The -affected characters are: -COMBINING GREEK YPOGEGRAMMENI, -GREEK CAPITAL LETTER IOTA, -GREEK CAPITAL LETTER UPSILON, -GREEK PROSGEGRAMMENI, -GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA, -GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS, -GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA, -GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS, -LATIN SMALL LETTER LONG S, -LATIN SMALL LIGATURE LONG S T, -and -LATIN SMALL LIGATURE ST. - -=item * - -A memory leak regression in regular expression compilation -under threading has been fixed. - -=item * - -A regression introduced in 5.13.6 has -been 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. - -=item * - -Three problematic Unicode characters now work better in regex pattern matching under C</i> - -In the past, three Unicode characters: -LATIN SMALL LETTER SHARP S, -GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS, -and -GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS, -along with the sequences that they fold to -(including "ss" in the case of LATIN SMALL LETTER SHARP S), -did not properly match under C</i>. 5.14.0 fixed some of these cases, -but introduced others, including a panic when one of the characters or -sequences was used in the C<(?(DEFINE)> regular expression predicate. -The known bugs that were introduced in 5.14 have now been fixed; as well -as some other edge cases that have never worked until now. All these -involve using the characters and sequences outside bracketed character -classes under C</i>. This closes [perl #98546]. - -There remain known problems when using certain characters with -multi-character folds inside bracketed character classes, including such -constructs as C<qr/[\N{LATIN SMALL LETTER SHARP}a-z]/i>. These -remaining bugs are addressed in [perl #89774]. - -=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 * - -In 5.14, C</[[:lower:]]/i> and C</[[:upper:]]/i> no longer matched the -opposite case. This has been fixed [perl #101970]. - -=item * - -A regular expression match with an overloaded object on the right-hand side -would in some cases stringify the object too many times. - -=item * - -A regression has been fixed that was introduced in 5.14, in C</i> -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] - -=item * - -In case-insensitive regular expression pattern matching, no longer on -UTF-8 encoded strings does the scan for the start of match only look at -the first possible position. This caused matches such as -C<"f\x{FB00}" =~ /ff/i> to fail. - -=item * - -The regexp optimiser no longer crashes on debugging builds when merging -fixed-string nodes with inconvenient contents. - -=item * - -A panic involving the combination of the regular expression modifiers -C</aa> and the C<\b> escape sequence introduced in 5.14.0 has been -fixed [perl #95964]. - -=item * - -The combination of the regular expression modifiers C</aa> and the C<\b> -and C<\B> escape sequences did not work properly on UTF-8 encoded -strings. All non-ASCII characters under C</aa> should be treated as -non-word characters, but what was happening was that Unicode rules were -used to determine wordness/non-wordness for non-ASCII characters. This -is now fixed [perl #95968]. - -=item * - -C<< (?foo: ...) >> no longer loses passed in character set. - -=item * - -The trie optimisation used to have problems with alternations containing -an empty C<(?:)>, causing C<< "x" =~ /\A(?>(?:(?:)A|B|C?x))\z/ >> not to -match, whereas it should [perl #111842]. - -=item * - -Use of lexical (C<my>) variables in code blocks embedded in regular -expressions will no longer result in memory corruption or crashes. - -Nevertheless, these code blocks are still experimental, as there are still -problems with the wrong variables being closed over (in loops for instance) -and with abnormal exiting (e.g., C<die>) causing memory corruption. - -=item * - -The C<\h>, C<\H>, C<\v> and C<\V> regular expression metacharacters used to -cause a panic error message when attempting to match at the end of the -string [perl #96354]. - -=item * - -The abbreviations for four C1 control characters C<MW> C<PM>, C<RI>, and -C<ST> were previously unrecognized by C<\N{}>, vianame(), and -string_vianame(). - -=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]. - -=item * - -Creating a C<UNIVERSAL::AUTOLOAD> sub no longer stops C<%+>, C<%-> and -C<%!> from working some of the time [perl #105024]. - -=back - -=head2 Smartmatching - -=over - -=item * - -C<~~> now correctly handles the precedence of Any~~Object, and is not tricked -by an overloaded object on the left-hand side. - -=item * - -In Perl 5.14.0, C<$tainted ~~ @array> stopped working properly. Sometimes -it would erroneously fail (when C<$tainted> contained a string that occurs -in the array I<after> the first element) or erroneously succeed (when -C<undef> occurred after the first element) [perl #93590]. - -=back - -=head2 The C<sort> operator - -=over - -=item * - -C<sort> was not treating C<sub {}> and C<sub {()}> as equivalent when -such a sub was provided as the comparison routine. It used to croak on -C<sub {()}>. - -=item * - -C<sort> now works once more with custom sort routines that are XSUBs. It -stopped working in 5.10.0. - -=item * - -C<sort> with a constant for a custom sort routine, although it produces -unsorted results, no longer crashes. It started crashing in 5.10.0. - -=item * - -Warnings emitted by C<sort> when a custom comparison routine returns a -non-numeric value now contain "in sort" and show the line number of the -C<sort> operator, rather than the last line of the comparison routine. The -warnings also occur now only if warnings are enabled in the scope where -C<sort> occurs. Previously the warnings would occur if enabled in the -comparison routine's scope. - -=item * - -C<< sort { $a <=> $b } >>, which is optimised internally, now produces -"uninitialized" warnings for NaNs (not-a-number values), since C<< <=> >> -returns C<undef> for those. This brings it in line with -S<C<< sort { 1; $a <=> $b } >>> and other more complex cases, which are not -optimised [perl #94390]. - -=back - -=head2 The C<substr> operator - -=over - -=item * - -Tied (and otherwise magical) variables are no longer exempt from the -"Attempt to use reference as lvalue in substr" warning. - -=item * - -That warning now occurs when the returned lvalue is assigned to, not -when C<substr> itself is called. This only makes a difference if the -return value of C<substr> is referenced and assigned to later. - -=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<substr>. - -=item * - -C<substr> assignments no longer call FETCH twice if the first argument -is a tied variable, just once. - -=back - -=head2 Support for embedded nulls - -Some parts of Perl did not work correctly with nulls (C<chr 0>) embedded in -strings. That meant that, for instance, C<< $m = "a\0b"; foo->$m >> would -call the "a" method, instead of the actual method name contained in $m. -These parts of perl have been fixed to support nulls: - -=over - -=item * - -Method names - -=item * - -Typeglob names (including filehandle and subroutine names) - -=item * - -Package names, including the return value of C<ref()> - -=item * - -Typeglob elements (C<*foo{"THING\0stuff"}>) - -=item * - -Signal names - -=item * - -Various warnings and error messages that mention variable names or values, -methods, etc. - -=back - -One side effect of these changes is that blessing into "\0" no longer -causes C<ref()> to return false. - -=head2 Threading bugs - -=over - -=item * - -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 * - -Some cases of threads crashing due to memory allocation during cloning have -been fixed [perl #90006]. - -=item * - -Thread joining would sometimes emit "Attempt to free unreferenced scalar" -warnings if C<caller> had been used from the C<DB> package prior to thread -creation [perl #98092]. - -=item * - -Locking a subroutine (via C<lock &sub>) is no longer a compile-time error -for regular subs. For lvalue subroutines, it no longer tries to return the -sub as a scalar, resulting in strange side effects like C<ref \$_> -returning "CODE" in some instances. - -C<lock &sub> is now a run-time error if L<threads::shared> is loaded (a -no-op otherwise), but that may be rectified in a future version. - -=back - -=head2 Tied variables - -=over - -=item * - -Various cases in which FETCH was being ignored or called too many times -have been fixed: - -=over - -=item * - -C<PerlIO::get_layers> [perl #97956] - -=item * - -C<$tied =~ y/a/b/>, C<chop $tied> and C<chomp $tied> when $tied holds a -reference. - -=item * - -When calling C<local $_> [perl #105912] - -=item * - -Four-argument C<select> - -=item * - -A tied buffer passed to C<sysread> - -=item * - -C<< $tied .= <> >> - -=item * - -Three-argument C<open>, the third being a tied file handle -(as in C<< open $fh, ">&", $tied >>) - -=item * - -C<sort> with a reference to a tied glob for the comparison routine. - -=item * - -C<..> and C<...> in list context [perl #53554]. - -=item * - -C<${$tied}>, C<@{$tied}>, C<%{$tied}> and C<*{$tied}> where the tied -variable returns a string (C<&{}> was unaffected) - -=item * - -C<defined ${ $tied_variable }> - -=item * - -Various functions that take a filehandle argument in rvalue context -(C<close>, C<readline>, etc.) [perl #97482] - -=item * - -Some cases of dereferencing a complex expression, such as -C<${ (), $tied } = 1>, used to call C<FETCH> multiple times, but now call -it once. - -=item * - -C<$tied-E<gt>method> where $tied returns a package name--even resulting in -a failure to call the method, due to memory corruption - -=item * - -Assignments like C<*$tied = \&{"..."}> and C<*glob = $tied> - -=item * - -C<chdir>, C<chmod>, C<chown>, C<utime>, C<truncate>, C<stat>, C<lstat> and -the filetest ops (C<-r>, C<-x>, etc.) - -=back - -=item * - -C<caller> 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 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 * - -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]. - -=item * - -Four-argument C<select> no longer produces its "Non-string passed as -bitmask" warning on tied or tainted variables that are strings. - -=item * - -Localising a tied scalar that returns a typeglob no longer stops it from -being tied till the end of the scope. - -=item * - -Attempting to C<goto> out of a tied handle method used to cause memory -corruption or crashes. Now it produces an error message instead -[perl #8611]. - -=item * - -A bug has been fixed that occurs when a tied variable is used as a -subroutine reference: if the last thing assigned to or returned from the -variable was a reference or typeglob, the C<\&$tied> could either crash or -return the wrong subroutine. The reference case is a regression introduced -in Perl 5.10.0. For typeglobs, it has probably never worked till now. - -=back - -=head2 Version objects and vstrings - -=over - -=item * - -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<B::Deparse> to deparse C<~v1.2.3> -incorrectly, without the C<~> [perl #29070]. - -=item * - -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<< version->new("version") >> and C<printf "%vd", "version"> no longer -crash [perl #102586]. - -=item * - -Version comparisons, such as those that happen implicitly with C<use -v5.43>, no longer cause locale settings to change [perl #105784]. - -=item * - -Version objects no longer cause memory leaks in boolean context -[perl #109762]. - -=back - -=head2 Warnings, redefinition - -=over - -=item * - -Subroutines from the C<autouse> 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<autouse> 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<autouse> logic was reversed in -5.10-14. Only subroutines from the C<autouse> namespace would warn -when clobbered.) - -=item * - -C<newCONSTSUB> 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<newCONSTSUB> redefined an existing -subroutine: - - use warnings; - BEGIN { - no warnings; - some_XS_function_that_calls_new_CONSTSUB(); - } - -=item * - -Redefinition warnings for constant subroutines are on by default (what -are known as severe warnings in L<perldiag>). 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 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} - -=back - -=head2 Warnings, "Uninitialized" - -=over - -=item * - -Various functions that take a filehandle argument in rvalue context -(C<close>, C<readline>, etc.) used to warn twice for an undefined handle -[perl #97482]. - -=item * - -C<dbmopen> now only warns once, rather than three times, if the mode -argument is C<undef> [perl #90064]. - -=item * - -The C<+=> operator does not usually warn when the left-hand side is -C<undef>, but it was doing so for tied variables. This has been fixed -[perl #44895]. - -=item * - -A bug fix in Perl 5.14 introduced a new bug, causing "uninitialized" -warnings to report the wrong variable if the operator in question had -two operands and one was C<%{...}> or C<@{...}>. This has been fixed -[perl #103766]. - -=item * - -C<..> and C<...> in list context now mention the name of the variable in -"uninitialized" warnings for string (as opposed to numeric) ranges. - -=back - -=head2 Weak references - -=over - -=item * - -Weakening the first argument to an automatically-invoked C<DESTROY> method -could result in erroneous "DESTROY created new reference" errors or -crashes. Now it is an error to weaken a read-only reference. - -=item * - -Weak references to lexical hashes going out of scope were not going stale -(becoming undefined), but continued to point to the hash. - -=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. - -=item * - -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]. - -=back - -=head2 Other notable fixes - -=over - -=item * - -C<quotemeta> now quotes consistently the same non-ASCII characters under -C<use feature 'unicode_strings'>, regardless of whether the string is -encoded in UTF-8 or not, hence fixing the last vestiges (we hope) of the -infamous L<perlunicode/The "Unicode Bug">. [perl #77654]. - -Which of these code points is quoted has changed, based on Unicode's -recommendations. See L<perlfunc/quotemeta> for details. - -=item * - -When one writes C<open foo || die>, 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 * - -After package aliasing (C<*foo:: = *bar::>), C<select> 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<undef> even when a filehandle -was selected. Now it returns a typeglob reference in such cases. - -=item * - -C<PerlIO::get_layers> 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 * - -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<system> now temporarily blocks the SIGCHLD signal handler, to prevent the -signal handler from stealing the exit status [perl #105700]. - -=item * - -The %n formatting code for C<printf> and C<sprintf>, which causes the number -of characters to be assigned to the next argument, now actually -assigns the number of characters, instead of the number of bytes. - -It also works now with special lvalue functions like C<substr> and with -nonexistent hash and array elements [perl #3471, #103492]. - -=item * - -Perl skips copying values returned from a subroutine, for the sake of -speed, if doing so would make no observable difference. Due to faulty -logic, this would happen with the -result of C<delete>, C<shift> or C<splice>, even if the result was -referenced elsewhere. It also did so with tied variables about to be freed -[perl #91844, #95548]. - -=item * - -C<utf8::decode> now refuses to modify read-only scalars [perl #91850]. - -=item * - -Freeing $_ inside a C<grep> or C<map> block, a code block embedded in a -regular expression, or an @INC filter (a subroutine returned by a -subroutine in @INC) used to result in double frees or crashes -[perl #91880, #92254, #92256]. - -=item * - -C<eval> returns C<undef> in scalar context or an empty list in list -context when there is a run-time error. When C<eval> was passed a -string in list context and a syntax error occurred, 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]. - -=item * - -C<goto &func> no longer 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 * - -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]: - - package Foo; - BEGIN {*Foo:: = *Bar::} - sub foo; - -=item * - -The C<x> repetition operator no longer crashes on 64-bit builds with large -repeat counts [perl #94560]. - -=item * - -Calling C<require> on an implicit C<$_> when C<*CORE::GLOBAL::require> has -been overridden does not segfault anymore, and C<$_> is now passed to the -overriding subroutine [perl #78260]. - -=item * - -C<use> and C<require> are no longer affected by the I/O layers active in -the caller's scope (enabled by L<open.pm|open>) [perl #96008]. - -=item * - -C<our $::é; $é> (which is invalid) no longer produces the "Compilation -error at lib/utf8_heavy.pl..." error message, which it started emitting in -5.10.0 [perl #99984]. - -=item * - -On 64-bit systems, C<read()> now understands large string offsets beyond -the 32-bit range. - -=item * - -Errors that occur when processing subroutine attributes no longer cause the -subroutine's op tree to leak. - -=item * - -Passing the same constant subroutine to both C<index> and C<formline> no -longer causes one or the other to fail [perl #89218]. (5.14.1) - -=item * - -List assignment to lexical variables declared with attributes in the same -statement (C<my ($x,@y) : blimp = (72,94)>) stopped working in Perl 5.8.0. -It has now been fixed. - -=item * - -Perl 5.10.0 introduced some faulty logic that made "U*" in the middle of -a pack template equivalent to "U0" if the input string was empty. This has -been fixed [perl #90160]. - -=item * - -Destructors on objects were not called during global destruction on objects -that were not referenced by any scalars. This could happen if an array -element were blessed (e.g., C<bless \$a[0]>) or if a closure referenced a -blessed variable (C<bless \my @a; sub foo { @a }>). - -Now there is an extra pass during global destruction to fire destructors on -any objects that might be left after the usual passes that check for -objects referenced by scalars [perl #36347]. - -=item * - -Fixed a case where it was possible that a freed buffer may have been read -from when parsing a here document [perl #90128]. (5.14.1) - -=item * - -C<each(I<ARRAY>)> is now wrapped in C<defined(...)>, like C<each(I<HASH>)>, -inside a C<while> condition [perl #90888]. - -=item * - -A problem with context propagation when a C<do> block is an argument to -C<return> has been fixed. It used to cause C<undef> to be returned in -some cases of a C<return> inside an C<if> block which itself is followed by -another C<return>. - -=item * - -Calling C<index> with a tainted constant no longer causes constants in -subsequently compiled code to become tainted [perl #64804]. - -=item * - -Infinite loops like C<1 while 1> used to stop C<strict 'subs'> mode from -working for the rest of the block.t - -=item * - -For list assignments like C<($a,$b) = ($b,$a)>, Perl has to make a copy of -the items on the right-hand side before assignment them to the left. For -efficiency's sake, it assigns the values on the right straight to the items -on the left if no one variable is mentioned on both sides, as in C<($a,$b) = -($c,$d)>. The logic for determining when it can cheat was faulty, in that -C<&&> and C<||> on the right-hand side could fool it. So C<($a,$b) = -$some_true_value && ($b,$a)> would end up assigning the value of C<$b> to -both scalars. - -=item * - -Perl no longer tries to apply lvalue context to the string in -C<("string", $variable) ||= 1> (which used to be an error). Since the -left-hand side of C<||=> is evaluated in scalar context, that's a scalar -comma operator, which gives all but the last item void context. There is -no such thing as void lvalue context, so it was a mistake for Perl to try -to force it [perl #96942]. - -=item * - -C<caller> no longer leaks memory when called from the DB package if -C<@DB::args> was assigned to after the first call to C<caller>. L<Carp> -was triggering this bug [perl #97010]. - -=item * - -C<close> and similar filehandle functions, when called on built-in global -variables (like C<$+>), used to die if the variable happened to hold the -undefined value, instead of producing the usual "Use of uninitialized -value" warning. - -=item * - -When autovivified file handles were introduced in Perl 5.6.0, C<readline> -was inadvertently made to autovivify when called as C<readline($foo)> (but -not as C<E<lt>$fooE<gt>>). It has now been fixed never to autovivify. - -=item * - -Calling an undefined anonymous subroutine (e.g., what $x holds after -C<undef &{$x = sub{}}>) used to cause a "Not a CODE reference" error, which -has been corrected to "Undefined subroutine called" [perl #71154]. - -=item * - -Causing C<@DB::args> to be freed between uses of C<caller> no longer -results in a crash [perl #93320]. - -=item * - -C<setpgrp($foo)> used to be equivalent to C<($foo, setpgrp)>, because -C<setpgrp> was ignoring its argument if there was just one. Now it is -equivalent to C<setpgrp($foo,0)>. - -=item * - -C<shmread> was not setting the scalar flags correctly when reading from -shared memory, causing the existing cached numeric representation in the -scalar to persist [perl #98480]. - -=item * - -C<++> and C<--> now work on copies of globs, instead of dying. - -=item * - -C<splice()> doesn't warn when truncating - -You can now limit the size of an array using C<splice(@a,MAX_LEN)> without -worrying about warnings. - -=item * - -C<< $$ >> is no longer tainted. Since this value comes directly from -C<< getpid() >>, it is always safe. - -=item * - -The parser no longer leaks a filehandle if STDIN was closed before parsing -started [perl #37033]. - -=item * - -C<< die; >> with a non-reference, non-string, or magical (e.g., tainted) -value in $@ now properly propagates that value [perl #111654]. - -=back - -=head1 Known Problems - -=over 4 - -=item * - -On Solaris, we have two kinds of failure. - -If F<make> is Sun's F<make≥>, we get an error about a badly formed macro -assignment in the F<Makefile>. That happens when F<./Configure> tries to -make depends. F<Configure> then exits 0, but further F<make>-ing fails. - -If F<make> is F<gmake>, F<Configure> completes, then we get errors related -to F</usr/include/stdbool.h> - -=item * - -The following CPAN modules have test failures with perl 5.16. Patches have -been submitted for all of these, so hopefully there will be new releases -soon: - -=over - -=item * - -L<Date::Pcalc> version 6.1 - -=item * - -L<Module::CPANTS::Analyse> version 0.85 - -This fails due to problems in L<Module::Find> 0.10 and L<File::MMagic> -1.27. - -=item * - -L<PerlIO::Util> version 0.72 - -=back - -=back - -=head1 Acknowledgements - -XXX Generate this with: - - perl Porting/acknowledgements.pl v5.14.0..HEAD - -=head1 Reporting Bugs - -If you find what you think is a bug, you might check the articles -recently posted to the comp.lang.perl.misc newsgroup and the perl -bug database at L<http://rt.perl.org/perlbug/>. There may also be -information at L<http://www.perl.org/>, the Perl Home Page. - -If you believe you have an unreported bug, please run the L<perlbug> -program included with your release. Be sure to trim your bug down -to a tiny but sufficient test case. Your bug report, along with the -output of C<perl -V>, will be sent off to perlbug@perl.org to be -analysed by the Perl porting team. - -If the bug you are reporting has security implications, which make it -inappropriate to send to a publicly archived mailing list, then please -send it to perl5-security-report@perl.org. This points to a closed -subscription unarchived mailing list, which includes all the core -committers, who will be able to help assess the impact of issues, figure -out a resolution, and help co-ordinate the release of patches to -mitigate or fix the problem across all platforms on which Perl is -supported. Please only use this address for security issues in the Perl -core, not for modules independently distributed on CPAN. - -=head1 SEE ALSO - -The F<Changes> file for an explanation of how to view exhaustive details -on what changed. - -The F<INSTALL> file for how to build Perl. - -The F<README> file for general stuff. - -The F<Artistic> and F<Copying> files for copyright information. - -=cut diff --git a/pod/perl.pod b/pod/perl.pod index 108535a152..ce39999050 100644 --- a/pod/perl.pod +++ b/pod/perl.pod @@ -177,16 +177,7 @@ aux a2p c2ph h2ph h2xs perlbug pl2pm pod2html pod2man s2p splain xsubpp perlhist Perl history records perldelta Perl changes since previous version - perl5159delta Perl changes in version 5.15.9 - perl5158delta Perl changes in version 5.15.8 - perl5157delta Perl changes in version 5.15.7 - perl5156delta Perl changes in version 5.15.6 - perl5155delta Perl changes in version 5.15.5 - perl5154delta Perl changes in version 5.15.4 - perl5153delta Perl changes in version 5.15.3 - perl5152delta Perl changes in version 5.15.2 - perl5151delta Perl changes in version 5.15.1 - perl5150delta Perl changes in version 5.15.0 + perl5160delta Perl changes in version 5.16.0 perl5142delta Perl changes in version 5.14.2 perl5141delta Perl changes in version 5.14.1 perl5140delta Perl changes in version 5.14.0 diff --git a/pod/perl5150delta.pod b/pod/perl5150delta.pod deleted file mode 100644 index c9f216c4a7..0000000000 --- a/pod/perl5150delta.pod +++ /dev/null @@ -1,1256 +0,0 @@ -=encoding utf8 - -=head1 NAME - -perl5150delta - what is new for perl v5.15.0 - -=head1 DESCRIPTION - -This document describes differences between the 5.15.0 release and -the 5.14.0 release. - -If you are upgrading from an earlier release such as 5.12.0, first read -L<perl5140delta>, which describes differences between 5.12.0 and -5.14.0. - -Some of the changes have been included in Perl 5.14.1. These are -indicated with a "(5.14.1)" marker. - -=head1 Core Enhancements - -=head2 C<CORE::> works on all keywords - -The C<CORE::> prefix can now be used on keywords enabled by -L<feature.pm|feature>, even outside the scope of C<use feature>. Relevant -documentation files L<CORE>, L<feature>, L<perlfunc>, L<perlsub>, and -L<perlsyn> have been updated. - -=head2 C<continue> no longer requires the "switch" feature - -The C<continue> keyword has two meanings. It can introduce a C<continue> -block after a loop, or it can exit the current C<when> block. Up till now, -the latter meaning was only valid with the "switch" feature enabled, and -was a syntax error otherwise. Since the main purpose of feature.pm is to -avoid conflicts with user-defined subroutines, there is no reason for -C<continue> to depend on it. - -=head2 C<$$> can be assigned to - -C<$$> was made read-only in Perl 5.8.0. But only sometimes: C<local $$> -would make it writable again. Some CPAN modules were using C<local $$> or -XS code to bypass the read-only check, so there is no reason to keep C<$$> -read-only. (This change also allowed a bug to be fixed while maintaining -backward compatibility.) - -=head2 Features inside the debugger - -The current Perl's feature bundle is now enabled for commands entered in -the interactive debugger. - -=head2 C<\N{...}> can now have Unicode loose name matching - -This is described in the C<charnames> item in -L</Updated Modules and Pragmata> below. - -=head2 Breakpoints with file names - -The debugger's "b" command for setting breakpoints now allows a line number -to be prefixed with a file name. See -L<perldebug/"b [file]:[line] [condition]">. - -=head1 Security - -No changes since 5.14.0. - -=head1 Incompatible Changes - -=head2 Tying scalars that hold typeglobs - -Attempting to tie a scalar after a typeglob was assigned to it would -instead tie the handle in the typeglob's IO slot. This meant that it was -impossible to tie the scalar itself. Similar problems affected C<tied> and -C<untie>: C<tied $scalar> would return false on a tied scalar if the last -thing returned was a typeglob, and C<untie $scalar> on such a tied scalar -would do nothing. - -We fixed this problem before Perl 5.14.0, but it caused problems with some -CPAN modules, so we put in a deprecation cycle instead. - -Now the deprecation has been removed and this bug has been fixed. So -C<tie $scalar> will always tie the scalar, not the handle it holds. To tie -the handle, use C<tie *$scalar> (with an explicit asterisk). The same -applies to C<tied *$scalar> and C<untie *$scalar>. - -=head2 IPC::Open3 no longer provides C<xfork()>, C<xclose_on_exec()> -and C<xpipe_anon()> - -All three functions were private, undocumented and unexported. They do -not appear to be used by any code on CPAN. Two have been inlined and one -deleted entirely. - -=head2 C<$$> no longer caches PID - -Previously, if one embeds Perl or uses XS and calls fork(3) from C, Perl's -notion of C<$$> could go out of sync with what getpid() returns. By always -fetching the value of C<$$> via getpid(), this potential bug is eliminated. -Code that depends on the caching behavior will break. As described in -L</Core Enhancements>, C<$$> is now writable, but it will be reset during a -fork. - -=head1 Deprecations - -There have been no deprecations since 5.14.0. - -=head1 Performance Enhancements - -There are no benchmarked enhancements since 5.14.0. - -=head1 Modules and Pragmata - -=head2 New Modules and Pragmata - -None. - -=head2 Updated Modules and Pragmata - -=over 4 - -=item * - -L<charnames> has been updated from version 1.18 to version 1.22 - -L<charnames> can now be invoked with a new option, C<:loose>, -which is like the existing C<:full> option, but enables Unicode loose -name matching. Details are in L<charnames/LOOSE MATCHES>. - -=item * - -L<constant> has been updated from version 1.21 to 1.22. - -=item * - -L<Archive::Extract> has been upgraded from version 0.48 to version 0.52 - -Includes a fix for FreeBSD to only use C<unzip> if it is located in -C</usr/local/bin>, as FreeBSD 9.0 will ship with a limited C<unzip> in -C</usr/bin>. - -=item * - -L<Attribute::Handlers> updated from version 0.88 to 0.91 - -=item * - -L<B> has been upgraded from version 1.29 to version 1.30. - -=item * - -L<B::Deparse> has been upgraded from version 1.03 to 1.05. (Perl 5.14.1 -had version 1.04.) - -It addresses two regressions in Perl 5.14.0: - -=over - -=item * - -Deparsing of the C<glob> operator and its diamond (C<< <> >>) form now -works again [perl #90898] (5.14.1). - -=item * - -The presence of subroutines named C<::::> or C<::::::> no longer causes -B::Deparse to hang (5.14.1). - -=back - -Plus a few other bugs: - -=over - -=item * - -Deparsing of handle C<keys>, C<each> and C<value> with a scalar argument -now works [perl #91008]. - -=item * - -C<readpipe> followed by a complex expression (as opposed to a simple scalar -variable) now works. - -=item * - -It now puts C<CORE::> in front of overridable core keywords if they -conflict with user-defined subroutines. - -=item * - -Deparsing assignment to an lvalue method specified as a variable -(C<< $obj->$method = ... >>) used not to work [perl #62498]. - -=back - -=item * - -L<CGI> has been upgraded from version 3.52 to version 3.54 - -The DELETE HTTP verb is now supported. - -=item * - -L<Compress::Zlib> has been upgraded from version 2.033 to version 2.035 - -=item * - -L<Compress::Raw::Bzip2> has been upgraded from version 2.033 to version 2.035 - -=item * - -L<Compress::Raw::Zlib> has been upgraded from version 2.033 to version 2.035 - -=item * - -L<CPAN::Meta> has been upgraded from version 2.110440 to version 2.110930 - -=item * - -L<CPANPLUS> has been upgraded from version 0.9103 to version 0.9105 - -Now understands specifying modules to install in the format 'Module/Type.pm' - -=item * - -L<CPANPLUS::Dist::Build> has been upgraded from version 0.54 to version 0.56 - -=item * - -L<Data::Dumper> has been upgraded from version 2.128 to 2.131. - -=item * - -L<DB_File> has been upgraded from version 1.821 to version 1.822 - -Warnings are now in sync with perl's - -=item * - -L<Digest::SHA> has been upgraded from version 5.61 to version 5.62 - -No longer loads L<MIME::Base64> as this was unnecessary. - -=item * - -L<Devel::Peek> has been upgraded from version 1.07 to 1.08. - -Its C<fill_mstats> function no longer refuses to write to copy-on-write -scalars. - -=item * - -L<Encode> has been upgraded from version 2.42 to version 2.43 - -Missing aliases added, a deep recursion error fixed and various -documentation updates. - -=item * - -L<ExtUtils::CBuilder> updated from version 0.280203 to 0.280204. - -The new version appends CFLAGS and LDFLAGS to their Config.pm -counterparts. - -=item * - -L<Filter::Util::Call> has been upgraded from version 1.08 to version 1.39 - -C<decrypt> fixed to work with v5.14.0 - -=item * - -L<Filter::Simple> updated from version 0.85 to 0.87 - -=item * - -L<FindBin> updated from version 1.50 to 1.51. - -It no longer returns a wrong result if a script of the same name as the -current one exists in the path and is executable. - -=item * - -L<JSON::PP> has been upgraded from version 2.27105 to version 2.27200 - -Fixed C<incr_parse> decoding string more correctly. - -=item * - -L<I18N::LangTags> has been upgraded from version 0.35_01 to version 0.36. - -Fix broken URLs for RFCs. - -=item * - -L<IPC::Open3> has been upgraded from version 1.10 to version 1.11. - -=over 4 - -=item * - -Fixes a bug which prevented use of C<open3> on Windows when C<*STDIN>, -C<*STDOUT> or C<*STDERR> had been localized. - -=item * - -Fixes a bug which prevented duplicating numeric file descriptors on Windows. - -=back - -=item * - -L<Math::BigFloat> has been upgraded from version 1.993 to 1.994. - -The C<numify> method has been corrected to return a normalised Perl number -(the result of C<0 + $thing>), instead of a string [rt.cpan.org #66732]. - -=item * - -L<Math::BigInt> has been upgraded from version 1.994 to 1.995. - -It provides a new C<bsgn> method that complements the C<babs> method. - -It fixes the internal C<objectify> function's handling of "foreign objects" -so they are converted to the appropriate class (Math::BigInt or -Math::BigFloat). - -=item * - -L<Math::Complex> has been upgraded from version 1.56 to version 1.57 -and L<Math::Trig> has been upgraded from version 1.20 to version 1.21. - -Fixes include: correct copy constructor usage; fix polarwise formatting with -numeric format specifier; and more stable C<great_circle_direction> algorithm. - -=item * - -L<Module::CoreList> has been upgraded from version 2.49 to 2.51. - -Updated for v5.12.4, v5.14.1 and v5.15.0 - -=item * - -L<mro> has been updated to remove two broken URLs in the documentation. - -=item * - -L<Object::Accessor> has been upgraded from version 0.38 to version 0.42 - -Eliminated use of C<exists> on array elements which has been deprecated. - -=item * - -L<ODBM_File> has been upgraded from version 1.10 to version 1.11. - -The XS code is now compiled with C<PERL_NO_GET_CONTEXT>, which will aid -performance under ithreads. - -=item * - -L<PerlIO::encoding> has been upgraded from version 0.14 to 0.15 - -=item * - -L<PerlIO::scalar> has been upgraded from version 0.11 to 0.12. - -It fixes a problem with C<< open my $fh, ">", \$scalar >> not working if -C<$scalar> is a copy-on-write scalar. - -It also fixes a hang that occurs with C<readline> or C<< <$fh> >> if a -typeglob has been assigned to $scalar [perl #92258]. - -=item * - -L<Pod::Perldoc> has been upgraded from version 3.15_03 to 3.15_05. - -It corrects the search paths on VMS [perl #90640]. (5.14.1) - -=item * - -L<Storable> has been upgraded from version 2.27 to version 2.28. - -It no longer turns copy-on-write scalars into read-only scalars when -freezing and thawing. - -=item * - -L<Sys::Syslog> has been upgraded from version 0.27 to version 0.29 - -Large number of Request Tickets resolved. - -=item * - -L<Time::HiRes> has been upgraded from version 1.9721_01 to version 1.9722. - -Portability fix, and avoiding some compiler warnings. - -=item * - -L<Unicode::Collate> has been upgraded from version 0.73 to version 0.76 - -Updated to CLDR 1.9.1 - -=item * - -L<Unicode::Normalize> has been upgraded from version 1.10 to version 1.12 - -Fixes for the removal of F<unicore/CompositionExclusions.txt> from core. - -=item * - -L<XSLoader> has been upgraded from version 0.13 to version 0.15 - -=back - -=head2 Removed Modules and Pragmata - -As promised in Perl 5.14.0's release notes, the following modules have -been removed from the core distribution, and if needed should be installed -from CPAN instead. - -=over - -=item * - -C<Devel::DProf> has been removed from the Perl core. Prior version was 20110228.00. - -=item * - -C<Shell> has been removed from the Perl core. Prior version was 0.72_01. - -=back - -=head1 Documentation - -=head2 New Documentation - -None. - -=head2 Changes to Existing Documentation - -=head3 L<perlfork> - -=over - -=item * - -Added portability caveats related to using C<kill> on forked process. - -=back - -=head3 L<perlfunc> - -=over - -=item * - -Documentation for C<use> now includes a pointer to F<if.pm> (5.14.1) - -=item * - -C<given>, C<when> and C<default> are now listed in L<perlfunc> (5.14.1). - -=item * - -The examples for the C<select> function no longer use strings for file -handles. - -=back - -=head3 L<perlguts> - -=over - -=item * - -Some of the function descriptions in L<perlguts> were confusing, as it was -not clear whether they referred to the function above or below the -description. This has been clarified [perl #91790]. - -=back - -=head3 L<perllol> - -=over - -=item * - -L<perllol> has been expanded with examples using the new C<push $scalar> -syntax introduced in Perl 5.14.0 (5.14.1). - -=back - -=head3 L<perlmod> - -=over - -=item * - -L<perlmod> now states explicitly that some types of explicit symbol table -manipulation are not supported. This codifies what was effectively already -the case [perl #78074]. - -=back - -=head3 L<perlop> - -=over 4 - -=item * - -The explanation of bitwise operators has been expanded to explain how they -work on Unicode strings (5.14.1). - -=item * - -The section on the triple-dot or yada-yada operator has been moved up, as -it used to separate two closely related sections about the comma operator -(5.14.1). - -=item * - -More examples for C<m//g> have been added (5.14.1). - -=item * - -The C<<< <<\FOO >>> here-doc syntax has been documented (5.14.1). - -=back - -=head3 L<perlpodstyle> - -=over 4 - -=item * - -The tips on which formatting codes to use have been corrected and greatly -expanded. - -=item * - -There are now a couple of example one-liners for previewing POD files after -they have been edited. - -=back - -=head3 L<perlsub> - -=over - -=item * - -The L<perlsub/"Lvalue subroutines"> section has been amended to reflect -changes and bug fixes introduced in Perl 5.15.0. - -=back - -=head3 L<perlre> - -=over - -=item * - -The C<(*COMMIT)> directive is now listed in the right section -(L<Verbs without an argument|perlre/Verbs without an argument>). - -=back - -=head3 L<perlrun> - -=over - -=item * - -L<perlrun> has undergone a significant clean-up. Most notably, the -B<-0x...> form of the B<-0> flag has been clarified, and the final section -on environment variables has been corrected and expanded (5.14.1). - -=back - -=head3 L<perltie> - -=over - -=item * - -Documented the required syntax for tying handles. - -=back - -=head3 L<perlvar> - -=over - -=item * - -The documentation for L<$!|perlvar/$!> has been corrected and clarified. -It used to state that $! could be C<undef>, which is not the case. It was -also unclear as to whether system calls set C's C<errno> or Perl's C<$!> -[perl #91614]. - -=item * - -Documentation for L<$$|perlvar/$$> has been amended with additional -cautions regarding changing the process ID. - -=back - -=head3 L<POSIX> - -=over - -=item * - -The invocation documentation for C<WIFEXITED>, C<WEXITSTATUS>, -C<WIFSIGNALED>, C<WTERMSIG>, C<WIFSTOPPED>, and C<WSTOPSIG> has been -corrected (5.14.1). - -=back - -=head1 Diagnostics - -The following additions or changes have been made to diagnostic output, -including warnings and fatal error messages. For the complete list of -diagnostic messages, see L<perldiag>. - -=head2 New Diagnostics - -=head3 New Warnings - -=over 4 - -=item L<Useless assignment to a temporary|perldiag/"Useless assignment to a temporary"> - -Assigning to a temporary returned from an XS lvalue subroutine now produces a -warning [perl #31946]. - -=back - -=head2 Changes to Existing Diagnostics - -None. - -=head1 Utility Changes - -None. - -=head1 Configuration and Compilation - -=over 4 - -=item * - -F<regexp.h> has been modified for compatibility with GCC's B<-Werror> -option, as used by some projects that include perl's header files (5.14.1). - -=item * - -C<USE_LOCALE{,_COLLATE,_CTYPE,_NUMERIC}> have been added the output of perl -V -as they have affect the behaviour of the interpreter binary (albeit only -in a small area). - -=item * - -The code and tests for L<IPC::Open2> have been moved from F<ext/IPC-Open2> -into F<ext/IPC-Open3>, as C<IPC::Open2::open2()> is implemented as a thin -wrapper around C<IPC::Open3::_open3()>, and hence is very tightly coupled to -it. - -=item * - -The magic types and magic vtables are now generated from data in a new script -F<regen/mg_vtable.pl>, instead of being maintained by hand. As different EBCDIC -variants can't agree on the code point for '~', the character to code point -conversion is done at build time by F<generate_uudmap> to a new generated header -F<mg_data.h>. C<PL_vtbl_bm> and C<PL_vtbl_fm> are now defined by the -pre-processor as C<PL_vtbl_regexp>, instead of being distinct C variables. -C<PL_vtbl_sig> has been removed. - -=item * - -Building with C<-DPERL_GLOBAL_STRUCT> works again. This configuration is not -generally used. - -=item * - -Perl configured with I<MAD> now correctly frees C<MADPROP> structures when -OPs are freed. C<MADPROP>s are now allocated with C<PerlMemShared_malloc()> - -=back - -=head1 Testing - -There have been no significant changes to the process for testing a -newly-built perl. - -See the source code commit history for changes to individual test files. - -=head1 Platform Support - -=head2 New Platforms - -None. - -=head2 Discontinued Platforms - -None. - -=head2 Platform-Specific Notes - -=head3 GNU/Hurd - -=over - -=item * - -No longer overrides possible extra $ccflags values given to Configure -on GNU/Hurd. C.f. Bug-Debian: http://bugs.debian.org/587901 - -=back - -=head3 Mac OS X - -=over - -=item * - -Clarified Apple Developer Tools requirements in F<README.macosx> - -=item * - -Mac OS X specific compilation instructions have been clarified (5.14.1) - -=back - -=head3 MSWin32 - -=over - -=item * - -Supplied F<makefile.mk> patched to support gcc-4.x.x and README.win32 -updated accordingly. [perl #91354] - -=back - -=head3 Solaris - -=over - -=item * - -Updated the list of required packages for building perl to reflect Solaris 9 -and 10 in README.solaris [perl #90850] (5.14.1) - -=back - -=head3 Ubuntu Linux - -=over 4 - -=item * - -The L<ODBM_File> installation process has been updated with the new library -paths on Ubuntu natty [perl #90106] (5.14.1) - -=item * - -I<h2ph> now gets the include paths from gcc correctly. This stopped -working when Ubuntu switched to a "multiarch" setup [perl #90122]. - -=back - -=head1 Internal Changes - -=over 4 - -=item * - -The compiled representation of formats is now stored via the C<mg_ptr> of -their C<PERL_MAGIC_fm>. Previously it was stored in the string buffer, -beyond C<SvLEN()>, the regular end of the string. C<SvCOMPILED()> and -C<SvCOMPILED_{on,off}()> now exist solely for compatibility for XS code. -The first is always 0, the other two now no-ops. (5.14.1) - -=item * - -Some global variables have been marked C<const>, members in the interpreter -structure have been re-ordered, and the opcodes have been re-ordered. The op -C<OP_AELEMFAST> has been split into C<OP_AELEMFAST> and C<OP_AELEMFAST_LEX>. - -=item * - -When empting a hash of its elements (e.g. via undef(%h), or %h=()), HvARRAY -field is no longer temporarily zeroed. Any destructors called on the freed -elements see the remaining elements. Thus, %h=() becomes more like C<delete -$h{$_} for keys %h>. - -=item * - -Boyer-Moore compiled scalars are now PVMGs, and the Boyer-Moore tables are now -stored via the mg_ptr of their C<PERL_MAGIC_bm>. Previously they were PVGVs, -with the tables stored in the string buffer, beyond C<SvLEN()>. This eliminates -the last place where the core stores data beyond C<SvLEN()>. - -=item * - -Simplified logic in C<Perl_sv_magic()> introduces a small change of -behaviour for error cases involving unknown magic types. Previously, if -C<Perl_sv_magic()> was passed a magic type unknown to it, it would - -=over - -=item 1. - -Croak "Modification of a read-only value attempted" if read only - -=item 2. - -Return without error if the SV happened to already have this magic - -=item 3. - -otherwise croak "Don't know how to handle magic of type \\%o" - -=back - -Now it will always croak "Don't know how to handle magic of type \\%o", even -on read only values, or SVs which already have the unknown magic type. - -=back - -=head1 Selected Bug Fixes - -=head2 Regular expressions and character classes - -=over 4 - -=item * - -The new (in 5.14.0) regular expression modifier C</a> when repeated like -C</aa> forbids the characters outside the ASCII range that match -characters inside that range from matching under C</i>. This did not -work under some circumstances, all involving alternation, such as: - - "\N{KELVIN SIGN}" =~ /k|foo/iaa; - -succeeded inappropriately. This is now fixed. - -=item * - -5.14.0 introduced some memory leaks in regular expression character -classes such as C<[\w\s]>, which have now been fixed (5.14.1) - -=item * - -An edge case in regular expression matching could potentially loop. -This happened only under C</i> in bracketed character classes that have -characters with multi-character folds, and the target string to match -against includes the first portion of the fold, followed by another -character that has a multi-character fold that begins with the remaining -portion of the fold, plus some more. - - "s\N{U+DF}" =~ /[\x{DF}foo]/i - -is one such case. C<\xDF> folds to C<"ss">. (5.14.1) - -=item * - -A few characters in regular expression pattern matches did not -match correctly in some circumstances, all involving C</i>. The -affected characters are: -COMBINING GREEK YPOGEGRAMMENI, -GREEK CAPITAL LETTER IOTA, -GREEK CAPITAL LETTER UPSILON, -GREEK PROSGEGRAMMENI, -GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA, -GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS, -GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA, -GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS, -LATIN SMALL LETTER LONG S, -LATIN SMALL LIGATURE LONG S T, -and -LATIN SMALL LIGATURE ST. - -=item * - -Fixed memory leak regression in regular expression compilation -under threading - -=back - -=head2 Formats - -=over - -=item * - -A number of edge cases have been fixed with formats and C<formline>; -in particular, where the format itself is potentially variable (such as -with ties and overloading), and where the format and data differ in their -encoding. In both these cases, it used to possible for the output to be -corrupted [perl #91032]. - -=item * - -C<formline> no longer converts its argument into a string in-place. So -passing a reference to C<formline> no longer destroys the reference -[perl #79532]. - -=back - -=head2 Copy-on-write scalars - -Copy-on-write scalars were introduced in 5.8.0, but most Perl code -did not encounter them (they were used mostly internally). Perl -5.10.0 extended them, such that assigning C<__PACKAGE__> or a -hash key to a scalar would make it copy-on-write. Several parts -of Perl were not updated to account for them, but have now been fixed. - -=over - -=item * - -C<utf8::decode> had a nasty bug that would modify copy-on-write scalars' -string buffers in place (i.e., skipping the copy). This could result in -hashes having two elements with the same key [perl #91834]. - -=item * - -Lvalue subroutines were not allowing COW scalars to be returned. This was -fixed for lvalue scalar context in Perl 5.12.3 and 5.14.0, but list context -was not fixed until this release. - -=item * - -Elements of restricted hashes (see the L<fields> pragma) containing -copy-on-write values couldn't be deleted, nor could such hashes be cleared -(C<%hash = ()>). - -=item * - -Localising a tied variable used to make it read-only if it contained a -copy-on-write string. - -=item * - -L<Storable>, L<Devel::Peek> and L<PerlIO::scalar> had similar problems. -See L</Updated Modules and Pragmata>, above. - -=back - -=head2 lvalue subroutines - -There have been various fixes to lvalue subroutines. - -=over - -=item * - -Explicit return now returns the actual argument passed to return, instead -of copying it [perl #72724] [perl #72706]. - -B<Note:> There are still some discrepancies between explicit and implicit -return, which will hopefully be resolved soon. So the exact behaviour is -not set in stone yet. - -=item * - -Lvalue subroutines used to enforce lvalue syntax (i.e., whatever can go on -the left-hand side of C<=>) for the last statement and the arguments to -return. Since lvalue subroutines are not always called in lvalue context, -this restriction has been lifted. - -=item * - -Lvalue subroutines are less restrictive as to what values can be returned. -It used to croak on values returned by C<shift> and C<delete> and from -other subroutines, but no longer does so [perl #71172]. - -=item * - -Empty lvalue subroutines (C<sub :lvalue {}>) used to return C<@_> in list -context. In fact, all subroutines used to, but regular subs were fixed in -Perl 5.8.2. Now lvalue subroutines have been likewise fixed. - -=item * - -Lvalue subroutines used to copy their return values in rvalue context. Not -only was this a waste of CPU cycles, but it also caused bugs. A C<($)> -prototype would cause an lvalue sub to copy its return value [perl #51408], -and C<while(lvalue_sub() =~ m/.../g) { ... }> would loop endlessly -[perl #78680]. - -=item * - -Autovivification now works on values returned from lvalue subroutines -[perl #7946]. - -=item * - -When called in pass-by-reference context (e.g., subroutine arguments or a list -passed to C<for>), an lvalue subroutine returning arrays or hashes used to bind -the arrays (or hashes) to scalar variables--something that is not supposed to -happen. This could result in "Bizarre copy of ARRAY" errors or C<print> -ignoring its arguments. It also made nonsensical code like C<@{\$_}> "work". -This was fixed in 5.14.0 if an array were the first thing returned from the -subroutine (but not for C<$scalar, @array> or hashes being returned). Now a -more general fix has been applied [perl #23790]. - -=item * - -When called in pass-by-reference context, lvalue subroutines used to copy -any read-only value that was returned. E.g., C< sub :lvalue { $] } > -would not return C<$]>, but a copy of it. - -=item * - -Assignment to C<keys> returned from an lvalue sub used not to work, but now -it does. - -=item * - -Applying the C<:lvalue> attribute to an XSUB or to an aliased subroutine -stub with C<< sub foo :lvalue; >> syntax stopped working in Perl 5.12. -This has been fixed. - -=back - -=head2 Fixes related to hashes - -=over - -=item * - -A bug has been fixed that would cause a "Use of freed value in iteration" -error if the next two hash elements that would be iterated over are -deleted [perl #85026]. (5.14.1) - -=item * - -Freeing deeply nested hashes no longer crashes [perl #44225]. - -=item * - -Deleting the current hash iterator (the hash element that would be returend -by the next call to C<each>) in void context used not to free it. The hash -would continue to reference it until the next iteration. This has been -fixed [perl #85026]. - -=back - -=head2 Other notable fixes - -=over - -=item * - -Passing the same constant subroutine to both C<index> and C<formline> no -longer causes one or the other to fail [perl #89218]. (5.14.1) - -=item * - -List assignment to lexical variables declared with attributes in the same -statement (C<my ($x,@y) : blimp = (72,94)>) stopped working in Perl 5.8.0. -It has now been fixed. - -=item * - -Perl 5.10.0 introduced some faulty logic that made "U*" in the middle of -a pack template equivalent to "U0" if the input string was empty. This has -been fixed [perl #90160]. - -=item * - -Destructors on objects were not called during global destruction on objects -that were not referenced by any scalars. This could happen if an array -element were blessed (e.g., C<bless \$a[0]>) or if a closure referenced a -blessed variable (C<bless \my @a; sub foo { @a }>). - -Now there is an extra pass during global destruction to fire destructors on -any objects that might be left after the usual passes that check for -objects referenced by scalars [perl #36347]. - -This bug fix was added in Perl 5.13.9, but caused problems with some CPAN -modules that were relying on the bug. Since it was so close to Perl -5.14.0, the fix was reverted in 5.13.10, to allow more time for the modules -to adapt. Hopefully they will be fixed soon (see L</Known Problems>, -below). - -=item * - -C<given> was not calling set-magic on the implicit lexical C<$_> that it -uses. This meant, for example, that C<pos> would be remembered from one -execution of the same C<given> block to the next, even if the input were a -different variable [perl #84526]. - -=item * - -The "R" command for restarting a debugger session has been fixed to work on -Windows, or any other system lacking a C<POSIX::_SC_OPEN_MAX> constant -[perl #87740]. - -=item * - -Fixed a case where it was possible that a freed buffer may have been read -from when parsing a here document [perl #90128]. (5.14.1) - -=item * - -The C<study> function could become confused if fed a string longer than -2**31 characters. Now it simply skips such strings. - -=item * - -C<each(I<ARRAY>)> is now wrapped in C<defined(...)>, like C<each(I<HASH>)>, -inside a C<while> condition [perl #90888]. - -=item * - -In @INC filters (subroutines returned by subroutines in @INC), $_ used to -misbehave: If returned from a subroutine, it would not be copied, but the -variable itself would be returned; and freeing $_ (e.g., with C<undef *_>) -would cause perl to crash. This has been fixed [perl #91880]. - -=item * - -An ASCII single quote (') in a symbol name is meant to be equivalent to a -double colon (::) except at the end of the name. It was not equivalent if -followed by a null character, but now it is [perl #88138]. - -=item * - -The abbreviations for four C1 control characters -C<MW> -C<PM>, -C<RI>, -and -C<ST> -were previously unrecognized by C<\N{}>, -vianame(), and string_vianame(). - -=item * - -Some cases of threads crashing due to memory allocation during cloning have -been fixed [perl #90006]. - -=item * - -Attempting to C<goto> out of a tied handle method used to cause memory -corruption or crashes. Now it produces an error message instead -[perl #8611]. - -=item * - -Perl skips copying values returned from a subroutine if it thinks the value -is not in use elsewhere. Due to faulty logic, this would happen with the -result of C<delete>, C<shift> or C<splice>, even if the result was -referenced elsewhere. So C<< \sub { delete $_[0] }->($x) >> would return a -reference to C<$x>. This has been fixed [perl #91844]. - -=back - -=head1 Known Problems - -=over 4 - -=item * - -The fix for perl #36347 causes test failures for C<Gtk2> and C<Tk> on some -systems [perl #82542]. - -=item * - -The changes to C<tie> cause test failures for the C<JS> module. - -=item * - -The changes to C<$$> cause test failures for the C<Event> module. - -=item * - -L<YAML::Syck> has (undiagnosed) test failures. - -=back - - -=head1 Acknowledgements - -Perl 5.15.0 represents approximately five weeks of development since Perl -5.14.0 and contains approximately 54,000 lines of changes across 618 -files from 57 authors. - -Perl continues to flourish into its third decade thanks to a vibrant -community of users and developers. The following people are known to -have contributed the improvements that became Perl 5.15.0: - -Alan Haggai Alavi, Bo Johansson, Bo Lindbergh, brian d foy, Chia-liang -Kao, Chris 'BinGOs' Williams, Claudio Ramirez, Craig A. Berry, David -Golden, David Leadbeater, David Mitchell, Dennis Kaarsemaker, Dominic -Hargreaves, Eric Brine, Father Chrysostomos, Florian Ragwitz, George -Greer, Gisle Aas, H.Merijn Brand, Hojung Yoon, Ian Goodacre, Jesse -Vincent, Jim Cromie, Johan Vromans, John Hawkinson, John P. Linderman, -Joshua ben Jore, Karl Williamson, Kevin J. Woolley, Leo Lapworth, Leon -Brocard, Leon Timmermans, Louis Strous, Marcel Grünauer, Martin Hasch, -Max Maischein, Michael Witten, Moritz Lenz, Nicholas Clark, Niko Tyni, -Nuno Carvalho, Pau Amma, Peter John Acklam, Robin Barker, Salvador -Fandiño, Samuel Thibault, Shawn M Moore, Shigeya Suzuki, Shlomi Fish, -Sisyphus, Steffen Müller, Todd Rinaldo, Tom Christiansen, Tony Cook, -Vladimir Timofeev, Zefram and Zsbán Ambrus. - -The list above is almost certainly incomplete as it is automatically -generated from version control history. In particular, it does not -include the names of the (very much appreciated) contributors who -reported issues to the Perl bug tracker. - -Many of the changes included in this version originated in the CPAN -modules included in Perl's core. We're grateful to the entire CPAN -community for helping Perl to flourish. - -For a more complete list of all of Perl's historical contributors, -please see the F<AUTHORS> file in the Perl source distribution. - -=head1 Reporting Bugs - -If you find what you think is a bug, you might check the articles -recently posted to the comp.lang.perl.misc newsgroup and the perl -bug database at http://rt.perl.org/perlbug/ . There may also be -information at http://www.perl.org/ , the Perl Home Page. - -If you believe you have an unreported bug, please run the L<perlbug> -program included with your release. Be sure to trim your bug down -to a tiny but sufficient test case. Your bug report, along with the -output of C<perl -V>, will be sent off to perlbug@perl.org to be -analysed by the Perl porting team. - -If the bug you are reporting has security implications, which make it -inappropriate to send to a publicly archived mailing list, then please send -it to perl5-security-report@perl.org. This points to a closed subscription -unarchived mailing list, which includes -all the core committers, who will be able -to help assess the impact of issues, figure out a resolution, and help -co-ordinate the release of patches to mitigate or fix the problem across all -platforms on which Perl is supported. Please only use this address for -security issues in the Perl core, not for modules independently -distributed on CPAN. - -=head1 SEE ALSO - -The F<Changes> file for an explanation of how to view exhaustive details -on what changed. - -The F<INSTALL> file for how to build Perl. - -The F<README> file for general stuff. - -The F<Artistic> and F<Copying> files for copyright information. - -=cut diff --git a/pod/perl5151delta.pod b/pod/perl5151delta.pod deleted file mode 100644 index f9ae49f399..0000000000 --- a/pod/perl5151delta.pod +++ /dev/null @@ -1,630 +0,0 @@ -=encoding utf8 - -=head1 NAME - -perl5151delta - what is new for perl v5.15.1 - -=head1 DESCRIPTION - -This document describes differences between the 5.15.0 release and -the 5.15.1 release. - -If you are upgrading from an earlier release such as 5.14.0, first read -L<perl5150delta>, which describes differences between 5.14.0 and -5.15.0. - -=head1 Core Enhancements - -=head2 C<splice()> doesn't warn when truncating - -You can now limit the size of an array using C<splice(@a,MAX_LEN)> without -worrying about warnings. - -=head2 The C<\$> prototype accepts any scalar lvalue - -The C<\$> and C<\[$]> subroutine prototypes now accept any scalar lvalue -argument. Previously they only accepted scalars beginning with C<$> and -hash and array elements. This change makes them consistent with the way -the built-in C<read> and C<recv> functions (among others) parse their -arguments. This means that one can override the built-in functions with -custom subroutines that parse their arguments the same way. - -=head2 You can now C<study> more than one string - -The restriction that you can only have one C<study> active at a time has been -removed. You can now usefully C<study> as many strings as you want (until you -exhaust memory). - -=head2 The Unicode C<Script_Extensions> property is now supported. - -New in Unicode 6.0, this is an improved C<Script> property. Details -are in L<perlunicode/Scripts>. - -=head2 DTrace probes for interpreter phase change - -The C<phase-change> probes will fire when the interpreter's phase -changes, which tracks the C<${^GLOBAL_PHASE}> variable. C<arg0> is -the new phase name; C<arg1> is the old one. This is useful mostly -for limiting your instrumentation to one or more of: compile time, -run time, destruct time. - -=head2 New Pad API - -Many new functions have been added to the API for manipulating lexical -pads. See L<perlapi/Pad Data Structures> for more information. - -=head1 Performance Enhancements - -=over 4 - -=item * - -The short-circuiting operators C<&&>, C<||>, and C<//>, when chained -(such as C<$a || $b || $c>), are now considerably faster to short-circuit, -due to reduced optree traversal. - -=item * - -The implementation of C<s///r> makes one fewer copy of the scalar's value. - -=item * - -If a studied scalar is C<split> with a regex, the engine will now take -advantage of the C<study> data. - -=item * - -C<study> now uses considerably less memory for shorter strings. Strings shorter -than 65535 characters use roughly half the memory than previously, strings -shorter than 255 characters use roughly one quarter of the memory. - -=item * - -Recursive calls to lvalue subroutines in lvalue scalar context use less -memory. - -=back - -=head1 Modules and Pragmata - -=head2 New Modules and Pragmata - -=over 4 - -=item * - -The logic for parsing, merging, and dumping XS typemaps has been extracted -from C<ExtUtils::ParseXS> into a module of its own, L<ExtUtils::Typemaps>. -C<ExtUtils::Typemaps> offers an interface to typemap handling outside of -the scope of the XS compiler itself. - -As a first use case of the improved API and extensibility, typemaps can now -be included inline in XS code with a HEREDOC-like syntax: - - TYPEMAP: <<END_TYPEMAP - MyType T_IV - END_TYPEMAP - -=back - -=head2 Updated Modules and Pragmata - -=over 4 - -=item * - -L<B::Deparse> has been upgrade from version 1.05 to 1.06. - -It now correctly deparses interpolation of punctuation variables (like -C<@*>) that do not interpolate without braces [perl #93990]. - -=item * - -L<CGI> has been upgraded from version 3.54 to version 3.55. - -Things that may break your code: - -C<url()> was fixed to return C<PATH_INFO> when it is explicitly requested -with either the C<path=E<gt>1> or C<path_info=E<gt>1> flag. - -If your code is running under mod_rewrite (or compatible) and you are calling C<self_url()> or -you are calling C<url()> and passing C<path_info=E<gt>1>, These methods will actually be -returning C<PATH_INFO> now, as you have explicitly requested, or has C<self_url()> -has requested on your behalf. - -The C<PATH_INFO> has been omitted in such URLs since the issue was introduced -in the 3.12 release in December, 2005. - -This bug is so old your application may have come to depend on it or -workaround it. Check for application before upgrading to this release. - -Examples of affected method calls: - - $q->url(-absolute => 1, -query => 1, -path_info => 1 ) - $q->url(-path=>1) - $q->url(-full=>1,-path=>1) - $q->url(-rewrite=>1,-path=>1) - $q->self_url(); - -=item * - -L<CPANPLUS> has been upgraded from version 0.9105 to version 0.9108 - -=item * - -L<Compress::Raw::Bzip2> has been upgraded from version 2.035 to version 2.037 - -=item * - -L<Compress::Raw::Zlib> has been upgraded from version 2.035 to version 2.037 - -Added offset parameter to CRC32 - -=item * - -L<Compress::Zlib> has been upgraded from version 2.035 to version 2.037 - -IO::Compress::Zip and IO::Uncompress::Unzip now have support for LZMA (method 14). -There is a fix for a CRC issue in IO::Compress::Unzip and it supports Streamed -Stored context now. And fixed a Zip64 issue in -IO::Compress::Zip when the content size was exactly 0xFFFFFFFF. - -=item * - -L<Cwd> has been upgraded from version 3.36 to 3.37, to address an -incompatibility with the EPIC debugger. - -=item * - -L<ExtUtils::MakeMaker> has been upgraded from version 6.57_05 to version 6.58 - -=item * - -L<ExtUtils::ParseXS> has been upgraded from version 2.2210 to 3.00_01. - -Much of L<ExtUtils::ParseXS>, the module behind the XS compiler C<xsubpp>, -was rewritten and cleaned up. It has been made somewhat more extensible -and now finally uses strictures. - -The typemap logic has been moved into a separate module, -L<ExtUtils::Typemaps>. See L</New Modules and Pragmata>, above. - -=item * - -L<HTTP::Tiny> has been upgraded from version 0.012 to version 0.013. - -Added support for using C<$ENV{http_proxy}> to set the default proxy host. - -=item * - -L<IPC::Cmd> has been upgraded from version 0.70 to version 0.72 - -Capturing of command output (both C<STDOUT> and C<STDERR>) is now supported -using L<IPC::Open3> on MSWin32 without requiring L<IPC::Run>. - -=item * - -L<Locale::Codes> has been upgraded from version 3.16 to version 3.17 - -Added Language Extension codes (langext) and Language Variation codes -(langvar) as defined in the IANA language registry. - -Added language codes from ISO 639-5 - -Added language/script codes from the IANA language subtag -registry - -Fixed an uninitialized value warning. RT 67438 - -Fixed the return value for the all_XXX_codes and all_XXX_names functions. RT 69100 - -Reorganized modules to move Locale::MODULE to Locale::Codes::MODULE to -allow for cleaner future additions. The original four modules (Locale::Language, -Locale::Currency, Locale::Country, Locale::Script) will continue to work, but -all new sets of codes will be added in the Locale::Codes namespace. - -=item * - -L<Math::BigInt::FastCalc> has been upgraded from version 0.28 to version 0.29. - -The XS code is now compiled with C<PERL_NO_GET_CONTEXT>, which will aid -performance under ithreads. - -=item * - -L<Module::CoreList> has been upgraded from version 2.51 to 2.54. - -Some extraneous (and erroneous) entries have been removed -[rt.cpan.org #69108]. - -The C<corelist> utility now understands the C<-r> option for -displaying Perl release dates. - -=item * - -L<Pod::Perldoc> has been upgraded from version 3.15_05 to 3.15_06. - -The B<-v> option now fetches the right section for C<$0>. - -=item * - -L<Pod::Simple> has been upgraded from version 3.16 to version 3.18 - -=item * - -L<Unicode::Collate> has been upgraded from version 0.76 to version 0.77 - -Applied [perl #93470] silencing compiler warnings with -Wwrite-strings - -=item * - -L<Win32API::File> has been upgraded from version 0.1101 to version 0.1200 - -Added SetStdHandle and GetStdHandle functions - -=item * - -L<attributes> has been upgraded from version 0.14 to 0.15, as part of the -lvalue attribute warnings fix. See L</Selected Bug Fixes>, below. - -=item * - -L<diagnostics> has been upgraded from version 1.22 to 1.23. - -It now knows how to find descriptions for diagnostic messages ending with a -dot, instead getting confused by it. - -=item * - -L<threads> has been upgraded from version 1.83 to 1.84 - -An unused variable was removed from the XS code. - -=back - -=head2 Removed Modules and Pragmata - -=over 4 - -=item * - -Perl 4-era .pl libraries - -Perl used to bundle a handful of library files that predate Perl 5. Most of -these files, which have been deprecated since version 5.14.0, have now been -removed. If your code still relies on these libraries, you can install them -again from L<Perl4::CoreLibs> on CPAN. - -=back - -=head1 Documentation - -=head2 New Documentation - -=head3 L<perldtrace> - -L<perldtrace> describes Perl's DTrace support, listing the provided probes -and gives examples of their use. - -=head3 L<perl5141delta> - -The delta file for Perl 5.14.1 has been copied to blead. - -=head2 Changes to Existing Documentation - -=over 4 - -=item * - -L<perlxs> was extended with documentation on inline typemaps. - -=item * - -L<perlref> has a new L<Circular References|perlref/Circular References> -section explaining how circularities may not be freed and how to solve that -with weak references. - -=item * - -The documentation for smart match in L<perlsyn> has been corrected for the -case of C<undef> on the left-hand side. The list of different smart match -behaviours had an item in the wrong place. - -=item * - -Parts of L<perlapi> were clarified, and Perl equivalents of some C -functions have been added as an additional mode of exposition. - -=item * - -A few parts of L<perlre> and L<perlrecharclass> were clarified. - -=back - -=head1 Diagnostics - -The following additions or changes have been made to diagnostic output, -including warnings and fatal error messages. For the complete list of -diagnostic messages, see L<perldiag>. - -=head2 Changes to Existing Diagnostics - -=over 4 - -=item * - -The L<Invalid version format|perldiag/"Invalid version format (%s)"> -error message now says "negative version number" within the parentheses, -rather than "non-numeric data", for negative numbers. - -=item * - -The two warnings -L<Possible attempt to put comments in qw() list|perldiag/"Possible attempt to put comments in qw() list"> -and -L<Possible attempt to separate words with commas|perldiag/"Possible attempt to separate words with commas"> -are no longer mutually exclusive: the same C<qw> construct may produce -both. - -=item * - -Warnings that mention the names of lexical (C<my>) variables with Unicode -characters in them now respect the presence or absence of the C<:utf8> -layer on the output handle, instead of outputting UTF8 regardless. Also, -the correct names are included in the strings passed to C<$SIG{__WARN__}> -handlers, rather than the raw UTF8 bytes. - -=back - -=head1 Testing - -=over 4 - -=item * - -F<t/run/dtrace.t> was added to test Perl's DTrace support. This -test will only be run if your Perl was built with C<-Dusedtrace> -and if calling C<dtrace> actually lets you instrument code. This -generally requires being run as root, so this test file is primarily -intended for use by the dtrace subcommittee of p5p. - -=item * - -F<t/win32/runenv.t> was added to test aspects of Perl's environment -variable handling on MSWin32 platforms. Previously, such tests were -skipped on MSWin32 platforms. - -=item * - -Some bitrot has been fixed in the miniperl test suite, so that it now -nearly passes. The minitest is normally only run when building the -full perl fails, so it was liable to fall into disrepair making it a -less useful debugging tool. When it is fully passing it is hoped to -start including it in regular smoke tests, so that future bitrot will -be quickly detected. - -=back - -=head1 Platform Support - -=head2 Platform-Specific Notes - -=head3 Windows - -=over - -=item * - -On Windows 7, 2008 and Vista, C<@INC> is now always properly populated -based on the value of PERL5LIB set in the environment. Previously, -values of PERL5LIB longer than 32766 bytes were skipped when C<@INC> -was being populated. Tests for environment handling were -also added (see L</Testing> section). Fixes -L<RT #87322|https://rt.perl.org/rt3/Public/Bug/Display.html?id=87322>. - -=back - -=head1 Internal Changes - -=over 4 - -=item * - -The experimental C<fetch_cop_label> function has been renamed to -C<cop_fetch_label>. - -=item * - -The C<cop_store_label> function has been added to the API, but is -experimental. - -=back - -=head1 Selected Bug Fixes - -=over 4 - -=item * - -Applying the :lvalue attribute to subroutine that is already defined does -not work properly, as the attribute changes the way the sub is compiled. -Hence, Perl 5.12 began warning when an attempt is made to apply the -attribute to an already defined sub. In such cases, the attribute is -discarded. - -But the change in 5.12 missed the case where custom attributes are also -present: that case still silently and ineffectively applied the attribute. -That omission has now been corrected. C<sub foo :lvalue :Whatever> (when -C<foo> is already defined) now warns about the :lvalue attribute, and does -not apply it. - -L<attributes.pm|attributes> has likewise been updated to warn and not apply -the attribute. - -=item * - -The remaining discrepancies between explicit and implicit return from -lvalue subroutines have been resolved. They mainly involved which error -message to display when a read-only value is returned in lvalue context. -Also, returning a PADTMP (the result of most built-ins, like C<index>) in -lvalue context is now forbidden for explicit return, as it always has been -for implicit return. This is not a regression from 5.14, as all the cases -in which it could happen where previously syntax errors. - -=item * - -Explicitly returning a tied C<my> variable from an lvalue subroutine in -list lvalue context used to clear the variable before the assignment could -happen. This is something that was missed when explicit return was made to -work in 5.15.0. - -=item * - -A minor memory leak, introduced in 5.15.0, has been fixed. It would occur -when a hash is freed that has had its current iterator deleted -[perl #93454]. - -=item * - -The C<prototype> function no longer dies for the C<__FILE__>, C<__LINE__> -and C<__PACKAGE__> directives. It now returns an empty-string prototype -for them, because they are syntactically very similar to nullary functions -like C<time>. - -=item * - -C<prototype> now returns C<undef> for all overridable infix operators, -such as C<eq>, which are not callable in any way resembling functions. -It used to return incorrect prototypes for some and die for others -[perl #94984]. - -=item * - -A bug affecting lvalue context propagation through nested lvalue subroutine -calls has been fixed. Previously, returning a value in nested rvalue -context would be treated as lvalue context by the inner subroutine call, -resulting in some values (such as read-only values) being rejected. - -=item * - -Some core bugs affecting L<Hash::Util> have been fixed: locking a hash -element that is a glob copy no longer causes subsequent assignment to it to -corrupt the glob, and unlocking a hash element that holds a copy-on-write -scalar no longer causes modifications to that scalar to modify other -scalars that were sharing the same string buffer. - -=item * - -C<when> blocks are now capable of returning variables declared inside the -enclosing C<given> block [perl #93548]. - -=item * - -A problem with context propagation when a C<do> block is an argument to -C<return> has been fixed. It used to cause C<undef> to be returned in -some cases of a C<return> inside an C<if> block which itself is followed by -another C<return>. - -=item * - -Calling C<index> with a tainted constant no longer causes constants in -subsequently compiled code to become tainted [perl #64804]. - -=item * - -Use of lexical (C<my>) variables in code blocks embedded in regular -expressions will no longer result in memory corruption or crashes. - -Nevertheless, these code blocks are still experimental, as there are still -problems with the wrong variables being closed over (in loops for instance) -and with abnormal exiting (e.g., C<die>) causing memory corruption. - -=item * - -The C<SvIsCOW> C macro now returns false for read-only copies of typeglobs, -such as those created by: - - $hash{elem} = *foo; - Hash::Util::lock_value %hash, 'elem'; - -It used to return true. - -=item * - -Assignment to C<$^A> (the format output accumulator) now recalculates -the number of lines output. - -=item * - -The regexp optimiser no longer crashes on debugging builds when merging -fixed-string nodes with inconvenient contents. - -=back - -=head1 Acknowledgements - -Perl 5.15.1 represents approximately 5 weeks of development since Perl 5.15.0 -and contains approximately 220,000 lines of changes across 650 files from 37 -authors. - -Perl continues to flourish into its third decade thanks to a vibrant community -of users and developers. The following people are known to have contributed the -improvements that became Perl 5.15.1: - -Abhijit Menon-Sen, Alan Haggai Alavi, Brian Fraser, Brian Greenfield, Chris -'BinGOs' Williams, Claes Jacobsson, Craig A. Berry, Dave Rolsky, David Golden, -David Mitchell, Dee Newcum, Eric Brine, Father Chrysostomos, Florian Ragwitz, -Gerard Goossen, H.Merijn Brand, Hojung Yoon, James E Keenan, Jesse Luehrs, -Jesse Vincent, John Peacock, Karl Williamson, Keith Thompson, Leon Brocard, -Matthew Horsfall, Nicholas Clark, Niko Tyni, Phil Monsen, Reini Urban, Ricardo -Signes, Robin Barker, Sam Kimbrel, Shawn M Moore, Shlomi Fish, Steffen Müller, -Vincent Pit, Zefram. - -The list above is almost certainly incomplete as it is automatically generated -from version control history. In particular, it does not include the names of -the (very much appreciated) contributors who reported issues to the Perl bug -tracker. - -Many of the changes included in this version originated in the CPAN modules -included in Perl's core. We're grateful to the entire CPAN community for -helping Perl to flourish. - -For a more complete list of all of Perl's historical contributors, please see -the F<AUTHORS> file in the Perl source distribution. - -=head1 Reporting Bugs - -If you find what you think is a bug, you might check the articles -recently posted to the comp.lang.perl.misc newsgroup and the perl -bug database at http://rt.perl.org/perlbug/ . There may also be -information at http://www.perl.org/ , the Perl Home Page. - -If you believe you have an unreported bug, please run the L<perlbug> -program included with your release. Be sure to trim your bug down -to a tiny but sufficient test case. Your bug report, along with the -output of C<perl -V>, will be sent off to perlbug@perl.org to be -analysed by the Perl porting team. - -If the bug you are reporting has security implications, which make it -inappropriate to send to a publicly archived mailing list, then please send -it to perl5-security-report@perl.org. This points to a closed subscription -unarchived mailing list, which includes -all the core committers, who will be able -to help assess the impact of issues, figure out a resolution, and help -co-ordinate the release of patches to mitigate or fix the problem across all -platforms on which Perl is supported. Please only use this address for -security issues in the Perl core, not for modules independently -distributed on CPAN. - -=head1 SEE ALSO - -The F<Changes> file for an explanation of how to view exhaustive details -on what changed. - -The F<INSTALL> file for how to build Perl. - -The F<README> file for general stuff. - -The F<Artistic> and F<Copying> files for copyright information. - -=cut diff --git a/pod/perl5152delta.pod b/pod/perl5152delta.pod deleted file mode 100644 index a4e09de989..0000000000 --- a/pod/perl5152delta.pod +++ /dev/null @@ -1,474 +0,0 @@ -=encoding utf8 - -=head1 NAME - -perl5152delta - what is new for perl v5.15.2 - -=head1 DESCRIPTION - -This document describes differences between the 5.15.1 release and -the 5.15.2 release. - -If you are upgrading from an earlier release such as 5.15.0, first read -L<perl5151delta>, which describes differences between 5.15.0 and -5.15.1. - -=head1 Core Enhancements - -=head2 Subroutines in the CORE namespace - -Many Perl keywords are now available as subroutines in the CORE namespace. -Most of these cannot be called through references or via C<&foo> syntax -yet, but must be called as barewords. In other words, you can now do -this: - - BEGIN { *entangle = \&CORE::tie } - entangle $variable, $package, @args; - -This currently works for overridable keywords other than C<dump> and the -infix operators. Calling through references only works for functions that -take no arguments (like C<wantarray>). - -Work is under way to allow more of these subroutines to be called through -references. - -=head2 C<__FILE__()> Syntax - -The C<__FILE__>, C<__LINE__> and C<__PACKAGE__> tokens can now be written -with an empty pair of parentheses after them. This makes them parse the -same way as C<time>, C<fork> and other built-in functions. - -=head1 Incompatible Changes - -=head2 C<UNIVERSAL::VERSION> now returns $VERSION - -C<UNIVERSAL::VERSION> now return whatever is in $VERSION, instead of -returning $VERSION converted to a version object and then to a string. -As a result, it no longer parses the version when called without arguments, -so it no longer dies in that case for malformed versions. This allows -custom version number parsers to use C<< ->VERSION >> to retrieve the -version number, as was the case in Perl 5.8 [perl #95544]. - -=head1 Modules and Pragmata - -=head2 Updated Modules and Pragmata - -=over 4 - -=item * - -L<B> has been upgraded from version 1.30 to version 1.31 - -The XS code has changed slightly, as it was too tightly coupled to -the contents of the header F<embedvar.h>. Documentation in L<B::Terse> -and L<B::Xref> has been improved, hence their versions have been increased. - -=item * - -L<CPAN> has been upgraded from version 1.9600 to version 1.9800 - -=item * - -L<CPANPLUS> has been upgraded from version 0.9108 to version 0.9109 - -Fixed support for v-strings and x.y.z versions with v5.8.4 - -=item * - -L<CPAN::Meta> has been upgraded from version 2.110930_001 to version 2.112150 - -Stringify any objects encountered during conversion. - -Clarified that file paths in the 'provides' section must be in -Unix-style (i.e. forward slashes) - -=item * - -L<DB_File> has been upgraded from version 1.822 to version 1.824 - -Will now croak if attempt to freeze/thaw DB_File object [RT #69985] - -=item * - -L<diagnostics> has been upgraded from version 1.23 to 1.24. - -It now supports the %u formatting code. Previously it was unable to find -descriptions for messages whose entries in L<perldiag> included that code -[perl #94988]. - -=item * - -L<Encode> has been upgraded from version 2.43 to version 2.44 - -Addressed 'decode_xs n-byte heap-overflow' security bug in Unicode.xs - -=item * - -L<ExtUtils::Install> has been upgraded from version 1.56 to version 1.57. - -There is no change to ExtUtils::Install other than the version number -increase, but L<ExtUtils::Installed> has been upgraded from version 1.999_001 -to version 1.999002 and a new C<skip_cwd> attribute has been added. - -=item * - -L<ExtUtils::MakeMaker> has been upgraded from version 6.58 to version 6.59 - -=item * - -L<ExtUtils::Manifest> has been upgraded from version 1.58 to version 1.60 - -=item * - -L<ExtUtils::ParseXS> has been upgraded from 3.00_01 to 3.00_04. - -=item * - -L<IPC::Open3> has been upgraded from version 1.11 to 1.12. - -C<open3> with "-" for the program name works once more. This was broken in -version 1.06 (and hence in Perl 5.14.0) [perl #95748]. - -=item * - -L<Module::Build> has been upgraded from version 0.3800 to version 0.39_01. - -Pod to HTML internals changed to support revisions to Pod::Html in core. -Also fixes some minor bugs. [rt.cpan.org #68585] [rt.cpan.org #67893] -[rt.cpan.org #67008] - -=item * - -L<Module::CoreList> has been upgraded from version 2.54 to version 2.55 - -=item * - -L<Module::Load> has been upgraded from version 0.18 to version 0.20 - -=item * - -L<Module::Metadata> has been upgraded from version 1.000004 to version 1.000005 - -Added C<new_from_handle()> method. - -=item * - -L<Params::Check> has been upgraded from version 0.28 to version 0.32 - -=item * - -L<PerlIO::via> has been upgraded from version 0.11 to version 0.12. - -The only change is a correction in the documentation. - -=item * - -L<Term::ANSIColor> has been upgraded from version 3.00 to version 3.01 - -Only interpret an initial array reference as a list of colors, not any initial -reference, allowing the colored function to work properly on objects with -stringification defined. - -=item * - -L<Unicode::Collate> has been upgraded from version 0.77 to version 0.78 - -=item * - -L<Unicode::Normalize> has been upgraded from version 1.12 to version 1.13 - -=back - -=head1 Documentation - -=head2 New Documentation - -=head3 L<perlexperiment> - -This document is intended to provide a list of experimental features in -Perl. It is still a work in progress. - -=head2 Changes to Existing Documentation - -=head3 L<perlsub> - -=over 4 - -=item * - -The ($;) prototype syntax, which has existed for rather a long time, is now -documented in L<perlsub>. It allows a unary function to have the same -precedence as a list operator. - -=back - -=head1 Diagnostics - -The following additions or changes have been made to diagnostic output, -including warnings and fatal error messages. For the complete list of -diagnostic messages, see L<perldiag>. - -=head2 New Diagnostics - -=head3 New Errors - -=over 4 - -=item * - -L<&CORE::%s cannot be called directly|perldiag/"&CORE::%s cannot be called directly"> - -(F) You tried to call a subroutine in the C<CORE::> namespace -with C<&foo> syntax or through a reference. The subroutines -in this package cannot yet be called that way, but must be -called as barewords. Something like this will work: - - BEGIN { *shove = \&CORE::push; } - shove @array, 1,2,3; # pushes on to @array - -=back - -=head1 Utility Changes - -=head3 L<perlivp> - -=over 4 - -=item * - -Fixed a bug whereby other perls under the current directory could cause -false positive failures. - -=item * - -Tests for .ph files have been removed, as these test have been optional since -2005 and .ph files are no longer generated during installation. - -=back - -=head3 L<splain> - -See the entry for C<< diagnostics >> in L</Updated Modules and Pragmata>, -above. - -=head1 Configuration and Compilation - -=over 4 - -=item * - -F<makedef.pl> has been refactored. This should have no noticeable affect on -any of the platforms that use it as part of their build (AIX, VMS, Win32). - -=item * - -C<useperlio> can no longer be disabled. - -=back - -=head1 Platform Support - -=over 4 - -=item HP-UX PA-RISC/64 now supports gcc-4.x - -A fix to correct the socketsize now makes the test suite pass on HP-UX -PA-RISC for 64bitall builds. - -=back - -=head1 Internal Changes - -=over 4 - -=item * - -F<embedvar.h> has been simplified, and one level of macro indirection for -PL_* variables has been removed for the default (non-multiplicity) -configuration. PERLVAR*() macros now directly expand their arguments to -tokens such as C<PL_defgv>, instead of expanding to C<PL_Idefgv>, with -F<embedvar.h> defining a macro to map C<PL_Idefgv> to C<PL_defgv>. XS code -which has unwarranted chumminess with the implementation may need updating. - -=item * - -A C<coreargs> opcode has been added, to be used by C<&CORE::foo> subs to sort -out C<@_>. - -=item * - -An API has been added to explicitly choose whether or not to export XSUB -symbols. More detail can be found in the comments for commit e64345f8. - -=back - -=head1 Selected Bug Fixes - -=over 4 - -=item * - -Locking a subroutine (via C<lock &sub>) is no longer a compile-time error -for regular subs. For lvalue subroutines, it no longer tries to return the -sub as a scalar, resulting in strange side effects like C<ref \$_> -returning "CODE" in some instances. - -C<lock &sub> is now a run-time error if L<threads::shared> is loaded (a -no-op otherwise), but that may be rectified in a future version. - -=item * - -The prototypes of several built-in functions--C<getprotobynumber>, C<lock>, -C<not> and C<select>--have been corrected, or at least are now closer to -reality than before. - -=item * - -Most dereferencing operators (C<${}>, etc.) used to call C<FETCH> twice on -a tied operand when doing a symbolic dereference (looking up a variable by -name, which is not permitted under C<use strict 'refs'>). Only C<&{}> did -not have this problem. This has been fixed. - -=item * - -A minor regression introduced in 5.15.0 has been fixed. Dereferencing a -magical mortal (e.g., the return value of C<delete> on a tied hash element) -explicitly returned from a subroutine called recursively was not calling -C<FETCH>. This would affect code like C<@{ foo() }> where the C<foo> sub -contains C<return delete $hash{elem}> and is calling itself. - -=item * - -A panic involving the combination of the regular expression modifiers -C</aa> and the C<\b> escape sequence introduced in 5.14.0 has been -fixed [perl #95964]. - -=item * - -stat() would always return the inode number as an IV, even when the -original was unsigned, or too large to fit in an IV. stat() now -returns the inode number as the type that would best preserve the -original value. [perl #84590] - -=item * - -The combination of the regular expression modifiers C</aa> and the C<\b> -and C<\B> escape sequences did not work properly on UTF-8 encoded -strings. All non-ASCII characters under C</aa> should be treated as -non-word characters, but what was happening was that Unicode rules were -used to determine wordness/non-wordness for non-ASCII characters. This -is now fixed [perl #95968]. - -=item * - -Infinite loops like C<1 while 1> used to stop C<strict 'subs'> mode from -working for the rest of the block.t - -=item * - -The C<\h>, C<\H>, C<\v> and C<\V> regular expression metacharacters used to -cause a panic error message when attempting to match at the end of the -string [perl #96354]. - -=item * - -For list assignments like C<($a,$b) = ($b,$a)>, Perl has to make a copy of -the items on the right-hand side before assignment them to the left. For -efficiency's sake, it assigns the values on the right straight to the items -on the left no variable is mentioned on both sides, as in -C<($a,$b) = ($c,$d)>. The logic for determining when it can cheat was -faulty, in that C<&&> and C<||> on the right-hand side could fool it. So -C<($a,$b) = $some_true_value && ($b,$a)> would end up assigning the value -of C<$b> to both scalars. - -=item * - -Perl no longer tries to apply lvalue context to the string in -C<("string", $variable) ||= 1> (which used to be an error). Since the -left-hand side of C<||=> is evaluated in scalar context, that's a scalar -comma operator, which gives all but the last item void context. There is -no such thing as void lvalue context, so it was a mistake for Perl to try -to force it [perl #96942]. - -=item * - -Every subroutine has a filename associated with it, that the debugger uses. -The one associated with constant subroutines used to be misallocated when -cloned under threads. Consequently, debugging threaded applications could -result in memory corruption [perl #96126]. - -=item * - -C<caller> no longer leaks memory when called from the DB package if -C<@DB::args> was assigned to after the first call to C<caller>. L<Carp> -was triggering this bug [perl #97010]. - -=back - -=head1 Acknowledgements - -Perl 5.15.2 represents approximately 2 months of development since Perl -5.15.1 and contains approximately 17,000 lines of changes across 330 -files from 35 authors. - -Perl continues to flourish into its third decade thanks to a vibrant -community of users and developers. The following people are known to -have contributed the improvements that became Perl 5.15.2: - -Abigail, Andreas König, brian d foy, Brian Greenfield, Chas. Owens, -Chris 'BinGOs' Williams, Craig A. Berry, David Golden, David Mitchell, -Eric Brine, Father Chrysostomos, Florian Ragwitz, Gerard Goossen, -H.Merijn Brand, Jesse Vincent, John Peacock, Karl Williamson, Karthik -Rajagopalan, Keith Thompson, Kevin Ryde, Matthew Horsfall, Mike -Sheldrake, Nicholas Clark, Niko Tyni, Reini Urban, Ricardo Signes, -Salvador Fandiño, Shlomi Fish, Spiros Denaxas, Steffen Müller, Stephen -Oberholtzer, Steve Hay, Tony Cook, Vincent Pit, Zefram. - -The list above is almost certainly incomplete as it is automatically -generated from version control history. In particular, it does not -include the names of the (very much appreciated) contributors who -reported issues to the Perl bug tracker. - -Many of the changes included in this version originated in the CPAN -modules included in Perl's core. We're grateful to the entire CPAN -community for helping Perl to flourish. - -For a more complete list of all of Perl's historical contributors, -please see the F<AUTHORS> file in the Perl source distribution. - -=head1 Reporting Bugs - -If you find what you think is a bug, you might check the articles -recently posted to the comp.lang.perl.misc newsgroup and the perl -bug database at http://rt.perl.org/perlbug/ . There may also be -information at http://www.perl.org/ , the Perl Home Page. - -If you believe you have an unreported bug, please run the L<perlbug> -program included with your release. Be sure to trim your bug down -to a tiny but sufficient test case. Your bug report, along with the -output of C<perl -V>, will be sent off to perlbug@perl.org to be -analysed by the Perl porting team. - -If the bug you are reporting has security implications, which make it -inappropriate to send to a publicly archived mailing list, then please send -it to perl5-security-report@perl.org. This points to a closed subscription -unarchived mailing list, which includes -all the core committers, who will be able -to help assess the impact of issues, figure out a resolution, and help -co-ordinate the release of patches to mitigate or fix the problem across all -platforms on which Perl is supported. Please only use this address for -security issues in the Perl core, not for modules independently -distributed on CPAN. - -=head1 SEE ALSO - -The F<Changes> file for an explanation of how to view exhaustive details -on what changed. - -The F<INSTALL> file for how to build Perl. - -The F<README> file for general stuff. - -The F<Artistic> and F<Copying> files for copyright information. - -=cut diff --git a/pod/perl5153delta.pod b/pod/perl5153delta.pod deleted file mode 100644 index 01762f3481..0000000000 --- a/pod/perl5153delta.pod +++ /dev/null @@ -1,843 +0,0 @@ -=encoding utf8 - -=head1 NAME - -perl5153delta - what is new for perl v5.15.3 - -=head1 DESCRIPTION - -This document describes differences between the 5.15.2 release and -the 5.15.3 release. - -If you are upgrading from an earlier release such as 5.15.1, first read -L<perl5152delta>, which describes differences between 5.15.1 and -5.15.2. - -=head1 Notice - -This release includes a rewrite of the perl OO docs which represent -a significant modernization of the OO documentation. All of the old OO -tutorials (perltoot, perlboot, etc.) have been replaced with pointers -to the new docs. - -=head1 Core Enhancements - -=head2 More CORE subs are callable through references - -Perl 5.15.2 introduced subroutines in the CORE namespace. Most of them -could only be called as barewords; i.e., they could be aliased at compile -time and then inlined under new names. - -Almost all of these functions can now be called through references and via -C<&foo()> syntax, bypassing the prototype. See L<CORE> for a list of the -exceptions. - -=head2 New debugger commands - -The debugger now has C<disable> and C<enable> commands for disabling -existing breakpoints and reënabling them. See L<perldebug>. - -=head1 Security - -=head2 C<File::Glob::bsd_glob()> memory error with GLOB_ALTDIRFUNC (CVE-2011-2728). - -Calling C<File::Glob::bsd_glob> with the unsupported flag GLOB_ALTDIRFUNC would -cause an access violation / segfault. A Perl program that accepts a flags value from -an external source could expose itself to denial of service or arbitrary code -execution attacks. There are no known exploits in the wild. The problem has been -corrected by explicitly disabling all unsupported flags and setting unused function -pointers to null. Bug reported by Clément Lecigne. - -=head1 Incompatible Changes - -=head2 $[ has been removed - -The array/string index offsetting mechanism, controlled by the C<$[> magic -variable, has been removed. C<$[> now always reads as zero. Writing a -zero to it is still permitted, but writing a non-zero value causes an -exception. Those hopelessly addicted to FORTRAN-style 1-based indexing -may wish to use the module L<Array::Base>, which provides an independent -implementation of the index offsetting concept, or L<Classic::Perl>, -which allows L<Array::Base> to be controlled through assignment to C<$[>. - -=head2 User-defined case changing operations. - -This feature was deprecated in Perl 5.14, and has now been removed. -The CPAN module L<Unicode::Casing> provides better functionality without -the drawbacks that this feature had, as are detailed in the 5.14 -documentation: -L<http://perldoc.perl.org/5.14.0/perlunicode.html#User-Defined-Case-Mappings-%28for-serious-hackers-only%29> - -=head2 XSUBs are now 'static' - -XSUB C functions are now 'static', that is, they are not visible from -outside the compilation unit. Users can use the new C<XS_EXTERNAL(name)> -and C<XS_INTERNAL(name)> macros to pick the desired linking behaviour. -The ordinary C<XS(name)> declaration for XSUBs will continue to declare -non-'static' XSUBs for compatibility, but the XS compiler, -C<ExtUtils::ParseXS> (C<xsubpp>) will emit 'static' XSUBs by default. -C<ExtUtils::ParseXS>'s behaviour can be reconfigured from XS using the -C<EXPORT_XSUB_SYMBOLS> keyword, see L<perlxs> for details. - -=head2 Borland compiler - -All support for the Borland compiler has been dropped. The code had not -worked for a long time anyway. - -=head2 Weakening read-only references - -Weakening read-only references is no longer permitted. It should never -have worked anyway, and in some cases could result in crashes. - -=head1 Modules and Pragmata - -=head2 Updated Modules and Pragmata - -=over 4 - -=item * - -L<AnyDBM_File> has been upgraded from version 1.00 to version 1.01. - -This is only a minor documentation update. - -=item * - -L<Archive::Extract> has been upgraded from version 0.52 to version 0.56. - -Resolved an issue where C<unzip> executable was present in C<PATH> on MSWin32 - -=item * - -L<Archive::Tar> has been upgraded from version 1.76 to version 1.78. - -=item * - -L<attributes> has been upgraded from version 0.15 to version 0.16. - -=item * - -L<Attribute::Handlers> has been upgraded from version 0.92 to version 0.93. - -=item * - -L<B::Deparse> has been upgraded from version 1.07 to 1.08. - -It now correctly deparses C<$#{/}> and C<qq(${#}a)>. - -=item * - -L<Carp> has been upgraded from version 1.21 to 1.23. - -L<Carp> is now a dual life module and several fixes have been make to make -it more portable to older versions of perl. - -=item * - -L<CPAN::Meta> has been upgraded from version 2.112150 to version 2.112621. - -=item * - -L<CPAN::Meta::YAML> has been upgraded from version 0.003 to version 0.004. - -=item * - -L<CPANPLUS> has been upgraded from version 0.9109 to version 0.9111. - -=item * - -L<CPANPLUS::Dist::Build> has been upgraded from version 0.56 to version 0.58. - -=item * - -L<Devel::PPPort> has been upgraded from version 3.19 to version 3.20. - -=item * - -L<diagnostics> has been upgraded from version 1.24 to version 1.25. - -It now strips out C<SZE<lt>E<gt>E<lt>...E<gt>> formatting codes before displaying -descriptions [perl #94488]. - -=item * - -L<Data::Dumper> has been upgraded from version 2.133 to version 2.134. - -The XS code for sorting hash keys has been simplified slightly. - -=item * - -L<Exporter> has been upgraded from version 5.64_03 to version 5.65. - -=item * - -L<ExtUtils::ParseXS> has been upgraded from version 3.03_01 to version 3.04_04. - -The handling of C<dVAR> in the generated XS code has been simplified. - -The previously broken "INCLUDE: ... |" functionality has been repaired -(CPAN RT #70213). - -A compatibility-workaround for modules that cannot -live with the new XSUB staticness (see I<XSUBs are now static> above) -has been implemented with the C<PERL_EUPXS_ALWAYS_EXPORT> and -C<PERL_EUPXS_NEVER_EXPORT> preprocessor defines. - -The compiler warnings when -except option is used with F<xsubpp> -have been fixed. - -The XSUB.h changes to make C<XS(name)> use C<XS_INTERNAL(name)> -by default (which were in the 5.15.2 dev release of perl) -have been reverted since too many CPAN modules expect to -be able to refer to XSUBs declared with C<XS(name)>. -Instead, C<ExtUtils::ParseXS> will define a copy of the -C<XS_INTERNAL>/C<XS_EXTERNAL> macros as necessary going back to -perl 5.10.0. By default, ExtUtils::ParseXS will use -C<XS_INTERNAL(name)> instead of C<XS(name)>. - -Fixed regression for input-typemap override in XS argument -list (CPAN RT #70448). - -C<ExtUtils::Typemaps> now properly strips trailing semicolons -from inputmaps. These could previously trigger warnings (errors -in strict C89 compilers) due to additional semicolons being -interpreted as empty statements. - -Now detects and throws a warning if there is a C<CODE> section using -C<RETVAL>, but no C<OUTPUT> section (CPAN RT #69536). - -=item * - -L<Locale::Codes> has been upgraded from version 3.17 to version 3.18. - -The CIA world added non-standard values, so this is no longer used as a source -of data. - -=item * - -L<File::Glob> has been upgraded from version 1.12 to version 1.13. - -On Windows, tilde (~) expansion now checks the C<USERPROFILE> environment -variable, after checking C<HOME>. - -See also L</Security>. - -=item * - -L<Filter::Simple> has been upgrade from version 0.87 to 0.88. - -It is now better at detecting the end of a pod section. It always checks -for =cut, instead of checking for =end (if the pod begins with =begin) or -the end of the paragraph (if the pod begins with =for) [perl #92436]. - -It is also better at detecting variables. A method call on a variable is -no longer considered part of the variable name, so strings passed to a -method are now hidden from filters that do not want to deal with strings -[perl #92436]. - -=item * - -L<IO> has been upgraded from version 1.25_05 to 1.25_06, and L<IO::Handle> -from version 1.32 to 1.33. - -Together, these upgrades fix a problem with IO::Handle's C<getline> and -C<getlines> methods. When these methods are called on the special ARGV -handle, the next file is automatically opened, as happens with the built-in -C<E<lt>E<gt>> and C<readline> functions. But, unlike the built-ins, these -methods were not respecting the caller's use of the L<open> pragma and -applying the approprate I/O layers to the newly-opened file -[rt.cpan.org #66474]. - -=item * - -L<Math::BigFloat> has been upgraded from version 1.995 to version 1.997. - -=item * - -L<Math::BigInt> has been upgraded from version 1.996 to version 1.997. - -=item * - -L<Math::BigInt::FastCalc> has been upgraded from version 0.29 to 0.30. - -=item * - -L<Math::BigRat> has been upgraded from version 0.2602 to version 0.2603. - -C<int()> on a Math::BigRat object containing -1/2 now creates a -Math::BigInt containing 0, rather than -0. L<Math::BigInt> does not even -support negative zero, so the resulting object was actually malformed -[perl #95530]. - -=item * - -L<Module::CoreList> has been upgraded from version 2.55 to 2.56. - -Updated module for 5.15.3, additionally it was missing a few entries: -L<DB_File> in 5.8.2, L<Errno> in 5.6.0 and 5.6.1, and L<VMS::Filespec> -in 5.12.3. - -=item * - -L<Module::Metadata> has been upgraded from version 1.000005_01 to version 1.000007. - -=item * - -L<Module::Load::Conditional> has been upgraded from version 0.44 to version 0.46. - -=item * - -L<ODBM_File> has been upgraded from version 1.11 to version 1.12. - -This is only a minor refactoring of the XS code to bring it closer to the -other C<?DBM_File> modules. - -=item * - -L<open> has been upgraded from version 1.08 to 1.09. - -It no longer turns of layers on standard handles when invoked without the -":std" directive. Similarly, when invoked I<with> the ":std" directive, it -now clears layers on STDERR before applying the new ones, and not just on -STDIN and STDOUT [perl #92728]. - -=item * - -L<perlfaq> has been upgraded from version 5.01500302 to version 5.0150034. - -=item * - -L<Pod::Perldoc> has been upgraded from version 3.15_06 to 3.15_07. - -When rendering a file specified as an HTTP URL, it now use a manpage name -based on the URL, instead of the name of the temporary file. - -=item * - -L<Pod::Simple> has been upgraded from version 3.18 to version 3.19. - -=item * - -L<POSIX> has been upgraded from version 1.24 to version 1.25. - -L<POSIX> no longer uses L<AutoLoader>. Any code which was relying on this -implementation detail was buggy, and may fail as a result of this change. -The module's Perl code has been considerably simplified, roughly halving -the number of lines, with no change in functionality. The XS code has -been refactored to reduce the size of the shared object by about 12%, -with no change in functionality. More POSIX functions now have tests. - -C<POSIX::Termios::setattr> now defaults the third argument to C<TCSANOW>, -instead of 0. On most platforms C<TCSANOW> is defined as 0, but on some -0 is not a valid parameter, which caused a call with defaults to fail. - -=item * - -L<Search::Dict> has been upgraded from version 1.03 to 1.04. - -=item * - -L<Storable> has been upgraded from version 2.31 to version 2.32. - -XS code which duplicates functionality of F<ppport.h> has been removed. -Tests should now pass on older versions of L<Test::More>. Storable now -builds and passes tests back to perl 5.004. - -=item * - -L<Text::Abbrev> has been upgraded from version 1.01 to 1.02. - -=item * - -L<threads> has been upgraded from version 1.83 to 1.85. - -=item * - -L<threads::shared> has been upgraded from version 1.38 to 1.40. - -Destructors on shared objects used to be ignored sometimes if the objects -were referenced only by shared data structures. This has been mostly -fixed, but destructors may still be ignored if the objects still exist at -global destruction time [perl #98204]. - -=item * - -L<Unicode::UCD> has been upgraded from version 0.34 to version 0.35. - -=item * - -L<UNIVERSAL> has been upgraded from version 1.08 to version 1.09. - -=item * - -L<XSLoader> has been upgraded from version 0.15 to version 0.16. - -=back - -=head1 Documentation - -=head2 New Documentation - -=head3 L<perlootut> - -This a new OO tutorial. It focuses on basic OO concepts, and then recommends -that readers choose an OO framework from CPAN. - -=head2 Changes to Existing Documentation - -=head3 L<perlobj> - -=over 4 - -=item * - -This document has been rewritten from scratch, and its coverage of various OO -concepts has been expanded. - -=back - -=head3 L<perlpragma> - -=over 4 - -=item * - -There is now a standard convention for naming keys in the C<%^H>, -documented under L<Key naming|perlpragma/Key naming>. - -=back - -=head2 Removed Documentation - -=head3 Old OO Documentation - -All the old OO tutorials, perltoot, perltooc, and perlboot, have been -removed. The perlbot (bag of object tricks) document has been removed as well. - -=head3 Development Deltas - -The old perldelta files for development cycles prior to 5.15 have been -removed. - -=head1 Utility Changes - -=head3 L<h2ph> - -=over 4 - -=item * - -L<h2ph> used to generate code of the form - - unless(defined(&FOO)) { - sub FOO () {42;} - } - -But the subroutine is a compile-time declaration, and is hence unaffected -by the condition. It has now been corrected to emit a string C<eval> -around the subroutine [perl #99368]. - -=back - -=head1 Configuration and Compilation - -=over 4 - -=item * - -The file F<global.sym> is no longer needed, and has been removed. It -contained a list of all exported functions, one of the files generated by -F<regen/embed.pl> from data in F<embed.fnc> and F<regen/opcodes>. The code -has been refactored so that the only user of F<global.sym>, F<makedef.pl>, -now reads F<embed.fnc> and F<regen/opcodes> directly, removing the need to -store the list of exported functions in an intermediate file. - -As F<global.sym> was never installed, this change will not be visible -outside the build process. - -=back - -=head1 Testing - -=over 4 - -=item * - -F<t/porting/globvar.t> has been added, to run a sanity check on F<globar.sym>. -F<globar.sym> is not needed on most *nix platforms, but is for Win32, hence -previously was it was possible to inadvertently commit changes that worked -perfectly locally, but broke the build on Win32. - -=item * - -F<t/op/unlink.t> has been added to test the C<unlink> function. - -=item * - -Several tests were added in L<POSIX>. - -F<ext/POSIX/t/export.t> added to test C<@EXPORT> and C<@EXPORT_OK>. -F<ext/POSIX/t/sigset.t> added to see if C<POSIX::SigSet> works. -F<ext/POSIX/t/unimplemented.t> added to test the diagnostics for -unimplemented functions. F<ext/POSIX/t/usage.t> added to test the -diagnostics for usage messages. F<ext/POSIX/t/wrappers.t> added to -test the L<POSIX> wrapper subroutines. - -=item * - -F<ext/XS-APItest/t/gotosub.t> in L<XS::APItest> tests C<goto &xsub> -and hints. - -=item * - -F<t/io/shm.t> was added to see if SysV shared memory works. - -=item * - -F<t/op/coreamp.t> was added to test C<&foo()> calls for CORE subs. - -=back - -=head1 Platform Support - -=head2 Platform-Specific Notes - -=over 4 - -=item VMS - -Remove unnecessary includes, fix miscellaneous compiler warnings and -close some unclosed comments on F<vms/vms.c>. - -Remove sockadapt layer from the VMS build. - -=back - -=head1 Internal Changes - -=over 4 - -=item * - -The C<is_gv_magical_sv> function has been eliminated and merged with -C<gv_fetchpvn_flags>. It used to be called to determine whether a GV -should be autovivified in rvalue context. Now it has been replaced with a -new C<GV_ADDMG> flag (not part of the API). - -=item * - -Padlists are now marked C<AvREAL>; i.e., reference-counted. They have -always been reference-counted, but were not marked real, because F<pad.c> -did its own clean-up, instead of using the usual clean-up code in F<sv.c>. -That caused problems in thread cloning, so now the C<AvREAL> flag is on, -but is turned off in F<pad.c> right before the padlist is freed (after -F<pad.c> has done its custom freeing of the pads). - -=item * - -All the C files that make up the Perl core have been converted to UTF-8. - -=back - -=head1 Selected Bug Fixes - -=over 4 - -=item * - -In Perl 5.15.0 C<defined(${'$'})> stopped returning true if the C<$$> -variable had not been used yet. This has been fixed. - -=item * - -C<defined(${"..."})>, C<defined(*{"..."})>, etc., used to -return true for most, but not all built-in variables, if -they had not been used yet. Many times that new built-in -variables were added in past versions, this construct was -not taken into account, so this affected C<${^GLOBAL_PHASE}> and -C<${^UTF8CACHE}>, among others. It also used to return false if the -package name was given as well (C<${"::!"}>) and for subroutines in the -CORE package [perl #97978] [perl #97492] [perl #97484]. - -=item * - -Perl 5.10.0 introduced a similar bug: C<defined(*{"foo"})> where "foo" -represents the name of a built-in global variable used to return false if -the variable had never been used before, but only on the I<first> call. -This, too, has been fixed. - -=item * - -Various functions that take a filehandle argument in rvalue context -(C<close>, C<readline>, etc.) used to call C<FETCH> multiple times, if it -was a tied variable, and warn twice, if it was C<undef> [perl #97482]. - -=item * - -C<close> and similar filehandle functions, when called on built-in global -variables (like C<$+>), used to die if the variable happened to hold the -undefined value, instead of producing the usual "Use of uninitialized -value" warning. - -=item * - -When autovivified file handles were introduced in Perl 5.6.0, C<readline> -was inadvertently made to autovivify when called as C<readline($foo)> (but -not as C<E<lt>$fooE<gt>>). It has now been fixed never to autovivify. - -=item * - -C<defined ${ $tied_variable }> used to call C<FETCH> multiple times, but -now calls it just once. - -=item * - -Some cases of dereferencing a complex expression, such as -C<${ (), $tied } = 1>, used to call C<FETCH> multiple times, but now call -it once. - -=item * - -For a tied variable returning a package name, C<$tied-E<gt>method> used to -call C<FETCH> multiple times (even up to six!), and sometimes would -fail to call the method, due to memory corruption. - -=item * - -Calling an undefined anonymous subroutine (e.g., what $x holds after -C<undef &{$x = sub{}}>) used to cause a "Not a CODE reference" error, which -has been corrected to "Undefined subroutine called" [perl #71154]. - -=item * - -Causing C<@DB::args> to be freed between uses of C<caller> no longer -results in a crash [perl #93320]. - -=item * - -Since 5.6.0, C<*{ ... }> has been inconsistent in how it treats undefined -values. It would die in strict mode or lvalue context for most undefined -values, but would be treated as the empty string (with a warning) for the -specific scalar return by C<undef()> (C<&PL_sv_undef> internally). This -has been corrected. C<undef()> is now treated like other undefined -scalars, as in Perl 5.005. - -=item * - -It used to be possible to free the typeglob of a localised array or hash -(e.g., C<local @{"x"}; delete $::{x}>), resulting in a crash on scope exit. - -=item * - -C<setpgrp($foo)> used to be equivalent to C<($foo, setpgrp)>, because -C<setpgrp> was ignoring its argument if there was just one. Now it is -equivalent to C<setpgrp($foo,0)>. - -=item * - -Assignments like C<*$tied = \&{"..."}> and C<*glob = $tied> now call FETCH -only once. - -=item * - -C<chdir>, C<chmod>, C<chown>, C<utime>, C<truncate>, C<stat>, C<lstat> and -the filetest ops (C<-r>, C<-x>, etc.) now always call FETCH if passed a tied -variable as the last argument. They used to ignore tiedness if the last -thing return from or assigned to the variable was a typeglob or reference -to a typeglob. - -=item * - -Perl 5.15.1 inadvertently stopped C<*foo =~ s/\*//r> from working, as it -would try to force the *foo glob into a string. This has been fixed -[perl #97954]. - -=item * - -If things were arranged in memory the right way, it was possible for -thread joining to emit "Attempt to free unreferenced scalar" warnings if -C<caller> had been used from the C<DB> package prior to thread creation, -due to the way pads were reference-counted and cloned [perl #98092]. - -=item * - -CORE:: subs were introduced in the previous development release, but -C<defined &{"CORE::..."}> did not return true. That has been rectified -[perl #97484]. - -=item * - -Lvalue subroutines were made to autovivify in 5.15.0, but it did not work -in some cases involving an intervening list operator between the -dereference operator and the subroutine call (C<${(), lvsub()}>) -[perl #98184]. - -=item * - -A bug has been fixed that occurs when a tied variable is used as a -subroutine reference: if the last thing assigned to or returned from the -variable was a reference or typeglob, the C<\&$tied> could either crash or -return the wrong subroutine. The reference case is a regression introduced -in Perl 5.10.0. For typeglobs, it has probably never worked till now. - -=item * - -C<given> was not scoping its implicit $_ properly, resulting in memory -leaks or "Variable is not available" warnings [perl #94682]. - -=item * - -C<-l> followed by a bareword no longer "eats" the previous argument to -the list operator in whose argument list it resides. In less convoluted -English: C<print "bar", -l foo> now actually prints "bar", because C<-l> -on longer eats it. - -=item * - -In 5.14.0, filetest ops (C<-r>, C<-x>, etc.) started calling FETCH on a -tied argument belonging to the previous argument to a list operator, if -called with a bareword argument or no argument at all. This has been -fixed, so C<push @foo, $tied, -r> no longer calls FETCH on C<$tied>. - -=item * - -C<shmread> was not setting the scalar flags correctly when reading from -shared memory, causing the existing cached numeric representation in the -scalar to persist [perl #98480]. - -=item * - -Weakening the first argument to an automatically-invoked C<DESTROY> method -could result in erroneous "DESTROY created new reference" errors or -crashes. Now it is an error to weaken a read-only reference. - -=item * - -Under miniperl (used to configure modules when perl itself is built), -C<glob> now clears %ENV before calling csh, since the latter croaks on some -systems if it does not like the contents of the LS_COLORS enviroment -variable [perl #98662]. - -=item * - -C<++> and C<--> now work on copies of globs, instead of dying. - -=item * - -The subroutines in the CORE:: namespace that were introduced in the -previous development release run with the lexical hints (strict, warnings) -of the caller, just as though the built-in function had been called. But -this was not the case for C<goto &CORE::sub>. The CORE sub would end up -running with the lexical hints of the subroutine it replaced, instead of -that subroutine's caller. This has been fixed. - -=item * - -Stacked C<-l> (followed immediately by other filetest operators) did not -work previously; now it does. It is only permitted when the rightmost -filetest op has the special "_" handle for its argument and the most -recent C<stat>/C<lstat> call was an C<lstat>. - -=item * - -In Perl 5.6, C<-l> followed by anything other than a bareword would treat -its argument as a file name. That was changed in 5.8 for glob references -(C<\*foo>), but not for globs themselves (C<*foo>). C<-l> started -returning C<undef> for glob references without setting the last -stat buffer that the "_" handle uses, but only if warnings -were turned on. With warnings off, it was the same as 5.6. -In other words, it was simply buggy and inconsistent. Now the 5.6 -behaviour has been restored. - -=back - -=head1 Known Problems - -=over 4 - -=item * - -We have a failing test in F<op/sigdispatch.t> on i386-netbsd 3.1 - -=item * - -On Solaris, we have two kinds of failure. - -If F<make> is Sun's F<make≥>, we get an error about a badly formed macro -assignment in the F<Makefile>. That happens when F<./Configure> tries to -make depends. F<Configure> then exits 0, but further F<make>-ing fails. - -If F<make> is F<gmake>, F<Configure> completes, then we get errors related -to F</usr/include/stdbool.h> - -=back - -=head1 Acknowledgements - -Perl 5.15.3 represents approximately 2 months of development since Perl 5.15.2 -and contains approximately 160,000 lines of changes across 700 files from 44 -authors. - -Perl continues to flourish into its third decade thanks to a vibrant community -of users and developers. The following people are known to have contributed the -improvements that became Perl 5.15.3: - -Abigail, Alexandr Ciornii, Aristotle Pagaltzis, Chas. Owens, Chip Salzenberg, -Chris 'BinGOs' Williams, Craig A. Berry, Damian Conway, Dave Rolsky, David -Mitchell, Dominic Hargreaves, Douglas Christopher Wilson, Eric Brine, Father -Chrysostomos, Florian Ragwitz, Frederic Briere, George Greer, Gerard Goossen, -H.Merijn Brand, Jerry D. Hedden, Jesse Vincent, Jim Cromie, Karl Williamson, -Keith Thompson, Leo Lapworth, Leon Timmermans, Lukas Mai, Mark Jason Dominus, -Matthew Horsfall, Moritz Lenz, Nicholas Clark, Peter John Acklam, Rafael -Garcia-Suarez, Ricardo Signes, Robin Barker, Shlomi Fish, Steffen Müller, -Stephen Bennett, Stevan Little, Steve Hay, Tony Cook, Vincent Pit, Walt -Mankowski, Zefram. - -The list above is almost certainly incomplete as it is automatically generated -from version control history. In particular, it does not include the names of -the (very much appreciated) contributors who reported issues to the Perl bug -tracker. - -Many of the changes included in this version originated in the CPAN modules -included in Perl's core. We're grateful to the entire CPAN community for -helping Perl to flourish. - -For a more complete list of all of Perl's historical contributors, please see -the F<AUTHORS> file in the Perl source distribution. - -=head1 Reporting Bugs - -If you find what you think is a bug, you might check the articles -recently posted to the comp.lang.perl.misc newsgroup and the perl -bug database at http://rt.perl.org/perlbug/ . There may also be -information at http://www.perl.org/ , the Perl Home Page. - -If you believe you have an unreported bug, please run the L<perlbug> -program included with your release. Be sure to trim your bug down -to a tiny but sufficient test case. Your bug report, along with the -output of C<perl -V>, will be sent off to perlbug@perl.org to be -analysed by the Perl porting team. - -If the bug you are reporting has security implications, which make it -inappropriate to send to a publicly archived mailing list, then please send -it to perl5-security-report@perl.org. This points to a closed subscription -unarchived mailing list, which includes -all the core committers, who will be able -to help assess the impact of issues, figure out a resolution, and help -co-ordinate the release of patches to mitigate or fix the problem across all -platforms on which Perl is supported. Please only use this address for -security issues in the Perl core, not for modules independently -distributed on CPAN. - -=head1 SEE ALSO - -The F<Changes> file for an explanation of how to view exhaustive details -on what changed. - -The F<INSTALL> file for how to build Perl. - -The F<README> file for general stuff. - -The F<Artistic> and F<Copying> files for copyright information. - -=cut diff --git a/pod/perl5154delta.pod b/pod/perl5154delta.pod deleted file mode 100644 index 04c74280d2..0000000000 --- a/pod/perl5154delta.pod +++ /dev/null @@ -1,580 +0,0 @@ -=encoding utf8 - -=head1 NAME - -perl5154delta - what is new for perl v5.15.4 - -=head1 DESCRIPTION - -This document describes differences between the 5.15.3 release and -the 5.15.4 release. - -If you are upgrading from an earlier release such as 5.15.3, first read -L<perl5153delta>, which describes differences between 5.15.3 and -5.15.4. - -=head1 Core Enhancements - -=head2 $^X converted to an absolute path on FreeBSD, OS X and Solaris - -C<$^X> is now converted to an absolute path on OS X, FreeBSD (without -needing F</proc> mounted) and Solaris 10 and 11. This augments the -previous approach of using F</proc> on Linux, FreeBSD and NetBSD -(in all cases, where mounted). - -This makes relocatable perl installations more useful on these platforms. -(See "Relocatable @INC" in F<INSTALL>) - -=head2 Unicode Symbol Names - -Perl now has proper support for Unicode in symbol names. It used to be -that C<*{$foo}> would ignore the internal UTF8 flag and use the bytes of -the underlying representation to look up the symbol. That meant that -C<*{"\x{100}"}> and C<*{"\xc4\x80"}> would return the same thing. All -these parts of Perl have been fixed to account for Unicode: - -=over - -=item * - -Method names (including those passed to C<use overload>) - -=item * - -Typeglob names (including names of variables, subroutines and filehandles) - -=item * - -Package names - -=item * - -Constant subroutine names (not null-clean yet) - -=item * - -C<goto> - -=item * - -Symbolic dereferencing - -=item * - -Second argument to C<bless()> and C<tie()> - -=item * - -Return value of C<ref()> - -=item * - -Package names returned by C<caller()> - -=item * - -Subroutine prototypes - -=item * - -Attributes - -=item * - -Various warnings and error messages that mention variable names or values, -methods, etc. - -=back - -In addition, a parsing bug has been fixed that prevented C<*{é}> from -implicitly quoting the name, but instead interpreted it as C<*{+é}>, which -would cause a strict violation. - -C<*{"*a::b"}> automatically strips off the * if it is followed by an ASCII -letter. That has been extended to all Unicode identifier characters. - -C<$é> is now subject to "Used only once" warnings. It used to be exempt, -as it was treated as a punctuation variable. - -Also, single-character Unicode punctuation variables (like $‰) are now -supported [perl #69032]. They are also supported with C<our> and C<my>, -but that is a mistake that will be fixed before 5.16. - -=head2 Support for Embedded Nulls - -Some parts of Perl did not work correctly with nulls (C<chr 0>) embedded in -strings. That meant that, for instance, C<< $m = "a\0b"; foo->$m >> would -call the "a" method, instead of the actual method name contained in $m. -These parts of perl have been fixed to support nulls: - -=over - -=item * - -Method names - -=item * - -Typeglob names (including filehandle names) - -=item * - -Package names - -=item * - -Autoloading - -=item * - -Return value of C<ref()> - -=item * - -Package names returned by C<caller()> - -=item * - -Filehandle warnings - -=item * - -Typeglob elements (C<*foo{"THING\0stuff"}>) - -=item * - -Signal names - -=item * - -Various warnings and error messages that mention variable names or values, -methods, etc. - -=back - -One side effect of these changes is that blessing into "\0" no longer -causes C<ref()> to return false. - -=head2 Autoloaded sort Subroutines - -Custom sort subroutines can now be autoloaded [perl #30661]: - - sub AUTOLOAD { ... } - @sorted = sort foo @list; # uses AUTOLOAD - -=head2 Improved typemaps for Some Builtin Types - -Most XS authors will be aware that there is a longstanding bug -in the OUTPUT typemap for T_AVREF (C<AV*>), T_HVREF (C<HV*>), -T_CVREF (C<CV*>), and T_SVREF (C<SVREF> or C<\$foo>) that requires -manually decrementing the reference count of the return value -instead of the typemap taking care of this. For -backwards-compatibility, this cannot be changed in the default -typemaps. But we now provide additional typemaps -C<T_AVREF_REFCOUNT_FIXED>, etc. that do not exhibit this bug. -Using them in your extension is as simple as having one line -in your C<TYPEMAP> section: - - HV* T_HVREF_REFCOUNT_FIXED - -=head1 Performance Enhancements - -=over 4 - -=item * - -C<substr> no longer calculates a value to return when called in void -context. - -=back - -=head1 Modules and Pragmata - -=head2 Updated Modules and Pragmata - -=over 4 - -=item * - -L<Archive::Tar> has been upgraded from version 1.78 to version 1.80. - -=item * - -L<base> has been upgraded from version 2.17 to version 2.18. - -C<base> no longer sets a module's C<$VERSION> to "-1" when a module it loads -does not define a C<$VERSION>. This change has been made because "-1" is not -a valid version number under the new "lax" criteria used internally by -C<UNIVERSAL::VERSION>. (See L<version> for more on "lax" version criteria.) - -C<base> no longer internally skips loading modules it has already loaded and -instead relies on C<require> to inspect C<%INC>. This fixes a bug when C<base> -is used with code that clear C<%INC> to force a module to be reloaded. - -=item * - -L<Digest> has been upgraded from version 1.16 to version 1.17. - -=item * - -L<DynaLoader> has been upgraded from version 1.13 to 1.14. - -It stopped exporting its symbols with the ExtUtils::ParseXS changes in -5.15.2. Now it exports them once more. - -=item * - -L<ExtUtils::MakeMaker> has been upgraded from version 6.59 to version 6.61_01. - -=item * - -L<ExtUtils::ParseXS> has been upgraded from version 3.04_04 to version 3.05. - -=item * - -L<Module::CoreList> has been upgraded from version 2.56 to 2.57. - -=item * - -L<Module::Load> has been upgraded from version 0.20 to version 0.22. - -Resolve possible security problem [http://goo.gl/YzHRU] where a '::' prefixed -module can 'jump' out of @INC - -=item * - -L<perlfaq> has been upgraded from version 5.0150034 to version 5.0150035. - -=item * - -L<Unicode::Collate> has been upgraded from version 0.78 to version 0.80. - -Locales updated to CLDR 2.0: ar, be, bg, ha, hr, kk, lt. -Newly supported locales: as, fi__phonebook, gu, hi, kn, kok and ln. - -=back - -=head1 Documentation - -=head2 Changes to Existing Documentation - -=head3 L<perlfunc>, L<open> - -=over 4 - -=item * - -As an accident of history, C<open $fh, "<:", ...> applies the default -layers for the platform (C<:raw> on Unix, C<:crlf> on Windows), ignoring -whatever is declared by L<open.pm|open>. This seems such a useful feature -it has been documented in L<perlfunc|perlfunc/open> and L<open>. - -=back - -=head3 L<perlapi> - -=over 4 - -=item * - -The HV API has long accepted negative lengths to indicate that the key is -in UTF8. Now this is documented. - -=item * - -The C<boolSV()> macro is now documented. - -=back - -=head3 L<perlguts> - -=over 4 - -=item * - -A new section, L<Autoloading with XSUBs|perlguts/Autoloading with XSUBs>, -has been added, which explains the two APIs for accessing the name of the -autoloaded sub. - -=back - -=head1 Diagnostics - -The following additions or changes have been made to diagnostic output, -including warnings and fatal error messages. For the complete list of -diagnostic messages, see L<perldiag>. - -=head2 Changes to Existing Diagnostics - -=over 4 - -=item * - -The message, -"Code point 0x%X is not Unicode, no properties match it; all inverse -prop erties do" has been changed to "Code point 0x%X is not Unicode, all -\p{} matches fail; all \P{} matches succeed" - -=back - -=head1 Testing - -=over 4 - -=item * - -F<t/porting/checkcfgvar.t> now tests that all config.sh-style files are -complete. These are used by the various non-*nix to generate their -F<config.h>, and an incomplete input file will generate invalid output. - -=back - -=head1 Internal Changes - -=over 4 - -=item * - -These new functions have been added as part of the work on Unicode symbols: - - HvNAMELEN - HvNAMEUTF8 - HvENAMELEN - HvENAMEUTF8 - gv_init_pv - gv_init_pvn - gv_init_pvsv - gv_fetchmeth_pv - gv_fetchmeth_pvn - gv_fetchmeth_sv - gv_fetchmeth_pv_autoload - gv_fetchmeth_pvn_autoload - gv_fetchmeth_sv_autoload - gv_fetchmethod_pv_flags - gv_fetchmethod_pvn_flags - gv_fetchmethod_sv_flags - gv_autoload_pv - gv_autoload_pvn - gv_autoload_sv - newGVgen_flags - sv_derived_from_pv - sv_derived_from_pvn - sv_derived_from_sv - sv_does_pv - sv_does_pvn - sv_does_sv - whichsig_pv - whichsig_pvn - whichsig_sv - newCONSTSUB_flags - -The gv_fetchmethod_*_flags functions, like gv_fetchmethod_flags, are -experimental and may change in a future release. - -=item * - -The following functions were added. These are I<not> part of the API: - - GvNAMEUTF8 - GvENAMELEN - GvENAME_HEK - CopSTASH_flags - CopSTASH_flags_set - PmopSTASH_flags - PmopSTASH_flags_set - sv_sethek - HEKfARG - -There is also a C<HEKf> macro corresponding to C<SVf>, for -interpolating HEKs in formatted strings. - -=item * - -C<sv_catpvn_flags> takes a couple of new internal-only flags, -C<SV_CATBYTES> and C<SV_CATUTF8>, which tell it whether the char array to -be concatenated is UTF8. This allows for more efficient concatenation than -creating temporary SVs to pass to C<sv_catsv>. - -=item * - -For XS AUTOLOAD subs, $AUTOLOAD is set once more, as it was in 5.6.0. This -is in addition to setting C<SvPVX(cv)>, for compatibility with 5.8 to 5.14. -See L<perlguts/Autoloading with XSUBs>. - -=item * - -Perl now checks whether the array (the linearised isa) returned by a MRO -plugin begins with the name of the class itself, for which the array was -created, instead of assuming that it does. This prevents the first element -from being skipped during method lookup. It also means that -C<mro::get_linear_isa> may return an array with one more element than the -MRO plugin provided [perl #94306]. - -=back - -=head1 Selected Bug Fixes - -=over 4 - -=item * - -In Perl 5.14.0, C<$tainted ~~ @array> stopped working properly. Sometimes -it would erroneously fail (when C<$tainted> contained a string that occurs -in the array I<after> the first element) or erroneously succeed (when -C<undef> occurred after the first element) [perl #93590]. - -=item * - -Perl 5.15.0 introduced a minor regression, in that an object referenced by -a deleted hash element would be able to access the freed element from its -DESTROY method, causing panic errors [perl #99660]. - -=item * - -Functions in the CORE package can now be called as methods. That used to -work only when they had been called or referenced already. So -C<< "foo"->CORE::ucfirst >> returns Foo. - -=item * - -C<use> and C<require> are no longer affected by the I/O layers active in -the caller's scope (enabled by L<open.pm|open>) [perl #96008]. - -=item * - -Errors that occur when methods cannot be found during overloading now -mention the correct package name, as they did in 5.8.x, instead of -erroneously mentioning the "overload" package, as they have since 5.10.0. - -=item * - -Undefining C<%overload::> no longer causes a crash. - -=item * - -C<our $::é; $é> (which is invalid) no longer produces the "Compilation -error at lib/utf8_heavy.pl..." error message, which it started emitting in -5.10.0 [perl #99984]. - -=item * - -A minor regression, introduced Perl 5.15.0, has been fixed in which some -regular expression Unicode property matches (C<\p{...}>) matched -non-Unicode code points. - -=item * - -In case-insensitive regular expression pattern matching, no longer on -UTF-8 encoded strings does the scan for the start of match only look at -the first possible position. This caused matches such as -C<"f\x{FB00}" =~ /ff/i> to fail. - -=item * - -On 64-bit systems, C<read()> now understands large string offsets beyond -the 32-bit range. - -=item * - -Errors that occur when processing subroutine attributes no longer cause the -subroutine's op tree to leak. - -=item * - -C<sort> now works once more with custom sort routines that are XSUBs. It -stopped working in 5.10.0. - -=item * - -C<sort> with a constant for a custom sort routine, although it produces -unsorted results, no longer crashes. It started crashing in 5.10.0. - -=item * - -Warnings produced when a custom sort routine returns a non-numeric value -now contain "in sort"; e.g., "Use of uninitialized value in sort". - -=item * - -C<< sort { $a <=> $b } >>, which is optimised internally, now produces -"uninitialized" warnings for NaNs (not-a-number values), since C<< <=> >> -returns C<undef> for those. This brings it in line with -S<C<< sort { 1; $a <=> $b } >>> and other more complex cases, which are not -optimised [perl #94390]. - -=item * - -C<..> and C<...> in list context now call FETCH only once on tied -arguments, instead of three or four times [perl #53554]. - -=item * - -C<..> and C<...> in list context now mention the name of the variable in -"uninitialized" warnings for string (as opposed to numeric) ranges. - -=back - -=head1 Acknowledgements - -Perl 5.15.4 represents approximately 1 month of development since Perl 5.15.3 -and contains approximately 31,000 lines of changes across 350 files from 23 -authors. - -Perl continues to flourish into its third decade thanks to a vibrant community -of users and developers. The following people are known to have contributed the -improvements that became Perl 5.15.4: - -Alan Haggai Alavi, Brian Fraser, Chip Salzenberg, Chris 'BinGOs' Williams, Dave -Rolsky, David Golden, David Mitchell, Dennis Kaarsemaker, Eric Brine, Father -Chrysostomos, Florian Ragwitz, George Greer, Gerard Goossen, H.Merijn Brand, -Jim Cromie, John P. Linderman, Karl Williamson, Nicholas Clark, Reini Urban, -Steffen Müller, Stevan Little, Thorsten Glaser, Tony Cook. - -The list above is almost certainly incomplete as it is automatically generated -from version control history. In particular, it does not include the names of -the (very much appreciated) contributors who reported issues to the Perl bug -tracker. - -Many of the changes included in this version originated in the CPAN modules -included in Perl's core. We're grateful to the entire CPAN community for -helping Perl to flourish. - -For a more complete list of all of Perl's historical contributors, please see -the F<AUTHORS> file in the Perl source distribution. - -=head1 Reporting Bugs - -If you find what you think is a bug, you might check the articles -recently posted to the comp.lang.perl.misc newsgroup and the perl -bug database at http://rt.perl.org/perlbug/ . There may also be -information at http://www.perl.org/ , the Perl Home Page. - -If you believe you have an unreported bug, please run the L<perlbug> -program included with your release. Be sure to trim your bug down -to a tiny but sufficient test case. Your bug report, along with the -output of C<perl -V>, will be sent off to perlbug@perl.org to be -analysed by the Perl porting team. - -If the bug you are reporting has security implications, which make it -inappropriate to send to a publicly archived mailing list, then please send -it to perl5-security-report@perl.org. This points to a closed subscription -unarchived mailing list, which includes -all the core committers, who will be able -to help assess the impact of issues, figure out a resolution, and help -co-ordinate the release of patches to mitigate or fix the problem across all -platforms on which Perl is supported. Please only use this address for -security issues in the Perl core, not for modules independently -distributed on CPAN. - -=head1 SEE ALSO - -The F<Changes> file for an explanation of how to view exhaustive details -on what changed. - -The F<INSTALL> file for how to build Perl. - -The F<README> file for general stuff. - -The F<Artistic> and F<Copying> files for copyright information. - -=cut diff --git a/pod/perl5155delta.pod b/pod/perl5155delta.pod deleted file mode 100644 index 0269f69e96..0000000000 --- a/pod/perl5155delta.pod +++ /dev/null @@ -1,659 +0,0 @@ -=encoding utf8 - -=head1 NAME - -perl5155delta - what is new for perl v5.15.5 - -=head1 DESCRIPTION - -This document describes differences between the 5.15.4 release and -the 5.15.5 release. - -If you are upgrading from an earlier release such as 5.15.3, first read -L<perl5154delta>, which describes differences between 5.15.3 and -5.15.4. - -=head1 Core Enhancements - -=head2 More consistent C<eval> - -The C<eval> 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. - -Under C<use v5.15> and higher, the C<unicode_eval> and C<evalbytes> -features resolve this. The C<unicode_eval> feature causes C<eval $string> -to treat the string always as Unicode. The C<evalbytes> features provides -a function, itself called C<evalbytes>, which evaluates its argument always -as a string of bytes. - -These features also fix oddities with source filters leaking to outer -dynamic scopes. - -See L<feature> for more detail. - -=head2 C<$[> is back - -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<use v5.16>. - -The new implementation has some bug fixes. See L<arybase>. - -=head1 Security - -=head2 Privileges are now set correctly when assigning to C<$(> - -A hypothetical bug (probably non-exploitable in practice) due to the -incorrect setting of the effective group ID while setting C<$(> has been -fixed. The bug would only have affected systems that have C<setresgid()> -but not C<setregid()>, but no such systems are known of. - -=head1 Incompatible Changes - -=head2 Certain deprecated Unicode properties are no longer supported by default - -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. - -Perl may be recompiled to include any or all of them; instructions are -given in -L<perluniprops/Unicode character properties that are NOT accepted by Perl>. - -=head2 Dereferencing IO thingies as typeglobs - -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. - -Previously, it would stringify as an empty string, but some operators would -treat it as undefined, producing an "uninitialized" warning. - -Having a typeglob appear as an empty string is a side effect of the -implementation that has caused various bugs over the years. - -The solution was to make it stringify like a normal anonymous typeglob, -like those produced by C<< open($foo->{bar}, ...) >> [perl #96326]. - -=head1 Deprecations - -=head2 Don't read the Unicode data base files in F<lib/unicore> - -It is now deprecated to directly read the Unicode data base files. -These are stored in the F<lib/unicore> directory. Instead, you should -use the new functions in L<Unicode::UCD>. 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<lib/unicore/ToDigit.pl>. -L<Unicode::UCD/prop_invmap()> can be used to get at its data instead. - -=head1 Performance Enhancements - -=over 4 - -=item * - -Due to changes in L<File::Glob>, Perl's C<glob> 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. - -This does not affect VMS, as it does not use File::Glob. - -=back - -=head1 Modules and Pragmata - -=head2 New Modules and Pragmata - -=over 4 - -=item * - -L<arybase> -- this new module implements the C<$[> variable. - -=back - -=head2 Updated Modules and Pragmata - -=over 4 - -=item * - -L<Archive::Extract> has been upgraded from version 0.56 to version 0.58. - -=item * - -L<B::Concise> has been upgraded from version 0.86 to version 0.87. - -=item * - -L<B::Deparse> has been upgraded from version 1.08 to version 1.09. - -It now correctly deparses C<CORE::do>, C<CORE::glob> and slices of empty -lists. - -=item * - -L<CGI> has been upgraded from version 3.55 to version 3.58. - -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 E<gt>= 0.70 or FCGI E<lt>= 0.73 introduces a security issue. -L<https://rt.cpan.org/Public/Bug/Display.html?id=68380> -L<http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2011-2766> - -=item * - -L<charnames> has been upgraded from version 1.23 to version 1.24. - -=item * - -L<Compress::Raw::Bzip2> has been upgraded from version 2.037 to version 2.042. - -=item * - -L<Compress::Raw::Zlib> has been upgraded from version 2.037 to version 2.042. - -=item * - -L<Compress::Zlib> has been upgraded from version 2.037 to version 2.042. - -=item * - -L<CPANPLUS> has been upgraded from version 0.9111 to version 0.9112. - -=item * - -L<CPANPLUS::Dist::Build> has been upgraded from version 0.58 to version 0.60. - -=item * - -L<Digest::SHA> has been upgraded from version 5.62 to version 5.63. - -Added code to allow very large data inputs all at once, which had previously been -limited to several hundred megabytes at a time - -=item * - -L<Errno> has been upgraded from version 1.14 to version 1.15. - -Choosing an archname containing a @, $ or % character no longer results in -unintended interpolation in Errno's architecture check. - -=item * - -L<ExtUtils::MakeMaker> has been upgraded from version 6.61_01 to version 6.63_02. - -=item * - -L<feature> has been upgraded from version 1.22 to version 1.23. - -=item * - -L<File::DosGlob> has been upgraded from version 1.05 to version 1.06. - -=item * - -L<File::Glob> has been upgraded from version 1.13 to version 1.14. - -It has a new C<:bsd_glob> export tag, intended to replace C<:glob>. Like -C<:glob> it overrides C<glob> 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. - -There are other changes affecting Perl's own C<glob> operator (which uses -File::Glob internally, except on VMS). See L</Performance Enhancements> -and L</Selected Bug Fixes>. - -=item * - -L<HTTP::Tiny> has been upgraded from version 0.013 to version 0.016. - -Adds additional shorthand methods for all common HTTP verbs, -a C<post_form()> method for POST-ing x-www-form-urlencoded data and -a C<www_form_urlencode()> utility method. - -=item * - -L<Module::CoreList> has been upgraded from version 2.57 to version 2.58. - -=item * - -L<Opcode> has been upgraded from version 1.20 to version 1.21. - -=item * - -L<perlfaq> has been upgraded from version 5.0150035 to version 5.0150036. - -=item * - -L<Socket> as been upgraded from version 1.94_01 to 1.94_02. - -It has new functions and constants for handling IPv6 sockets: - - 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 - -=item * - -L<Storable> has been upgraded from version 2.32 to 2.33. - -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. - -=item * - -L<strict> has been upgraded from version 1.04 to version 1.05. - -=item * - -L<Unicode::Collate> has been upgraded from version 0.80 to version 0.85. - -Locales updated to CLDR 2.0: mk, mt, nb, nn, ro, ru, sk, sr, sv, uk, -zh__pinyin, zh__stroke -Newly supported locales: bn, fa, ml, mr, or, pa, sa, si, si__dictionary, -sr_Latn, sv__reformed, ta, te, th, ur, wae. - -=item * - -L<Unicode::UCD> has been upgraded from version 0.36 to version 0.37. - -This adds four new functions: C<prop_aliases()>, and -C<prop_value_aliases()> which are used to find all the Unicode-approved -synonyms for property names, or to convert from one name to another; -C<prop_invlist> which returns all the code points matching a given -Unicode binary property; and C<prop_invmap> which returns the complete -specification of a given Unicode property. - -=item * - -L<UNIVERSAL> has been upgraded from version 1.09 to version 1.10. - -=back - -=head1 Diagnostics - -The following additions or changes have been made to diagnostic output, -including warnings and fatal error messages. For the complete list of -diagnostic messages, see L<perldiag>. - -=head2 New Diagnostics - -=head3 New Errors - -=over 4 - -=item * - -L<Source filters apply only to byte streams|perldiag/"Source filters apply only to byte streams"> - -This new error occurs when you try to activate a source filter (usually by -loading a source filter module) within a string passed to C<eval> under the -C<unicode_eval> feature. - -=item * - -L<That use of $[ is unsupported|perldiag/"That use of $[ is unsupported"> - -This previously removed error has been restored with the re-implementation -of C<$[> as a module. - -=back - -=head3 New Warnings - -=over 4 - -=item * - -L<length() used on %s|perldiag/length() used on %s> - -This new warning occurs when C<length> is used on an array or hash, instead -of C<scalar(@array)> or C<scalar(keys %hash)>. - -=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. - -=item * - -L<Use of assignment to $[ is deprecated|perldiag/"Use of assignment to $[ is deprecated"> - -This previously removed warning has been restored with the re-implementation -of C<$[> as a module. - -=back - -=head2 Changes to Existing Diagnostics - -=over 4 - -=item * - -The uninitialized warning for C<y///r> when C<$_> is implicit and undefined -now mentions the variable name, just like the non-/r variation of the -operator. - -=item * - -The "Applying pattern match..." or similar warning produced when an array -or hash is on the left-hand side of the C<=~> operator now mentions the -name of the variable. - -=back - -=head1 Configuration and Compilation - -=over 4 - -=item * - -F<pod/buildtoc>, used by the build process to build L<perltoc>, has been -refactored and simplified. It now only contains code to build L<perltoc>; -the code to regenerate Makefiles has been moved to F<Porting/pod_rules.pl>. -It's a bug if this change has any material effect on the build process. - -=back - -=head1 Platform Support - -=head2 Platform-Specific Notes - -=over 4 - -=item GNU/Hurd - -Numerous build and test failures on GNU/Hurd have been resolved with hints -for building DBM modules, detection of the library search path, and enabling -of large file support. - -=item OpenVOS - -Perl is now built with dynamic linking on OpenVOS, the minimum supported -version of which is now Release 17.1.0. - -=item SunOS - -The CC workshop C++ compiler is now detected and used on systems that ship -without cc. - -=back - -=head1 Internal Changes - -=over 4 - -=item * - -C<PL_curstash> is now reference-counted. - -=back - -=head1 Selected Bug Fixes - -=over 4 - -=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]: - - package Foo; - BEGIN {*Foo:: = *Bar::} - sub foo; - -=item * - -F<dumpvar.pl>, and consequently the C<x> 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]. - -=item * - -The C<x> repetition operator no longer crashes on 64-bit builds with large -repeat counts [perl #94560]. - -=item * - -A fix to C<glob> 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<File::Glob> fails to load for some reason, Perl reverts to using csh. -So it would apply in that case. - -=item * - -On OSes other than VMS, Perl's C<glob> operator (and the C<< <...> >> form) -use L<File::Glob> underneath. L<File::Glob> splits the pattern into words, -before feeding each word to its C<bsd_glob> function. - -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]. - -=item * - -C<CORE::glob> now works as a way to call the default globbing function. It -used to respect overrides, despite the C<CORE::> prefix. - -=item * - -In 5.14, C</[[:lower:]]/i> and C</[[:upper:]]/i> no longer matched the -opposite case. This has been fixed [perl #101970]. - -=item * - -A regular expression match with an overloaded object on the right-hand side -would in some cases stringify the object too many times. - -=item * - -The C-level C<pregcomp> 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]. - -=item * - -A regression has been fixed that was introduced in 5.14, in C</i> -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] - -=item * - -C<@{"..."} = reverse ...> started crashing in 5.15.3. This has been fixed. - -=item * - -C<ref> in a tainted expression started producing an "sv_upgrade" error in -5.15.4. This has been fixed. - -=item * - -Weak references to lexical hashes going out of scope were not going stale -(becoming undefined), but continued to point to the hash. - -=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. - -=item * - -A C<keys> optimisation in Perl 5.12.0 to make it faster on empty hashes -caused C<each> not to reset the iterator if called after the last element -was deleted. This has been fixed. - -=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. - -=item * - -String eval used not to localise C<%^H> when compiling its argument if it -was empty at the time the C<eval> call itself was compiled. This could -lead to scary side effects, like C<use re "/m"> enabling other flags that -the surrounding code was trying to enable for its caller [perl #68750]. - -=item * - -Creating a BEGIN block from XS code (via C<newXS> or C<newATTRSUB>) 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. - -=item * - -C<eval $string> and C<require> 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<BEGIN { $^H{foo}=7 }> equivalent to -C<BEGIN { eval '$^H{foo}=7' }> [perl #70151]. - -=item * - -When subroutine calls are intercepted by the debugger, the name of the -subroutine or a reference to it is stored in C<$DB::sub>, for the debugger -to access. In some cases (such as C<$foo = *bar; undef *bar; &$foo>) -C<$DB::sub> would be set to a name that could not be used to find the -subroutine, and so the debugger's attempt to call it would fail. Now the -check to see whether a reference is needed is more robust, so those -problems should not happen anymore [rt.cpan.org #69862]. - -=item * - -Localising a tied scalar that returns a typeglob no longer stops it from -being tied till the end of the scope. - -=item * - -When C<open> is called with three arguments, the third being a file handle -(as in C<< open $fh, ">&", $fh2 >>), if the third argument is tied or a -reference to a tied variable, FETCH is now called exactly once, instead of -0, 2, or 3 times (all of which could occur in various circumstances). - -=item * - -C<sort> no longer ignores FETCH when passed a reference to a tied glob for -the comparison routine. - -=item * - -Warnings emitted by C<sort> when a custom comparison routine returns a -non-numeric value now show the line number of the C<sort> operator, rather -than the last line of the comparison routine. The warnings also occur now -only if warnings are enabled in the scope where C<sort> occurs. Previously -the warnings would occur if enabled in the comparison routine's scope. - -=item * - -C<Internals::SvREFCNT> now behaves consistently in 'get' and 'set' scenarios -[perl #103222] and also treats the reference count as unsigned. - -=item * - -Calling C<require> on an implicit C<$_> when C<*CORE::GLOBAL::require> has -been overridden does not segfault anymore, and C<$_> is now passed to the -overriding subroutine [perl #78260]. - -=back - -=head1 Acknowledgements - -Perl 5.15.5 represents approximately 1 month of development since Perl 5.15.4 -and contains approximately 28,000 lines of changes across 440 files from 29 -authors. - -Perl continues to flourish into its third decade thanks to a vibrant community -of users and developers. The following people are known to have contributed the -improvements that became Perl 5.15.5: - -Brian Fraser, Chris 'BinGOs' Williams, chromatic, Craig A. Berry, David Golden, -Father Chrysostomos, Florian Ragwitz, H.Merijn Brand, Jilles Tjoelker, Jim -Meyering, Karl Williamson, Laurent Dami, Leon Timmermans, Mark A. Stratman, -Matthew Horsfall, Michael G Schwern, Moritz Lenz, Nicholas Clark, Paul Evans, -Paul Green, Paul Johnson, Perlover, Pino Toscano, Reini Urban, Steve Hay, Tom -Christiansen, Tony Cook, Vincent Pit, Zefram. - -The list above is almost certainly incomplete as it is automatically generated -from version control history. In particular, it does not include the names of -the (very much appreciated) contributors who reported issues to the Perl bug -tracker. - -Many of the changes included in this version originated in the CPAN modules -included in Perl's core. We're grateful to the entire CPAN community for -helping Perl to flourish. - -For a more complete list of all of Perl's historical contributors, please see -the F<AUTHORS> file in the Perl source distribution. - -=head1 Reporting Bugs - -If you find what you think is a bug, you might check the articles -recently posted to the comp.lang.perl.misc newsgroup and the perl -bug database at http://rt.perl.org/perlbug/ . There may also be -information at http://www.perl.org/ , the Perl Home Page. - -If you believe you have an unreported bug, please run the L<perlbug> -program included with your release. Be sure to trim your bug down -to a tiny but sufficient test case. Your bug report, along with the -output of C<perl -V>, will be sent off to perlbug@perl.org to be -analysed by the Perl porting team. - -If the bug you are reporting has security implications, which make it -inappropriate to send to a publicly archived mailing list, then please send -it to perl5-security-report@perl.org. This points to a closed subscription -unarchived mailing list, which includes -all the core committers, who will be able -to help assess the impact of issues, figure out a resolution, and help -co-ordinate the release of patches to mitigate or fix the problem across all -platforms on which Perl is supported. Please only use this address for -security issues in the Perl core, not for modules independently -distributed on CPAN. - -=head1 SEE ALSO - -The F<Changes> file for an explanation of how to view exhaustive details -on what changed. - -The F<INSTALL> file for how to build Perl. - -The F<README> file for general stuff. - -The F<Artistic> and F<Copying> files for copyright information. - -=cut diff --git a/pod/perl5156delta.pod b/pod/perl5156delta.pod deleted file mode 100644 index af132860b5..0000000000 --- a/pod/perl5156delta.pod +++ /dev/null @@ -1,946 +0,0 @@ -=encoding utf8 - -=head1 NAME - -perl5156delta - what is new for perl v5.15.6 - -=head1 DESCRIPTION - -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.4, first read -L<perl5155delta>, which describes differences between 5.15.4 and -5.15.5. - -=head1 Core Enhancements - -=head2 C<__SUB__> - -The new C<__SUB__> token, available under the "current_sub" feature -(see L<feature>) or C<use v5.15>, returns a reference to the current -subroutine, making it easier to write recursive closures. - -=head2 New option for the debugger's B<t> command - -The B<t> command in the debugger, which toggles tracing mode, now -accepts a numeric 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)>. - -=head1 Security - -=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 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()>. - -=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 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<substr> 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<substr> itself, but only when the returned lvalue is -read or modified. - -These changes result in several incompatible changes and bug fixes: - -=over - -=item * - -If the original string changes length after the call to C<substr> 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 to use reference as lvalue in substr" warning. - -=item * - -That warning now occurs when the returned lvalue is assigned to, not -when C<substr> itself is called. This only makes a difference if the -return value of C<substr> is referenced and assigned to later. - -=item * - -The order in which "uninitialized" warnings occur for arguments to -C<substr> 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<substr>. - -=item * - -C<substr> assignments no longer call FETCH twice if the first argument -is a tied variable, just once. - -=back - -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. When C<eval> was passed a -string in list context and a syntax error occurred, 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 Last-accessed filehandle - -Perl has an internal variable that stores the last filehandle to be -accessed. It is used by C<$.> and by C<tell> and C<eof> without -arguments. - -It used to be possible to set this internal variable to a glob copy and -then modify that glob copy to be something other than a glob, and still -have the last-accessed filehandle associated with the variable after -assigning a glob to it again: - - my $foo = *STDOUT; # $foo is a glob copy - <$foo>; # $foo is now the last-accessed handle - $foo = 3; # no longer a glob - $foo = *STDERR; # still the last-accessed handle - -Now the C<$foo = 3> assignment unsets that internal variable, so there -is no last-accessed filehandle, just as if C<< <$foo> >> had never -happened. - -=head2 XS API tweak - -The C<newCONSTSUB_flags> C-level function, added in 5.15.4, now has a -C<len> parameter. - -=head1 Performance Enhancements - -=over 4 - -=item * - -Perl 5.12.0 sped up the destruction of objects whose classes define -empty C<DESTROY> methods (to prevent autoloading), by simply not -calling such empty methods. This release takes this optimisation a -step further, by not calling any C<DESTROY> method that begins with a -C<return> statement. This can be useful for destructors that are only -used for debugging: - - use constant DEBUG => 1; - sub DESTROY { return unless DEBUG; ... } - -Constant-folding will reduce the first statement to C<return;> if DEBUG -is set to 0, triggering this optimisation. - -=item * - -Assigning 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 C<substr> 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 - -=head2 Updated Modules and Pragmata - -=over 4 - -=item * - -L<Archive::Tar> 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<AutoLoader> has been upgraded from version 5.71 to version 5.72. - -=item * - -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 version 1.10. - -Various constructs that used to be deparsed incorrectly have been -fixed: - -=over - -=item C<sort(foo(bar))> - -It used to deparse as C<sort foo(bar)>, which 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 llaf rule - -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 llaf rule, 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<&&>. - -=item C<require $this + $that> - -In Perl 5.14, C<require> followed by any binary operator started -deparsing as C<no>. - -=back - -=item * - -L<Carp> has been upgraded from version 1.23 to version 1.24. - -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 * - -L<Compress::Raw::Zlib> has been upgraded from version 2.042 to version -2.045. - -=item * - -L<Compress::Raw::Bzip2> has been upgraded from version 2.042 to version -2.045. - -=item * - -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.9114. - -=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 in their names. - -=item * - -L<diagnostics> has been upgraded from version 1.25 to version 1.26. - -It now understands the "%X" format code, which some error messages -started using in Perl 5.14.0. - -=item * - -L<Digest::SHA> has been upgraded from version 5.63 to version 5.70. - -Added BITS mode to the addfile method and shasum. This makes -partial-byte inputs 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 * - -L<IO::Compress::Base> has been upgraded from version 2.042 to version -2.046. - -Added zipdetails utility. - -=item * - -L<Locale::Codes> has been upgraded from version 3.18 to version 3.20. - -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 some time 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::*). Added Language Family codes (langfam) as defined -in ISO 639-5. - -=item * - -L<Module::CoreList> has been upgraded from version 2.58 to version -2.59. - -=item * - -L<Module::Loaded> has been upgraded from version 0.06 to version 0.08. - -=item * - -L<Pod::LaTeX> 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<POSIX> has been upgraded from version 1.26 to version 1.27. - -It no longer produces a "Constant subroutine TCSANOW redefined" warning -on Windows. - -This bug was introduced in Perl 5.15.3. - -=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 the -locales: ja, ko, zh__big5han, zh__gb2312han, zh__pinyin, zh__stroke. - -Locale/*.pl files are now searched for 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 - -=over 4 - -=item * - -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 - -=head1 Documentation - -=head2 Changes to Existing Documentation - -=head3 L<perlsec/Laundering and Detecting Tainted Data> - -=over 4 - -=item * - -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 remains L<Scalar::Util/tainted>. - -=back - -=head1 Diagnostics - -=head2 Changes to Existing Diagnostics - -=over 4 - -=item * - -Redefinition warnings for constant subroutines used to be mandatory, -even occurring under C<no warnings>. Now they respect the L<warnings> -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<perldiag>. - -=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. - -=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 - -=head3 L<zipdetails> - -=over 4 - -=item * - -L<zipdetails> 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 - -=head1 Configuration and Compilation - -=over 4 - -=item * - -F<pod/roffitall> is now built by F<pod/buildtoc>, 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<unicore/Name.pm>. This has been corrected [perl #104226]. - -=item * - -The man page for C<XS::Typemap> is no longer installed. C<XS::Typemap> -is a test module which is not installed, hence installing its -documentation makes no sense. - -=for 5.16.0 Merge this with the entry for "Stop installing XS::APItest*" - -=item * - -The man pages for the perl FAQ, L<perlxs>, L<perlxstut> and L<perldoc> -are once again correctly installed in F<man1>, not F<man3> - -=for 5.16.0 This isn't a regression from 5.14.x, so don't mention this. - -=item * - -The -Dusesitecustomize and -Duserelocatableinc options now work -together properly. - -=back - -=head1 Testing - -=over 4 - -=item * - -The F<substr.t> and F<substr_thr.t> scripts for testing C<substr> have -been moved under F<t/op/>, where they were originally. They had been -moved under F<t/re/> along with the substitution tests when that -directory was created. - -=back - -=head1 Platform Support - -=head2 Platform-Specific Notes - -=head3 VMS - -=over 4 - -=item * - -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 - -=head1 Selected Bug Fixes - -=over 4 - -=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. - -=item * - -C<sort> was not treating C<sub {}> and C<sub {()}> as equivalent when -such a sub was provided as the comparison routine. It used to croak on -C<sub {()}>. - -=item * - -Subroutines from the C<autouse> 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<autouse> 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<autouse> logic was reversed in -5.10-14. Only subroutines from the C<autouse> 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<newCONSTSUB> 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<newCONSTSUB> redefined an existing -subroutine: - - use warnings; - BEGIN { - no warnings; - some_XS_function_that_calls_new_CONSTSUB(); - } - -=item * - -Redefinition warnings for constant subroutines are on by default (what -are known as severe warnings in L<perldiag>). 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 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 bug fix in Perl 5.14 introduced a new bug, causing "uninitialized" -warnings to report the wrong variable if the operator in question had -two operands and one was C<%{...}> or C<@{...}>. This has been fixed -[perl #103766]. - -=item * - -C<< version->new("version") >> and C<printf "%vd", "version"> no longer -crash [perl #102586]. - -=item * - -C<$tied =~ y/a/b/>, C<chop $tied> and C<chomp $tied> now call FETCH -just once when $tied holds a reference. - -=item * - -Four-argument C<select> now always calls FETCH on tied arguments. It -used to skip the call if the tied argument happened to hold C<undef> or -a typeglob. - -=item * - -Four-argument C<select> no longer produces its "Non-string passed as -bitmask" warning on tied or tainted variables that are strings. - -=item * - -C<sysread> now always calls FETCH on the buffer passed to it if the -buffer is tied. It used to skip the call if the tied variable happened -to hold a typeglob. - -=item * - -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 * - -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 longer 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 * - -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 * - -Creating a C<UNIVERSAL::AUTOLOAD> sub no longer stops C<%+>, C<%-> and -C<%!> from working some of the time [perl #105024]. - -=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 released 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. 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]. - -=item * - -The debugger no longer tries to do C<local $_> when dumping data -structures. - -=item * - -Calling C<readline($fh)> where $fh is a glob copy (e.g., after C<$fh = -*STDOUT>), assigning something other than a glob to $fh, and then -freeing $fh (e.g., by leaving the scope where it is defined) no longer -causes the internal variable used by C<$.> (C<PL_last_in_gv>) to point -to a freed scalar, that could be reused for some other glob, causing -C<$.> to use some unrelated filehandle [perl #97988]. - -=item * - -A regression in 5.14 caused these statements not to set the internal -variable that holds the handle used by C<$.>: - - my $fh = *STDOUT; - tell $fh; - eof $fh; - seek $fh, 0,0; - tell *$fh; - eof *$fh; - seek *$fh, 0,0; - readline *$fh; - -This is now fixed, but C<tell *{ *$fh }> still has the problem, and it -is not clear how to fix it [perl #106536]. - -=item * - -Version comparisons, such as those that happen implicitly with C<use -v5.43>, no longer cause locale settings to change [perl #105784]. - -=item * - -F<pod/buildtoc>, which generates L<perltoc>, put path names in the -L<perltoc> file. This bug was introduced in 5.15.1. - -=back - -=head1 Acknowledgments - -Perl 5.15.6 represents approximately 2 months of development since Perl -5.15.5 and contains approximately 48,000 lines of changes across 560 -files from 36 authors. - -Perl continues to flourish into its third decade thanks to a vibrant -community of users and developers. The following people are known to -have contributed the improvements that became Perl 5.15.6: - -Aaron Crane, Abhijit Menon-Sen, Alexandr Ciornii, Brian Fraser, Carl -Hayter, Chris 'BinGOs' Williams, Craig A. Berry, Dave Rolsky, David -Golden, David Mitchell, Dominic Hargreaves, Father Chrysostomos, James -E Keenan, Johannes Plunien, John Peacock, Karl Williamson, Marc Green, -Mark Dootson, Matthew Horsfall, Nicholas Clark, Paul Evans, Peter -Martini, Peter Scott, Rafael Garcia-Suarez, Reini Urban, Ricardo -Signes, Rodolfo Carvalho, Shlomi Fish, Steffen Müller, Steve Hay, -Steve Peters, Thomas Sibley, Timothe Litt, Tony Cook, Vadim Konovalov, -Ævar Arnfjörð Bjarmason. - -The list above is almost certainly incomplete as it is automatically -generated from version control history. In particular, it does not -include the names of the (very much appreciated) contributors who -reported issues to the Perl bug tracker. - -Many of the changes included in this version originated in the CPAN -modules included in Perl's core. We're grateful to the entire CPAN -community for helping Perl to flourish. - -For a more complete list of all of Perl's historical contributors, -please see the F<AUTHORS> file in the Perl source distribution. - -=head1 Reporting Bugs - -If you find what you think is a bug, you might check the articles -recently posted to the comp.lang.perl.misc newsgroup and the perl bug -database at http://rt.perl.org/perlbug/ . There may also be -information at http://www.perl.org/ , the Perl Home Page. - -If you believe you have an unreported bug, please run the L<perlbug> -program included with your release. Be sure to trim your bug down to a -tiny but sufficient test case. Your bug report, along with the output -of C<perl -V>, will be sent off to perlbug@perl.org to be analysed by -the Perl porting team. - -If the bug you are reporting has security implications, which make it -inappropriate to send to a publicly archived mailing list, then please -send it to perl5-security-report@perl.org. This points to a closed -subscription unarchived mailing list, which includes all the core -committers, who will be able to help assess the impact of issues, -figure out a resolution, and help co-ordinate the release of patches to -mitigate or fix the problem across all platforms on which Perl is -supported. Please only use this address for security issues in the -Perl core, not for modules independently distributed on CPAN. - -=head1 SEE ALSO - -The F<Changes> file for an explanation of how to view exhaustive -details on what changed. - -The F<INSTALL> file for how to build Perl. - -The F<README> file for general stuff. - -The F<Artistic> and F<Copying> files for copyright information. - -=cut diff --git a/pod/perl5157delta.pod b/pod/perl5157delta.pod deleted file mode 100644 index aa6f3e7cb6..0000000000 --- a/pod/perl5157delta.pod +++ /dev/null @@ -1,890 +0,0 @@ -=encoding utf8 - -=head1 NAME - -perl5157delta - what is new for perl v5.15.7 - -=head1 DESCRIPTION - -This document describes differences between the 5.15.6 release and -the 5.15.7 release. - -If you are upgrading from an earlier release such as 5.15.5, first read -L<perl5156delta>, which describes differences between 5.15.5 and -5.15.6. - -=head1 Core Enhancements - -=head2 C<use charnames> no longer needed for C<\N{I<name>}> - -The C<charnames> module is now automatically loaded when needed as if -the C<:full> and C<:short> options had been specified. See -L<charnames>. - -=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<qr/\p{foo}abc\p{foo}/> -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. - -=head1 Deprecations - -=head2 Deprecated Modules - -=over - -=item L<Version::Requirements> - -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 - -=head1 Performance Enhancements - -=over 4 - -=item * - -Version declarations with the C<use> keyword (e.g., C<use 5.012>) are now -faster, as they enable features without loading F<feature.pm>. - -=item * - -C<local $_> is faster now, as it no longer iterates through magic that it -is not going to copy anyway. - -=back - -=head1 Modules and Pragmata - -=head2 Updated Modules and Pragmata - -=over 4 - -=item * - -L<B::Deparse> has been upgraded from version 1.10 to version 1.11. - -It now deparses C<open('random string')> correctly. It used to omit the -quotation marks, which did not work if the string were not a valid -identifier [perl #91416]. - -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. - -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. - -B::Deparse no longer hangs when deparsing a program with stash -circularities, such as C<BEGIN { *Acme::Acme:: = *Acme:: }> [perl #91384]. - -C</$s[1]/> used to be deparsed as C<$s[1]> if @s were a lexical variable -[perl #81424]. Similarly, C</$#s/> would be deparsed as C<$#s> for both -lexical and package variables. These has been fixed. - -The C</applaud> regular expression flags are no longer omitted. - -Feature hints are now deparsed with C<use feature> rather than C<%^H> -assignments. - -A regression in 1.10 that caused C<ambient_pragmas> to disable strict mode -in obscure cases has been fixed. - -Strict mode is now fully deparsed, including subs and vars [perl #24027]. - -The global variables C<$(>, C<$|> and C<$)> are now deparsed with braces -(i.e., C<${(}>) in regular expressions [perl #86060]. - -C<continue> blocks after C<for> loops are now deparsed correctly, as they -were back in 0.67 (included with Perl 5.8.5) [perl #108224] - -=item * - -L<CGI> has been upgraded from version 3.58 to version 3.59. - -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. - -=item * - -L<CPAN::Meta> has been upgraded from version 2.112621 to version 2.113640. - -Version::Requirements has now been merged as CPAN::Meta::Requirements. - -=item * - -L<CPANPLUS> has been upgraded from version 0.9113 to version 0.9116. - -=item * - -L<Data::Dumper> has been upgraded from version 2.135_01 to version -2.135_03. - -It can now dump vstrings [perl #101162]. - -The nameless typeglob (C<*{""}>) is now dumped properly. - -=item * - -L<diagnostics> has been upgraded from version 1.26 to version 1.27. - -See the entry for splain in the L</Utility Changes> section, for the -changes. The diagnostics module and the splain utility are actually one -and the same. - -=item * - -L<ExtUtils::Packlist> has been upgraded from version 1.45 to version 1.46. - -It no longer produces "used once" warnings when the C<read> and C<write> -methods are called while the main program is still compiling (e.g., from -within a BEGIN block) [perl #107410] [rt.cpan.org #50315]. - -=item * - -L<ExtUtils::ParseXS> has been upgraded from version 3.08 to version 3.12. - -=item * - -L<Locale::Maketext> has been upgraded from version 1.21 to version 1.22. - -=item * - -L<Module::CoreList> has been upgraded from version 2.59 to version 2.60. - -=item * - -L<Module::Pluggable> has been upgraded from version 3.9 to version 4.0. - -=item * - -L<overload> has been upgraded from version 1.16 to version 1.17. - -C<overload::Overloaded> no longer calls C<can> on the class, but uses -another means to determine whether the object has overloading. It was -never correct for it to call C<can>, as overloading does not respect -AUTOLOAD. So classes that autoload methods and implement C<can> no longer -have to account for overloading [perl #40333]. - -A warning is now produced for invalid arguments. See L</New Diagnostics>. - -=item * - -L<perlfaq> has been upgraded from version 5.0150036 to version 5.0150038. - -=item * - -L<PerlIO::scalar> has been upgraded from version 0.12 to version 0.13. - -(This is the module that implements C<< open $fh, '>', \$scalar >>.) - -It no longer assumes during C<seek> that $scalar is a string internally. -If it didn't crash, it was close to doing so [perl #92706]. Also, the -internal print routine no longer assumes that the position set by C<seek> -is valid, but extends the string to that position, filling the intervening -bytes (between the old length and the seek position) with nulls -[perl #78980]. - -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. - -Printing to an in-memory handle no longer crashes if the $scalar happens to -hold a number internally, but no string buffer. - -Printing to an in-memory handle no longer creates scalars that confuse the regular expression engine [perl #108398]. - -=item * - -L<Pod::Html> has been upgraded from version 1.12 to 1.13 - -=item * - -L<POSIX> has been upgraded from version 1.27 to version 1.29. - -C<sigsuspend> and C<pause> 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<after> it has been triggered. Delayed, or -"safe", signals were preventing that from happening, possibly resulting in -race conditions [perl #107216]. -C<POSIX::sleep> is now a direct call into the underlying OS C<sleep> -function, instead of being a Perl wrapper on C<CORE::sleep>. C<POSIX::dup2> -now returns the correct value on Win32 (I<i.e.> the file descriptor). -C<POSIX::SigSet> C<sigsuspend> and C<sigpending> and C<POSIX::pause> now -dispatch safe signals immediately before returning to their caller. - -=item * - -L<Pod::Perldoc> has been upgraded from version 3.15_01 to version 3.15_15. - -=item * - -L<Term::UI> has been upgraded from version 0.26 to version 0.30. - -=item * - -L<Tie::File> has been upgraded from version 0.96 to version 0.98. - -=item * - -L<Unicode::UCD> has been upgraded from version 0.37 to version 0.38. -This changes the output of C<prop_invmap()> 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<Unicode::UCD/prop_invmap()>. - -=item * - -L<Version::Requirements> has been upgraded from version 0.101020 to version 0.101021. - -Version::Requirements is now DEPRECATED, use CPAN::Meta::Requirements, -which is a drop-in replacement. - -=back - -=head1 Documentation - -=head2 Changes to Existing Documentation - -=head3 L<perlfunc> - -=over 4 - -=item * - -C<dbmopen> 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<split> has been rewritten. It is now far clearer than -before. - -=back - -=head3 L<perlop> and L<perlsyn> - -=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. - -=back - -=head1 Diagnostics - -The following additions or changes have been made to diagnostic output, -including warnings and fatal error messages. For the complete list of -diagnostic messages, see L<perldiag>. - -=head2 New Diagnostics - -=head3 New Errors - -=over 4 - -=item * - -L<Cannot set tied @DB::args|perldiag/"Cannot set tied @DB::args"> - -This error occurs when C<caller> tries to set C<@DB::args> but finds it -tied. Before this error was added, it used to crash instead. - -=item * - -L<Cannot tie unreifiable array|perldiag/"Cannot tie unreifiable array"> - -This error is part of a safety check that the C<tie> operator does before -tying a special array like C<@_>. You should never see this message. - -=back - -=head3 New Warnings - -=over 4 - -=item * - -L<defined(@array) is deprecated|perldiag/"defined(@array) is deprecated"> - -The long-deprecated C<defined(@array)> now also warns for package variables. -Previously it only issued a warning for lexical variables. - -=item * - -L<Useless use of \E|perldiag/"Useless use of \E"> - -C<\E> does nothing unless preceded by C<\Q>, C<\L> or C<\U>. - -=item * - -L<overload arg '%s' is invalid|perldiag/"overload arg '%s' is invalid"> - -This warning, in the "overload" category, is produced when the overload -pragma is given an argument it doesn't recognize, presumably a mistyped -operator. - -=back - -=head2 Removals - -=over 4 - -=item * - -"sort is now a reserved word" - -This error used to occur when C<sort> was called without arguments, followed by C<;> or C<)>. (E.g., C<sort;> would die, but C<{sort}> was -OK.) This error message was added in Perl 3 to catch code like -C<close(sort)> which would no longer work. More than two decades later, -this message is no longer appropriate. Now C<sort> 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 - -=head3 L<splain> - -=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<perldiag>. splain has been taught to find the separate -entries in these cases, instead of simply failing to find the message. - -=back - -=head1 Configuration and Compilation - -=over 4 - -=item * - -The Pod files for the perl FAQ, L<perlxs>, L<perlxstut> and L<perldoc> -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. - -=back - -=head1 Testing - -=over 4 - -=item * - -F<t/porting/utils.t> 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<installperl> and F<installman>, needed by -C<make install>, are tested here. - -=back - -=head1 Internal Changes - -=over 4 - -=item * - -There are now feature bundle hints in C<PL_hints> (C<$^H>) that version -declarations use, to avoid having to load F<feature.pm>. One setting of -the hint bits indicates a "custom" feature bundle, which means that the -entries in C<%^H> still apply. F<feature.pm> uses that. - -The C<HINT_FEATURE_MASK> macro is defined in F<perl.h> along with other -hints. Other macros for setting and testing features and bundles are in -the new F<feature.h>. C<FEATURE_IS_ENABLED> (which has moved to -F<feature.h>) is no longer used throughout the codebase, but more specific -macros, e.g., C<FEATURE_SAY_IS_ENABLED>, that are defined in F<feature.h>. - -=item * - -F<lib/feature.pm> is now a generated file, created by the new -F<regen/feature.pl> script, which also generates F<feature.h>. - -=item * - -Tied arrays are now always C<AvREAL>. If C<@_> or C<DB::args> is tied, it -is reified first, to make sure this is always the case. - -=back - -=head1 Selected Bug Fixes - -=over 4 - -=item * "b . COND" in the debugger has been fixed - -Breaking on the current line with C<b . COND> 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<B::Deparse> 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<newHVhv> and tied hashes - -The C<newHVhv> 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<open(foo::bar)> - -When one writes C<open foo || die>, 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<select> and package aliasing - -After package aliasing (C<*foo:: = *bar::>), C<select> 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<undef> even when a filehandle -was selected. Now it returns a typeglob reference in such cases. - -=item * C<PerlIO::get_layers> and tied variables - -C<PerlIO::get_layers> no longer ignores FETCH on tied variables as it used -to most of the time [perl #97956]. - -=item * C<PerlIO::get_layers> and numbers - -C<PerlIO::get_layers> 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<are> 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<AUTOLOAD> 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<caller> and tied C<@DB::args> - -C<caller> 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<system> and SIGCHLD - -C<system> now temporarily blocks the SIGCHLD signal handler, to prevent the -signal handler from stealing the exit status [perl #105700]. - -=item * Deleting methods via C<delete> - -Deletion of methods via C<delete $Class::{method}> 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<printf> or C<sprintf> now actually -assigns the number of characters, instead of the number of bytes. - -It also works now with special lvalue functions like C<substr> and with -nonexistent hash and array elements [perl #3471, #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<local $_> - -In Perl 5.14, C<local $_> 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<sort> 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<utf8::decode> and read-only scalars - -C<utf8::decode> now refuses to modify read-only scalars [perl #91850]. - -=item * C<dbmopen> with undefined mode - -C<dbmopen> now only warns once, rather than three times, if the mode -argument is C<undef> [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<grep> or C<map> - -Freeing $_ inside a C<grep> or C<map> 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<undef>, but it was doing so for tied variables. This has been fixed -[perl #44895]. - -=item * Tying and autovivification - -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]. - -=item * C<@&> and C<$&> - -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]. - -=item * Stacked filetests - -C<-T> and C<-B> now work when stacked up with other filetest operators -[perl #77388]. - -=item * Filetests and stat buffers - -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. - -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): - -=over - -=item * - -C<-T I<HANDLE>>, even though it does a C<stat>, was not resetting the last -stat type, so an C<lstat _> following it would merrily return the wrong -results. Also, it was not setting the success status. - -=item * - -Freeing the handle last used by C<stat> or a filetest could result in -S<C<-T _>> using an unrelated handle. - -=item * - -C<stat> with an IO reference (as returned by C<*STDIO{IO}>, for instance) -would not reset the stat type. - -=item * - -C<stat> with an IO reference was not recording the filehandle for -S<C<-T _>> to use. - -=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. - -=item * - -Fatal warnings would stop C<-T> from setting C<$!>. - -=item * - -When the last stat was on an unreadable file, C<-T _> is supposed to -return C<undef>, leaving the last stat buffer unchanged. But it was -setting the stat type, causing C<lstat _> to stop working. - -=item * - -C<-T I<FILENAME>> was not resetting the internal stat buffers for -unreadable files. - -=back - -These have all been fixed. - -=item * C<defined *{"!"}> - -An earlier 5.15.x release caused this construct to stop the C<%!> hash -from working. Likewise C<defined *{"+"}> and C<defined *{"-"}> caused -C<%+> and C<%->, respectively, to stop working. This has been fixed. - -=item * C<-T _> with no preceding C<stat> - -This used to produce a confusing "uninitialized" warning, even though there -is no visible uninitialized value to speak of. - -=item * C<stat I<HANDLE>> and fstat failures - -If the operating system's C<fstat> function failed, C<stat> would warn -about an unopened handle, even though that was not the case. This has been -fixed. - -=item * C<lstat I<IOREF>> - -C<lstat> is documented to fall back to C<stat> (with a warning) when given -a filehandle. When passed an IO reference, it was actually doing the -equivalent of S<C<stat _>> and ignoring the handle. - -=item * Crashes with warnings - -Two warning messages that mention variable names started crashing in -5.15.5, but have been fixed [perl #106726, #107656]. - -=item * Bitwise assignment operators and copy-on-write - -In 5.14.0, the bitwise assignment operators C<|=>, C<^=> and C<&=> started -leaving the left-hand side undefined if it happened to be a copy-on-write -string. This has been fixed [perl #108480]. - -=item * Three problematic Unicode characters now work better in regex pattern matching under C</i> - -In the past, three Unicode characters: -LATIN SMALL LETTER SHARP S, -GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS, -and -GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS, -along with the sequences that they fold to -(including "ss" in the case of LATIN SMALL LETTER SHARP S), -did not properly match under C</i>. 5.14.0 fixed some of these cases, -but introduced others, including a panic when one of the characters or -sequences was used in the C<(?(DEFINE)> regular expression predicate. -The known bugs that were introduced in 5.14 have now been fixed; as well -as some other edge cases that have never worked until now. All these -involve using the characters and sequences outside bracketed character -classes under C</i>. This closes [perl #98546]. - -There remain known problems when using certain characters with -multi-character folds inside bracketed character classes, including such -constructs as C<qr/[\N{LATIN SMALL LETTER SHARP}a-z]/i>. These -remaining bugs are addressed in [perl #89774]. - -=back - -=head1 Acknowledgements - -Perl 5.15.7 represents approximately 4 weeks of development since Perl 5.15.6 -and contains approximately 51,000 lines of changes across 480 files from 30 -authors. - -Perl continues to flourish into its third decade thanks to a vibrant community -of users and developers. The following people are known to have contributed the -improvements that became Perl 5.15.7: - -Alberto Simões, Bo Lindbergh, Brian Fraser, Chris 'BinGOs' Williams, Craig A. -Berry, Dave Rolsky, David Mitchell, Eric Brine, Father Chrysostomos, Florian -Ragwitz, H.Merijn Brand, Hojung Youn, James E Keenan, Joel Berger, Joshua ben -Jore, Karl Williamson, Leon Timmermans, Matthew Horsfall, Michael Witten, -Nicholas Clark, Reini Urban, Ricardo Signes, Shlomi Fish, Steffen Müller, -Steffen Schwigon, Todd Rinaldo, Tom Christiansen, Tom Hukins, Tony Cook, Ævar -Arnfjörð Bjarmason. - -The list above is almost certainly incomplete as it is automatically generated -from version control history. In particular, it does not include the names of -the (very much appreciated) contributors who reported issues to the Perl bug -tracker. - -Many of the changes included in this version originated in the CPAN modules -included in Perl's core. We're grateful to the entire CPAN community for -helping Perl to flourish. - -For a more complete list of all of Perl's historical contributors, please see -the F<AUTHORS> file in the Perl source distribution. - -=head1 Reporting Bugs - -If you find what you think is a bug, you might check the articles -recently posted to the comp.lang.perl.misc newsgroup and the perl -bug database at http://rt.perl.org/perlbug/ . There may also be -information at http://www.perl.org/ , the Perl Home Page. - -If you believe you have an unreported bug, please run the L<perlbug> -program included with your release. Be sure to trim your bug down -to a tiny but sufficient test case. Your bug report, along with the -output of C<perl -V>, will be sent off to perlbug@perl.org to be -analysed by the Perl porting team. - -If the bug you are reporting has security implications, which make it -inappropriate to send to a publicly archived mailing list, then please send -it to perl5-security-report@perl.org. This points to a closed subscription -unarchived mailing list, which includes -all the core committers, who will be able -to help assess the impact of issues, figure out a resolution, and help -co-ordinate the release of patches to mitigate or fix the problem across all -platforms on which Perl is supported. Please only use this address for -security issues in the Perl core, not for modules independently -distributed on CPAN. - -=head1 SEE ALSO - -The F<Changes> file for an explanation of how to view exhaustive details -on what changed. - -The F<INSTALL> file for how to build Perl. - -The F<README> file for general stuff. - -The F<Artistic> and F<Copying> files for copyright information. - -=cut diff --git a/pod/perl5158delta.pod b/pod/perl5158delta.pod deleted file mode 100644 index c82d1694e4..0000000000 --- a/pod/perl5158delta.pod +++ /dev/null @@ -1,708 +0,0 @@ -=encoding utf8 - -=for comment -This has been completed up to 0aae26c14, except for: -d9298c1 rurban mymalloc isn't thread safe - -=head1 NAME - -perl5158delta - what is new for perl v5.15.8 - -=head1 DESCRIPTION - -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.6, first read -L<perl5157delta>, which describes differences between 5.15.6 and -5.15.7. - -=head1 Notice - -This space intentionally left blank. - -=head1 Core Enhancements - -=head2 Improved ability to mix locales and Unicode, including UTF-8 locales - -An optional parameter has been added to C<use locale> - - use locale ':not_characters'; - -which tells Perl to use all but the C<LC_CTYPE> and C<LC_COLLATE> -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<open> 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<perllocale>. - -=head2 New function C<fc> 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</i> matching. Now it is available -explicitly through the new C<fc> function call (enabled by -S<C<"use feature 'fc'">>, or C<use v5.16>, or explicitly callable via -C<CORE::fc>) or through the new C<\F> sequence in double-quotish -strings. - -Full details are in L<perlfunc/fc>. - -=head2 C<_> in subroutine prototypes - -The C<_> character in subroutine prototypes is now allowed before C<@> or -C<%>. - -=head2 Supports (I<almost>) 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<perluniprops>. - -The return value of C<charnames::viacode()> 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<charnames::viacode()> 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<http://www.unicode.org/versions/Unicode6.1.0/>. - -=head2 Added C<is_utf8_char_buf()> - -This function is designed to replace the deprecated L</is_utf8_char()> -function. It includes an extra parameter to make sure it doesn't read -past the end of the input buffer. - -=head1 Security - -=head2 Use C<is_utf8_char_buf()> and not C<is_utf8_char()> - -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<is_utf8_char_buf()|/Added is_utf8_char_buf()>. - -=head1 Incompatible Changes - -[ List each incompatible change as a =head2 entry ] - -=head2 Special blocks called in void context - -Special blocks (C<BEGIN>, C<CHECK>, C<INIT>, C<UNITCHECK>, C<END>) are now -called in void context. This avoids wasteful copying of the result of the -last statement [perl #108794]. - -=head2 The C<overloading> pragma and regexp objects - -With C<no overloading>, regular expression objects returned by C<qr//> 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<perlxstypemap>. - -=head2 Unicode 6.1 has incompatibilities with Unicode 6.0 - -These are detailed in L</Supports (almost) Unicode 6.1> above. - -=head2 Changed returns for some properties in C<Unicode::UCD::prop_invmap()> - -The return values for C<prop_invmap> 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<Unicode::UCD/prop_invmap()> for details on the new interface. - -=head2 C<$$> and C<getppid()> no longer emulate POSIX semantics under LinuxThreads - -The POSIX emulation of C<$$> and C<getppid()> 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<getppid()> 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<getppid()> 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<PL_e?[ug]id>. Having to deal with -this complexity wasn't worth it given how cheap the C<gete?[ug]id()> -system call is. - -This change will break a handful of CPAN modules that use the XS-level -C<PL_uid>, C<PL_gid>, C<PL_euid> or C<PL_egid> variables. - -The fix for those breakages is to use C<PerlProc_gete?[ug]id()> to -retrieve them (e.g. C<PerlProc_getuid()>), and not to assign to -C<PL_e?[ug]id> 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<quotemeta> 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<perlfunc/quotemeta>. - -=head1 Deprecations - -=head2 C<is_utf8_char()> - -This function is deprecated because it could read beyond the end of the -input string. Use the new L<is_utf8_char_buf()|/Added is_utf8_char_buf()> -instead. - -=head1 Modules and Pragmata - -=head2 New Modules and Pragmata - -=over 4 - -=item * - -C<PerlIO::mmap> 0.010 has been added to the Perl core. - -The C<mmap> PerlIO layer is no longer implemented by perl itself, but has -been moved out into the new L<PerlIO::mmap> module. - -=back - -=head2 Updated Modules and Pragmata - -=over 4 - -=item * - -L<arybase> has been upgraded from version 0.03 to version 0.04. - -List slices no longer modify items on the stack belonging to outer lists -[perl #109570]. - -=item * - -L<B> has been upgraded from version 1.33 to version 1.34. - -C<B::COP> now has a C<stashflags> method, corresponding to a new internal -field added in 5.15.4 [perl #108860]. - -=item * - -C<B::Deparse> has been upgraded from version 1.11 to 1.12. - -=item * - -L<Carp> has been upgraded from version 1.24 to version 1.25. - -It now puts a dot after the file and line number, just like errors from -C<die> [perl #106538]. - -=item * - -C<Compress::Raw::Bzip2> has been upgraded from version 2.045 to 2.048. - -=item * - -C<Compress::Raw::Zlib> has been upgraded from version 2.045 to 2.048. - -=item * - -L<Compress::Zlib> has been upgraded from version 2.046 to version 2.048. - -=item * - -C<CPAN::Meta> has been upgraded from version 2.113640 to 2.120351. - -Work around a memory leak bug involving version objects in boolean context. - -=item * - -C<CPAN::Meta::YAML> has been upgraded from version 0.005 to 0.007. - -=item * - -C<CPANPLUS> has been upgraded from version 0.9116 to 0.9118. - -=item * - -C<CPANPLUS::Dist::Build> has been upgraded from version 0.60 to 0.62. - -=item * - -C<Data::Dumper> has been upgraded from version 2.135_04 to 2.135_05. - -=item * - -C<DB_File> has been upgraded from version 1.824 to 1.826. - -=item * - -C<diagnostics> has been upgraded from version 1.27 to 1.28. - -When searching for F<perldiag.pod>, it no longer uses paths that were only -relevant on Perl 5.004 and earlier. - -=item * - -C<English> has been upgraded from version 1.04 to 1.05. - -=item * - -C<ExtUtils::Install> has been upgraded from version 1.57 to 1.58. - -=item * - -C<ExtUtils::ParseXS> has been upgraded from version 3.12 to 3.16. - -The new version comes with important tools for sharing typemaps between -different CPAN distributions. - -=item * - -C<File::Copy> has been upgraded from version 2.21 to 2.23. - -It no longer emits warnings when copying files with newlines in their names -[perl #109104]. - -=item * - -C<File::Glob> has been upgraded from version 1.16 to 1.17. - -=item * - -C<Filter::Util::Call> has been upgraded from version 1.39 to 1.40. - -=item * - -C<IPC::Cmd> has been upgraded from version 0.72 to 0.76. - -=item * - -C<Math::Complex> has been upgraded from version 1.58 to 1.59. - -This avoids a new core warning. - -=item * - -C<Module::Metadata> has been upgraded from version 1.000007 to 1.000009. - -Adds C<provides> method to generate a CPAN META provides data structure -correctly; use of C<package_versions_from_directory> is discouraged. - -=item * - -C<Opcode> has been upgraded from version 1.22 to 1.23. - -=item * - -C<overload> has been upgraded from version 1.17 to 1.18. - -=item * - -C<Parse::CPAN::Meta> has been upgraded from version 1.4401 to 1.4402. - -=item * - -C<perlfaq> has been upgraded from version 5.0150038 to 5.0150039. - -=item * - -C<Pod::Functions> has been upgraded from version 1.04 to 1.05. - -F<Functions.pm> is now generated at perl build time from annotations in -F<perlfunc.pod>. This will ensure that L<Pod::Functions> and L<perlfunc> -remain in synchronisation. - -=item * - -C<Pod::Html> has been upgraded from version 1.13 to 1.14. - -=item * - -C<Pod::Parser> has been upgraded from version 1.37 to 1.51. - -=item * - -C<POSIX> has been upgraded from version 1.28 to 1.30. - -=item * - -C<re> has been upgraded from version 0.18 to 0.19. - -=item * - -C<Safe> has been upgraded from version 2.30 to 2.31. - -=item * - -C<Socket> has been upgraded from version 1.97 to 1.98. - -=item * - -C<Term::Cap> has been upgraded from version 1.12 to 1.13. - -=item * - -C<Term::ReadLine> has been upgraded from version 1.07 to 1.08. - -Term::ReadLine now supports any event loop, including unpublished ones and -simple L<IO::Select> loops without the need to rewrite existing code for -any particular framework [perl #108470]. - -=item * - -C<Time::HiRes> has been upgraded from version 1.9724 to 1.9725. - -C<Time::HiRes::stat()> no longer corrupts the Perl stack. - -=item * - -C<Unicode::UCD> has been upgraded from version 0.39 to 0.41. - -The only change is to fix a formatting error in the Pod. - -=item * - -C<Version::Requirements> has been upgraded from version 0.101021 to 0.101022. - -=item * - -C<warnings> has been upgraded from version 1.12 to 1.13. - -=item * - -C<XS::Typemap> has been upgraded from version 0.07 to 0.08. - -=back - -=head1 Documentation - -=head2 New Documentation - -=head3 L<perlxstypemap> - -The new manual describes the XS typemapping mechanism in unprecedented -detail and combines new documentation with information extracted from -L<perlxs> and the previously unofficial list of all core typemaps. - -=head1 Testing - -=over 4 - -=item * - -F<t/porting/pending-author.t> has been added, to avoid the problem of -C<make test> passing 100%, but the subsequent git commit causing -F<t/porting/authors.t> to fail, because it uses a "new" e-mail address. - -This test is only run if one is building inside a git checkout, B<and> one -has made local changes. Otherwise it's skipped. - -=item * - -F<t/porting/perlfunc.t> has been added, to test that changes to -F<pod/perlfunc.pod> do not inadvertently break the build of L<Pod::Functions>. - -=item * - -The test suite for typemaps has been extended to cover a larger fraction of -the core typemaps. - -=back - -=head1 Platform Support - -=head2 Platform-Specific Notes - -=over 4 - -=item Cygwin - -Since version 1.7, Cygwin supports native UTF-8 paths. If Perl is built -under that environment, directory and filenames will be UTF-8 encoded. - -Cygwin does not initialize all original Win32 environment variables. See -F<README.cygwin> for a discussion of C<Cygwin::sync_winenv()> and -further links. - -=item VMS - -The build on VMS now allows names of the resulting -symbols in C code for Perl longer than 31 characters. -Symbols like C<Perl__it_was_the_best_of_times_it_was_the_worst_of_times> -can now be created freely without causing the VMS linker to seize up. - -=back - -=head1 Selected Bug Fixes - -=over 4 - -=item * - -C<~~> now correctly handles the precedence of Any~~Object, and is not tricked -by an overloaded object on the left-hand side. - -=item * - -C<stat _> no longer warns about unopened filehandles [perl #71002]. - -=item * - -C<stat> on an unopened filehandle now warns consistently, instead of -skipping the warning at times. - -=item * - -A change in an earlier 5.15 release caused warning hints to propagate into -C<do $file>. This has been fixed [rt.cpan.org #72767]. - -=item * - -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<Hash::Util>. This could result in double frees, crashes or erratic -behaviour. - -=item * - -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 * - -C<-t> now works when stacked with other filetest operators [perl #77388]. - -=item * - -Stacked filetest operators now only call FETCH once on a tied argument. - -=item * - -C</.*/g> would sometimes refuse to match at the end of a string that ends -with "\n". This has been fixed [perl #109206]. - -=item * - -C<m/[[:ascii:]]/i> and C</\p{ASCII}/i> 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 * - -Method calls whose arguments were all surrounded with C<my()> or C<our()> -(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<did> affect earlier stable releases. It is just the last -sentence that does not apply to 5.14. - -=item * - -The C<SvPVutf8> C function no longer tries to modify its argument, -resulting in errors [perl #108994]. - -=item * - -C<SvPVutf8> now works properly with magical variables. - -=item * - -C<SvPVbyte> now works properly non-PVs. - -=item * - -C</[[:ascii:]]/> and C</[[:blank:]]/> now use locale rules under -C<use locale> when the platform supports that. Previously, they used -the platform's native character set. - -=item * - -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. - -=item * - -C<quotemeta> now quotes consistently the same non-ASCII characters under -C<use feature 'unicode_strings'>, regardless of whether the string is -encoded in UTF-8 or not, hence fixing the last vestiges (we hope) of the -infamous L<perlunicode/The "Unicode Bug">. [perl #77654]. - -Which of these code points is quoted has changed, based on Unicode's -recommendations. See L<perlfunc/quotemeta> for details. - -=back - -=head1 Known Problems - -This is a list of some significant unfixed bugs, which are regressions -from either 5.14.0 or 5.15.7. - -=over 4 - -=item * C<eval { 'fork()' }> is broken on Windows [perl #109718] - -This is a known test failure to be fixed before 5.16.0. - -=back - -=head1 Acknowledgements - -Perl 5.15.8 represents approximately 4 weeks of development since Perl 5.15.7 -and contains approximately 61,000 lines of changes across 480 files from 36 -authors. - -Perl continues to flourish into its third decade thanks to a vibrant community -of users and developers. The following people are known to have contributed the -improvements that became Perl 5.15.8: - -Abhijit Menon-Sen, Alan Haggai Alavi, Alexandr Ciornii, Andy Dougherty, Brian -Fraser, Chris 'BinGOs' Williams, Craig A. Berry, Darin McBride, Dave Rolsky, -David Golden, David Leadbeater, David Mitchell, Dominic Hargreaves, Eric Brine, -Father Chrysostomos, Florian Ragwitz, H.Merijn Brand, Juerd Waalboer, Karl -Williamson, Leon Timmermans, Marc Green, Max Maischein, Nicholas Clark, Paul -Evans, Rafael Garcia-Suarez, Rainer Tammer, Reini Urban, Ricardo Signes, Robin -Barker, Shlomi Fish, Steffen Müller, Todd Rinaldo, Tony Cook, Yves Orton, -Zefram, Ævar Arnfjörð Bjarmason. - -The list above is almost certainly incomplete as it is automatically generated -from version control history. In particular, it does not include the names of -the (very much appreciated) contributors who reported issues to the Perl bug -tracker. - -Many of the changes included in this version originated in the CPAN modules -included in Perl's core. We're grateful to the entire CPAN community for -helping Perl to flourish. - -For a more complete list of all of Perl's historical contributors, please see -the F<AUTHORS> file in the Perl source distribution. - -=head1 Reporting Bugs - -If you find what you think is a bug, you might check the articles -recently posted to the comp.lang.perl.misc newsgroup and the perl -bug database at http://rt.perl.org/perlbug/ . There may also be -information at http://www.perl.org/ , the Perl Home Page. - -If you believe you have an unreported bug, please run the L<perlbug> -program included with your release. Be sure to trim your bug down -to a tiny but sufficient test case. Your bug report, along with the -output of C<perl -V>, will be sent off to perlbug@perl.org to be -analysed by the Perl porting team. - -If the bug you are reporting has security implications, which make it -inappropriate to send to a publicly archived mailing list, then please send -it to perl5-security-report@perl.org. This points to a closed subscription -unarchived mailing list, which includes -all the core committers, who will be able -to help assess the impact of issues, figure out a resolution, and help -co-ordinate the release of patches to mitigate or fix the problem across all -platforms on which Perl is supported. Please only use this address for -security issues in the Perl core, not for modules independently -distributed on CPAN. - -=head1 SEE ALSO - -The F<Changes> file for an explanation of how to view exhaustive details -on what changed. - -The F<INSTALL> file for how to build Perl. - -The F<README> file for general stuff. - -The F<Artistic> and F<Copying> files for copyright information. - -=cut diff --git a/pod/perl5159delta.pod b/pod/perl5159delta.pod deleted file mode 100644 index 25e0c4f1af..0000000000 --- a/pod/perl5159delta.pod +++ /dev/null @@ -1,402 +0,0 @@ -=encoding utf8 - -=head1 NAME - -perl5159delta - what is new for perl v5.15.9 - -=head1 DESCRIPTION - -This document describes differences between the 5.15.8 release and -the 5.15.9 release. - -If you are upgrading from an earlier release such as 5.15.7, first read -L<perl5158delta>, which describes differences between 5.15.7 and -5.15.8. - -=head1 Notice - -This space intentionally left blank. - -=head1 Core Enhancements - -=head2 C<< no feature; >> now means reset to default - -C<< no feature >> now resets to the default feature set. To disable all -features (which is likely to be a pretty special-purpose request, since -it presumably won't match any named set of semantics) you can now -write C<< no feature ':all' >>. - -=head1 Security - -=head2 Malformed UTF-8 input could cause attempts to read beyond the end of the buffer - -Two new XS-accessible functions, C<utf8_to_uvchr_buf()> and -C<utf8_to_uvuni_buf()> are now available to prevent this, and the Perl -core has been converted to use them. -See L</Internal Changes>. - -=head1 Incompatible Changes - -=head2 C<< no feature; >> - -C<no feature;> now means reset to default. - -=head1 Deprecations - -=head2 Literal C<< "{" >> characters in regular expressions. - -It has been documented that the current plans include requiring a -literal C<< "{" >> to be escaped: 5.18 will emit deprecation warnings, -and it will be required in 5.20. - -=head2 XS functions C<utf8_to_uvchr()> and C<utf8_to_uvuni()> - -Use C<utf8_to_uvchr_buf()> and C<utf8_to_uvuni_buf()> instead. -See L</Internal Changes>. - -=head1 Performance Enhancements - -=over 4 - -=item * - -Fix a slowdown in freeing nested hashes. This may speedup the exit of -certain programs. - -=back - -=head1 Modules and Pragmata - -=head2 Updated Modules and Pragmata - -=over 4 - -=item * - -C<attributes> has been upgraded from version 0.17 to 0.18. - -=item * - -C<charnames> has been upgraded from version 1.29 to 1.30. - -=item * - -C<feature> has been upgraded from version 1.26 to 1.27. - -C<no feature;> now means reset to default. The code has been refactored -to reduce duplication. - -=item * - -C<B::Deparse> has been upgraded from version 1.12 to 1.13. - -=item * - -C<B::Lint> has been upgraded from version 1.13 to 1.14. - -=item * - -C<CPAN::Meta> has been upgraded from version 2.120351 to 2.120630. - -=item * - -C<CPANPLUS> has been upgraded from version 0.9118 to 0.9121. - -=item * - -C<Data::Dumper> has been upgraded from version 2.135_05 to 2.135_06. - -=item * - -C<Digest::SHA> has been upgraded from version 5.70 to 5.71. - -=item * - -C<ExtUtils::CBuilder> has been upgraded from version 0.280205 to 0.280206. - -=item * - -C<HTTP::Tiny> has been upgraded from version 0.016 to 0.017. - -=item * - -C<Module::CoreList> has been upgraded from version 2.60 to 2.65. - -=item * - -C<Pod::Html> has been upgraded from version 1.14 to 1.1501. - -=item * - -C<Pod::Perldoc> has been upgraded from version 3.15_15 to 3.17. - -=item * - -C<Pod::Simple> has been upgraded from version 3.19 to 3.20. - -=item * - -C<Socket> has been upgraded from version 1.98 to 2.000. - -=item * - -C<Term::ReadLine> has been upgraded from version 1.08 to 1.09. - -C<< Term::ReadLine >> now optionally integrates with event loops -other than C<< Tk >>. - -=item * - -C<Unicode::Collate> has been upgraded from version 0.87 to 0.89. - -=item * - -C<Unicode::Normalize> has been upgraded from version 1.13 to 1.14. - -=item * - -C<Unicode::UCD> has been upgraded from version 0.41 to 0.42. - -=item * - -C<XS::APItest> has been upgraded from version 0.36 to 0.37. - -=back - - -=head1 Documentation - -There has been no significant change in the documentation between -5.15.8 and 5.15.9. - -=head1 Diagnostics - -The following additions or changes have been made to diagnostic output, -including warnings and fatal error messages. For the complete list of -diagnostic messages, see L<perldiag>. - -=head2 New Diagnostics - -=head3 New Errors - -Compared to 5.15.8, 5.15.9 does not introduce new errors. - -=head3 New Warnings - -Compared to 5.15.8, 5.15.9 does not introduce new warnings, but see -L</Changes to Existing Diagnostics> - -=head2 Changes to Existing Diagnostics - -=over 4 - -=item * - -L<lvalue attribute %s already-defined subroutine|perldiag/"lvalue attribute %s already-defined subroutine">, which replaces -C<< lvalue attribute cannot be removed after the subroutine has been defined >>. - -=back - -=head1 Utility Changes - -No utilities changed between 5.15.8 and 5.15.9. - -=head1 Configuration and Compilation - -=over 4 - -=item * - -C<< perlfunc.html >> is now being generated again. [perl #107870] - -=back - -=head1 Testing - -=over 4 - -=item * - -F<< t/op/require_37033.t >> has been added, to test that C<require> -always closes the file handle that it opens. Previously, it had been -leaking the file handle if it happened to have file descriptor 0, which -would happen if C<require> was called (explicitly or implicitly) when -C<STDIN> had been closed. - -=back - -=head1 Platform Support - -There have been no changes to Perl's support of various platforms between -5.15.8 and 5.15.9. - -=head1 Internal Changes - -=over 4 - -=item * - -Two new functions C<utf8_to_uvchr_buf()> and C<utf8_to_uvuni_buf()> have -been added. These are the same as C<utf8_to_uvchr> and -C<utf8_to_uvuni> (which are now deprecated), but take an extra parameter -that is used to guard against reading beyond the end of the input -string. -See L<perlapi/utf8_to_uvchr_buf> and L<perlapi/utf8_to_uvuni_buf>. - -=item * - -The regular expression engine now does TRIE case insensitive matches -under Unicode. This may change the output of C<< use re 'debug'; >>, -and will speed up various things. - -=back - -=head1 Selected Bug Fixes - -=over 4 - -=item * - -I<Takri> now matches two more characters under the C<Script_Extensions> -property. This corrects a Unicode 6.1 omission. - -=item * - -C<< perlfunc.html >> is now being generated again. [perl #107870] - -=item * - -C<< $$ >> is no longer tainted. Since this value comes directly from -C<< getpid() >>, it is always safe. - -=item * - -Fix leaking a file handle. [perl #37033] - -=item * - -An off-by-one error caused C<< /[:upper:]/ >> and C<< /[:punct:]/ >> to -unexpectedly match characters with code points above 255. This has been -rectified. [perl 111400]. - -=item * - -C<< (?foo: ...) >> no longer loses passed in character set. - -=item * - -Allow attributes to set C<< :lvalue >> on a defined sub. [perl 107366]. - -=item * - -C<< die; >> with a non-reference, non-string value in $@ now properly -propagates that value [perl #111654]. - -=back - -=head1 Known Problems - -This is a list of some significant unfixed bugs, which need to be -resolved before 5.16.0 - -=over 4 - -=item F<< op/sigdispatch.t >> fails alarm test 14 and gets killed [perl #89718] - -E<32> - -=item Perl crash due to wrong delimiter in C<< PATH >> environment [perl #94846] - -It's possible to crash perl under Win32 if the wrong delimiter is used. - -=item Corrupt UTF8 [perl #79960, #100058] - -It is possible to read an invalid UTF8 character, but have it marked valid, -or to incorrectly read UTF8 characters if C<< $/ >> is set to read fixed -length records. - -=item UTF8 patches for 5.16 [perl #107008] - -Brian Fraser's work on UTF8 needs further integration. - -=item C<eval { 'fork()' }> is broken on Windows [perl #109718] - -This is a known test failure to be fixed before 5.16.0. - -=item Warnings from cpan/IO-Compress [perl #110736] - -Some tests in F<< cpan/IO-Compress/t/cz-03zlib-v1.t >> issues a -"isn't numeric" warning in blead, but not in maint. - -=item C<< Pod-Html >> test failures on Windows. - -A number of tests for C<< Pod::Html >> fail under Windows, due to an -incorrect assumption by the test scripts about capitalization of the -network drive. - -=back - -=head1 Acknowledgements - -Perl 5.15.9 represents approximately 4 weeks of development since Perl 5.15.8 -and contains approximately 79,000 lines of changes across 530 files from 23 -authors. - -Perl continues to flourish into its third decade thanks to a vibrant community -of users and developers. The following people are known to have contributed the -improvements that became Perl 5.15.9: - -Aaron Crane, Abigail, Chris 'BinGOs' Williams, Craig A. Berry, Dave Rolsky, -David Cantrell, David Golden, David Mitchell, Eric Brine, Father Chrysostomos, -Florian Ragwitz, James E Keenan, Jesse Vincent, Karl Williamson, Marc Green, -Max Maischein, Nicholas Clark, Pau Amma, Reini Urban, Ricardo Signes, Tony -Cook, Yves Orton, Zefram. - -The list above is almost certainly incomplete as it is automatically generated -from version control history. In particular, it does not include the names of -the (very much appreciated) contributors who reported issues to the Perl bug -tracker. - -Many of the changes included in this version originated in the CPAN modules -included in Perl's core. We're grateful to the entire CPAN community for -helping Perl to flourish. - -For a more complete list of all of Perl's historical contributors, please see -the F<AUTHORS> file in the Perl source distribution. - -=head1 Reporting Bugs - -If you find what you think is a bug, you might check the articles -recently posted to the comp.lang.perl.misc newsgroup and the perl -bug database at http://rt.perl.org/perlbug/ . There may also be -information at http://www.perl.org/ , the Perl Home Page. - -If you believe you have an unreported bug, please run the L<perlbug> -program included with your release. Be sure to trim your bug down -to a tiny but sufficient test case. Your bug report, along with the -output of C<perl -V>, will be sent off to perlbug@perl.org to be -analysed by the Perl porting team. - -If the bug you are reporting has security implications, which make it -inappropriate to send to a publicly archived mailing list, then please send -it to perl5-security-report@perl.org. This points to a closed subscription -unarchived mailing list, which includes -all the core committers, who will be able -to help assess the impact of issues, figure out a resolution, and help -co-ordinate the release of patches to mitigate or fix the problem across all -platforms on which Perl is supported. Please only use this address for -security issues in the Perl core, not for modules independently -distributed on CPAN. - -=head1 SEE ALSO - -The F<Changes> file for an explanation of how to view exhaustive details -on what changed. - -The F<INSTALL> file for how to build Perl. - -The F<README> file for general stuff. - -The F<Artistic> and F<Copying> files for copyright information. - -=cut diff --git a/pod/perldelta.pod b/pod/perldelta.pod index e3a9cbf1b2..9fef60caa2 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -2,84 +2,941 @@ =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.10 +perldelta - what is new for perl v5.16.0 =head1 DESCRIPTION -This document describes differences between the 5.15.9 release and -the 5.15.10 release. +This document describes differences between the 5.14.0 release and +the 5.16.0 release. -If you are upgrading from an earlier release such as 5.15.8, first read -L<perl5159delta>, which describes differences between 5.15.8 and -5.15.9. +If you are upgrading from an earlier release such as 5.12.0, first read +L<perl5140delta>, which describes differences between 5.12.0 and +5.14.0. =head1 Notice -XXX Any important notices here +As described in L<perlpolicy>, the release of Perl 5.16.0 marks the +official end of support for Perl 5.12. Users of Perl 5.12 or earlier +should consider upgrading to a more recent release of Perl. =head1 Core Enhancements -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</Performance Enhancements> section. +=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; + # only 5.16 features enabled here + use 5.014; + # only 5.14 features enabled here (not 5.16) + +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<< no feature >> now resets to the default feature set. To disable all +features (which is likely to be a pretty special-purpose request, since +it presumably won't match any named set of semantics) you can now +write C<< no feature ':all' >>. + +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<__SUB__> + +The new C<__SUB__> token, available under the C<current_sub> feature +(see L<feature>) or C<use v5.16>, returns a reference to the current +subroutine, making it easier to write recursive closures. + +=head2 New and Improved Built-ins + +=head3 More consistent C<eval> + +The C<eval> 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. + +The new C<unicode_eval> and C<evalbytes> features (enabled under C<use +5.16.0>) resolve this. The C<unicode_eval> feature causes C<eval +$string> to treat the string always as Unicode. The C<evalbytes> +features provides a function, itself called C<evalbytes>, which +evaluates its argument always as a string of bytes. + +These features also fix oddities with source filters leaking to outer +dynamic scopes. + +See L<feature> for more detail. + +=head3 C<substr> lvalue revamp + +=for comment Does this belong here, or under Incomptable Changes? + +When C<substr> 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<substr> 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<substr> itself, but only when the returned lvalue is +read or modified. + +These changes result in an incompatible change: + +If the original string changes length after the call to C<substr> 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. + +Since this change also allowed many bugs to be fixed (see +L</The C<substr> operator>), and since the behaviour +of negative offsets has never been specified, so the +change was deemed acceptable. + +=head3 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 Unicode Support + +=head3 Supports (I<almost>) 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<perluniprops>. + +The return value of C<charnames::viacode()> 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<charnames::viacode()> 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 longstanding +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<http://www.unicode.org/versions/Unicode6.1.0/>. + +=head3 C<use charnames> is no longer needed for C<\N{I<name>}> + +When C<\N{I<name>}> is encountered, the C<charnames> module is now +automatically loaded when needed as if the C<:full> and C<:short> +options had been specified. See L<charnames> for more information. + +=head3 C<\N{...}> can now have Unicode loose name matching + +This is described in the C<charnames> item in +L</Updated Modules and Pragmata> below. + +=head3 Unicode Symbol Names + +Perl now has proper support for Unicode in symbol names. It used to be +that C<*{$foo}> would ignore the internal UTF8 flag and use the bytes of +the underlying representation to look up the symbol. That meant that +C<*{"\x{100}"}> and C<*{"\xc4\x80"}> would return the same thing. All +these parts of Perl have been fixed to account for Unicode: + +=over + +=item * + +Method names (including those passed to C<use overload>) + +=item * + +Typeglob names (including names of variables, subroutines and filehandles) + +=item * + +Package names + +=item * + +C<goto> + +=item * + +Symbolic dereferencing + +=item * + +Second argument to C<bless()> and C<tie()> + +=item * + +Return value of C<ref()> + +=item * + +Subroutine prototypes + +=item * + +Attributes + +=item * + +Various warnings and error messages that mention variable names or values, +methods, etc. + +=back + +In addition, a parsing bug has been fixed that prevented C<*{é}> from +implicitly quoting the name, but instead interpreted it as C<*{+é}>, which +would cause a strict violation. + +C<*{"*a::b"}> automatically strips off the * if it is followed by an ASCII +letter. That has been extended to all Unicode identifier characters. + +One-character non-ASCII non-punctuation variables (like C<$é>) are now +subject to "Used only once" warnings. They used to be exempt, as they +was treated as punctuation variables. + +Also, single-character Unicode punctuation variables (like C<$‰>) are now +supported [perl #69032]. + +=head3 Improved ability to mix locales and Unicode, including UTF-8 locales + +An optional parameter has been added to C<use locale> + + use locale ':not_characters'; + +which tells Perl to use all but the C<LC_CTYPE> and C<LC_COLLATE> +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<open> 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<perllocale>. + +=head3 New function C<fc> 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</i> matching. Now it is available +explicitly through the new C<fc> function call (enabled by +S<C<"use feature 'fc'">>, or C<use v5.16>, or explicitly callable via +C<CORE::fc>) or through the new C<\F> sequence in double-quotish +strings. + +Full details are in L<perlfunc/fc>. + +=head3 The Unicode C<Script_Extensions> property is now supported. + +New in Unicode 6.0, this is an improved C<Script> property. Details +are in L<perlunicode/Scripts>. + +=head2 XS Changes + +=head3 Improved typemaps for Some Builtin Types + +Most XS authors will be aware that there is a longstanding bug in the +OUTPUT typemap for T_AVREF (C<AV*>), T_HVREF (C<HV*>), T_CVREF (C<CV*>), +and T_SVREF (C<SVREF> or C<\$foo>) that requires manually decrementing +the reference count of the return value instead of the typemap taking +care of this. For backwards-compatibility, this cannot be changed in the +default typemaps. But we now provide additional typemaps +C<T_AVREF_REFCOUNT_FIXED>, etc. that do not exhibit this bug. Using +them in your extension is as simple as having one line in your +C<TYPEMAP> section: + + HV* T_HVREF_REFCOUNT_FIXED + +=head3 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 now describes how to use it +safely. + +=head3 Added C<is_utf8_char_buf()> + +This function is designed to replace the deprecated L</is_utf8_char()> +function. It includes an extra parameter to make sure it doesn't read +past the end of the input buffer. + +=head3 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()>. + +=head3 New Pad API + +Many new functions have been added to the API for manipulating lexical +pads. See L<perlapi/Pad Data Structures> for more information. + +=head2 Changes to Special Variables + +=head3 C<$$> can be assigned to + +C<$$> was made read-only in Perl 5.8.0. But only sometimes: C<local $$> +would make it writable again. Some CPAN modules were using C<local $$> or +XS code to bypass the read-only check, so there is no reason to keep C<$$> +read-only. (This change also allowed a bug to be fixed while maintaining +backward compatibility.) + +=head3 C<$^X> converted to an absolute path on FreeBSD, OS X and Solaris + +C<$^X> is now converted to an absolute path on OS X, FreeBSD (without +needing F</proc> mounted) and Solaris 10 and 11. This augments the +previous approach of using F</proc> on Linux, FreeBSD and NetBSD +(in all cases, where mounted). + +This makes relocatable perl installations more useful on these platforms. +(See "Relocatable @INC" in F<INSTALL>) + +=head2 Debugger Changes + +=head3 Features inside the debugger + +The current Perl's L<feature> bundle is now enabled for commands entered +in the interactive debugger. + +=head3 New option for the debugger's B<t> command + +The B<t> command in the debugger, which toggles tracing mode, now +accepts a numeric argument that determines how many levels of subroutine +calls to trace. + +=head3 C<enable> and C<disable> + +The debugger now has C<disable> and C<enable> commands for disabling +existing breakpoints and re-enabling them. See L<perldebug>. + +=head3 Breakpoints with file names + +The debugger's "b" command for setting breakpoints now allows a line +number to be prefixed with a file name. See +L<perldebug/"b [file]:[line] [condition]">. + +=head2 The C<CORE> Namespace + +=head3 The C<CORE::> prefix + +The C<CORE::> prefix can now be used on keywords enabled by +L<feature.pm|feature>, even outside the scope of C<use feature>. + +=head3 Subroutines in the C<CORE> namespace + +Many Perl keywords are now available as subroutines in the CORE namespace. +This allows them to be aliased: + + BEGIN { *entangle = \&CORE::tie } + entangle $variable, $package, @args; + +And for prototypes to be bypassed: + + sub mytie(\[%$*@]$@) { + my ($ref, $pack, @args) = @_; + ... do something ... + goto &CORE::tie; + } + +Some of these cannot be called through references or via C<&foo> syntax, +but must be called as barewords. + +See L<CORE> for details. -[ List each enhancement as a =head2 entry ] +=head2 Other Changes + +=head3 Anonymous handles + +Automatically generated file handles are now named __ANONIO__ when the +variable name cannot be determined, rather than $__ANONIO__. + +=head3 Autoloaded sort Subroutines + +Custom sort subroutines can now be autoloaded [perl #30661]: + + sub AUTOLOAD { ... } + @sorted = sort foo @list; # uses AUTOLOAD + +=head3 C<continue> no longer requires the "switch" feature + +The C<continue> keyword has two meanings. It can introduce a C<continue> +block after a loop, or it can exit the current C<when> block. Up till now, +the latter meaning was only valid with the "switch" feature enabled, and +was a syntax error otherwise. Since the main purpose of feature.pm is to +avoid conflicts with user-defined subroutines, there is no reason for +C<continue> to depend on it. + +=head3 DTrace probes for interpreter phase change + +The C<phase-change> probes will fire when the interpreter's phase +changes, which tracks the C<${^GLOBAL_PHASE}> variable. C<arg0> is +the new phase name; C<arg1> is the old one. This is useful mostly +for limiting your instrumentation to one or more of: compile time, +run time, destruct time. + +=head3 C<__FILE__()> Syntax + +The C<__FILE__>, C<__LINE__> and C<__PACKAGE__> tokens can now be written +with an empty pair of parentheses after them. This makes them parse the +same way as C<time>, C<fork> and other built-in functions. + +=head3 The C<\$> prototype accepts any scalar lvalue + +The C<\$> and C<\[$]> subroutine prototypes now accept any scalar lvalue +argument. Previously they only accepted scalars beginning with C<$> and +hash and array elements. This change makes them consistent with the way +the built-in C<read> and C<recv> functions (among others) parse their +arguments. This means that one can override the built-in functions with +custom subroutines that parse their arguments the same way. + +=head3 C<_> in subroutine prototypes + +The C<_> character in subroutine prototypes is now allowed before C<@> or +C<%>. =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. +=head2 Use C<is_utf8_char_buf()> and not C<is_utf8_char()> -[ List each security issue as a =head2 entry ] +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<is_utf8_char_buf()|/Added is_utf8_char_buf()>. -=head1 Incompatible Changes +=head2 Malformed UTF-8 input could cause attempts to read beyond the end of the buffer + +Two new XS-accessible functions, C<utf8_to_uvchr_buf()> and +C<utf8_to_uvuni_buf()> are now available to prevent this, and the Perl +core has been converted to use them. +See L</Internal Changes>. + +=head2 C<File::Glob::bsd_glob()> memory error with GLOB_ALTDIRFUNC (CVE-2011-2728). -XXX For a release on a stable branch, this section aspires to be: +Calling C<File::Glob::bsd_glob> with the unsupported flag +GLOB_ALTDIRFUNC would cause an access violation / segfault. A Perl +program that accepts a flags value from an external source could expose +itself to denial of service or arbitrary code execution attacks. There +are no known exploits in the wild. The problem has been corrected by +explicitly disabling all unsupported flags and setting unused function +pointers to null. Bug reported by Clément Lecigne. - There are no changes intentionally incompatible with 5.XXX.XXX - If any exist, they are bugs, and we request that you submit a - report. See L</Reporting Bugs> below. +=head2 Privileges are now set correctly when assigning to C<$(> -[ List each incompatible change as a =head2 entry ] +A hypothetical bug (probably non-exploitable in practice) due to the +incorrect setting of the effective group ID while setting C<$(> has been +fixed. The bug would only have affected systems that have C<setresgid()> +but not C<setregid()>, but no such systems are known of. =head1 Deprecations -XXX Any deprecated features, syntax, modules etc. should be listed here. -In particular, deprecated modules should be listed here even if they are -listed as an updated module in the L</Modules and Pragmata> section. +=head2 Don't read the Unicode data base files in F<lib/unicore> + +It is now deprecated to directly read the Unicode data base files. +These are stored in the F<lib/unicore> directory. Instead, you should +use the new functions in L<Unicode::UCD>. These provide a stable API, +and give complete information. + +Perl may at some point in the future change or remove the files. The +file most likely for applications to have used is +F<lib/unicore/ToDigit.pl>. L<Unicode::UCD/prop_invmap()> can be used to +get at its data instead. + +=head2 XS functions C<is_utf8_char()>, C<utf8_to_uvchr()> and +C<utf8_to_uvuni()> + +This function is deprecated because it could read beyond the end of the +input string. Use the new L<is_utf8_char_buf()|/Added is_utf8_char_buf()>, +C<utf8_to_uvchr_buf()> and C<utf8_to_uvuni_buf()> instead. + +=head1 Future Deprecations + +This section serves as a notice of features that are I<likely> to be +removed or L<deprecated|perlpolicy/deprecated> in the next release of +perl (5.18.0). If your code depends on these features, you should +contact the Perl 5 Porters via the L<mailing +list|http://lists.perl.org/list/perl5-porters.html> or L<perlbug> to +explain your use case and inform the deprecation process. + +=head2 Core Modules + +These modules may be marked as deprecated I<from the core>. This only +means that they will no longer be installed by default with the core +distribution, but will remain available on the CPAN. + +=over + +=item * + +CPANPLUS + +=item * + +Filter::Simple + +=item * + +PerlIO::mmap + +=item * + +Pod::Parser, Pod::LaTeX + +=item * + +SelfLoader + +=item * + +Text::Soundex + +=item * + +Thread.pm + +=back + +=head2 Platforms with no supporting programmers: + +These platforms will probably have their +special build support removed during the +5.17.0 development series. + +=over + +=item * + +BeOS + +=item * + +djgpp + +=item * + +dgux + +=item * + +EPOC + +=item * + +MPE/iX + +=item * + +Rhapsody + +=item * + +UTS + +=item * + +VM/ESA + +=back + +=head2 Other Future Deprecations + +=over + +=item * + +Swapping of $< and $> + +For more information about this future deprecation, see L<the relevant RT +ticket|https://rt.perl.org/rt3/Ticket/Display.html?id=96212>. + +=item * + +sfio, stdio + +=item * + +Unescaped literal C<< "{" >> in regular expressions. + +It is planned starting in v5.20 to require a literal C<"{"> to be +escaped by, for example, preceding it with a backslash. In v5.18, a +deprecated warning message will be emitted for all such uses. Note that +this only affects patterns which are to match a literal C<"{">. Other +uses of this character, such as part of a quantifier or sequence like in +the ones below are completely unaffected: + + /foo{3,5}/ + /\p{Alphabetic}/ + /\N{DIGIT ZERO} -[ List each deprecation as a =head2 entry ] +The removal of this will allow extensions to pattern syntax, and better +error checking of existing syntax. See L<perlre/Quantifiers> for an +example. + +=back + +=head1 Incompatible Changes + +=head2 Special blocks called in void context + +Special blocks (C<BEGIN>, C<CHECK>, C<INIT>, C<UNITCHECK>, C<END>) are now +called in void context. This avoids wasteful copying of the result of the +last statement [perl #108794]. + +=head2 The C<overloading> pragma and regexp objects + +With C<no overloading>, regular expression objects returned by C<qr//> 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<perlxstypemap>. + +=head2 Unicode 6.1 has incompatibilities with Unicode 6.0 + +These are detailed in L</Supports (almost) Unicode 6.1> above. +You can compile this version of Perl to use Unicode 6.0. See +L<perlunicode/Hacking Perl to work on earlier Unicode versions (for very serious hackers only)>. + +=head2 Borland compiler + +All support for the Borland compiler has been dropped. The code had not +worked for a long time anyway. + +=head2 Certain deprecated Unicode properties are no longer supported by default + +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. + +Perl may be recompiled to include any or all of them; instructions are +given in +L<perluniprops/Unicode character properties that are NOT accepted by Perl>. + +=head2 Dereferencing IO thingies as typeglobs + +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. +Previously, it would stringify as an empty string, but some operators would +treat it as undefined, producing an "uninitialized" warning. +Now it stringifies as __ANONIO__ [perl #96326]. + +=head2 User-defined case-changing operations + +This feature was deprecated in Perl 5.14, and has now been removed. +The CPAN module L<Unicode::Casing> provides better functionality without +the drawbacks that this feature had, as are detailed in the 5.14 +documentation: +L<http://perldoc.perl.org/5.14.0/perlunicode.html#User-Defined-Case-Mappings-%28for-serious-hackers-only%29> + +=head2 XSUBs are now 'static' + +XSUB C functions are now 'static', that is, they are not visible from +outside the compilation unit. Users can use the new C<XS_EXTERNAL(name)> +and C<XS_INTERNAL(name)> macros to pick the desired linking behaviour. +The ordinary C<XS(name)> declaration for XSUBs will continue to declare +non-'static' XSUBs for compatibility, but the XS compiler, +C<ExtUtils::ParseXS> (C<xsubpp>) will emit 'static' XSUBs by default. +C<ExtUtils::ParseXS>'s behaviour can be reconfigured from XS using the +C<EXPORT_XSUB_SYMBOLS> keyword. See L<perlxs> for details. + +=head2 Weakening read-only references + +Weakening read-only references is no longer permitted. It should never +have worked anyway, and in some cases could result in crashes. + +=head2 Tying scalars that hold typeglobs + +Attempting to tie a scalar after a typeglob was assigned to it would +instead tie the handle in the typeglob's IO slot. This meant that it was +impossible to tie the scalar itself. Similar problems affected C<tied> and +C<untie>: C<tied $scalar> would return false on a tied scalar if the last +thing returned was a typeglob, and C<untie $scalar> on such a tied scalar +would do nothing. + +We fixed this problem before Perl 5.14.0, but it caused problems with some +CPAN modules, so we put in a deprecation cycle instead. + +Now the deprecation has been removed and this bug has been fixed. So +C<tie $scalar> will always tie the scalar, not the handle it holds. To tie +the handle, use C<tie *$scalar> (with an explicit asterisk). The same +applies to C<tied *$scalar> and C<untie *$scalar>. + +=head2 IPC::Open3 no longer provides C<xfork()>, C<xclose_on_exec()> +and C<xpipe_anon()> + +All three functions were private, undocumented and unexported. They do +not appear to be used by any code on CPAN. Two have been inlined and one +deleted entirely. + +=head2 C<$$> no longer caches PID + +Previously, if one called fork(3) from C, Perl's +notion of C<$$> could go out of sync with what getpid() returns. By always +fetching the value of C<$$> via getpid(), this potential bug is eliminated. +Code that depends on the caching behavior will break. As described in +L<Core Enhancements|/C<$$> can be assigned to>, +C<$$> is now writable, but it will be reset during a +fork. + +=head2 C<$$> and C<getppid()> no longer emulate POSIX semantics under LinuxThreads + +The POSIX emulation of C<$$> and C<getppid()> under the obsolete +LinuxThreads implementation has been removed. +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<getppid()>, 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<getppid()>, 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 +C<sete?[ug]id()> without updating C<PL_e?[ug]id>. Having to deal with +this complexity wasn't worth it given how cheap the C<gete?[ug]id()> +system call is. + +This change will break a handful of CPAN modules that use the XS-level +C<PL_uid>, C<PL_gid>, C<PL_euid> or C<PL_egid> variables. + +The fix for those breakages is to use C<PerlProc_gete?[ug]id()> to +retrieve them (e.g. C<PerlProc_getuid()>), and not to assign to +C<PL_e?[ug]id> 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<quotemeta> 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<perlfunc/quotemeta>. =head1 Performance Enhancements -XXX Changes which enhance performance without changing behaviour go here. There -may well be none in a stable release. +=over -[ List each enhancement as a =item entry ] +=item * -=over 4 +Improved performance for Unicode properties in regular expressions + +=for comment Can this be compacted some? -- rjbs, 2012-02-20 + +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<qr/\p{foo}abc\p{foo}/> +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. =item * -XXX +Version declarations with the C<use> keyword (e.g., C<use 5.012>) are now +faster, as they enable features without loading F<feature.pm>. + +=item * + +C<local $_> is faster now, as it no longer iterates through magic that it +is not going to copy anyway. + +=item * + +Perl 5.12.0 sped up the destruction of objects whose classes define +empty C<DESTROY> methods (to prevent autoloading), by simply not +calling such empty methods. This release takes this optimisation a +step further, by not calling any C<DESTROY> method that begins with a +C<return> statement. This can be useful for destructors that are only +used for debugging: + + use constant DEBUG => 1; + sub DESTROY { return unless DEBUG; ... } + +Constant-folding will reduce the first statement to C<return;> if DEBUG +is set to 0, triggering this optimisation. + +=item * + +Assigning 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 C<substr> 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. + +=item * + +C<substr> no longer calculates a value to return when called in void +context. + +=item * + +Due to changes in L<File::Glob>, Perl's C<glob> 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. + +This does not affect C<glob> on VMS, as it does not use File::Glob. + +=item * + +The short-circuiting operators C<&&>, C<||>, and C<//>, when chained +(such as C<$a || $b || $c>), are now considerably faster to short-circuit, +due to reduced optree traversal. + +=item * + +The implementation of C<s///r> makes one fewer copy of the scalar's value. + +=item * + +C<study> is now a no-op. + +=item * + +Recursive calls to lvalue subroutines in lvalue scalar context use less +memory. =back =head1 Modules and Pragmata -XXX All changes to installed files in F<cpan/>, F<dist/>, F<ext/> and F<lib/> -go here. If Module::CoreList is updated, generate an initial draft of the -following sections using F<Porting/corelist-perldelta.pl>, which prints stub -entries to STDOUT. Results can be pasted in place of the '=head2' entries -below. A paragraph summary for important changes should then be added by hand. -In an ideal world, dual-life modules would have a F<Changes> file that could be -cribbed. +=head2 Deprecated Modules -[ Within each section, list entries as a =item entry ] +=over + +=item L<Version::Requirements> + +Version::Requirements is now DEPRECATED, use L<CPAN::Meta::Requirements>, +which is a drop-in replacement. It will be deleted from perl.git blead +in v5.17.0. + +=back =head2 New Modules and Pragmata @@ -87,7 +944,14 @@ cribbed. =item * -XXX +L<arybase> -- this new module implements the C<$[> variable. + +=item * + +C<PerlIO::mmap> 0.010 has been added to the Perl core. + +The C<mmap> PerlIO layer is no longer implemented by perl itself, but has +been moved out into the new L<PerlIO::mmap> module. =back @@ -103,71 +967,358 @@ L<XXX> has been upgraded from version 0.69 to version 0.70. =head2 Removed Modules and Pragmata -=over 4 +As promised in Perl 5.14.0's release notes, the following modules have +been removed from the core distribution, and if needed should be installed +from CPAN instead. + +=over =item * -XXX +C<Devel::DProf> has been removed from the Perl core. Prior version was +20110228.00. + +=item * + +C<Shell> has been removed from the Perl core. Prior version was 0.72_01. =back =head1 Documentation -XXX Changes to files in F<pod/> go here. Consider grouping entries by -file and be sure to link to the appropriate page, e.g. L<perlfunc>. - =head2 New Documentation -XXX Changes which create B<new> files in F<pod/> go here. +=head3 L<perldtrace> -=head3 L<XXX> +L<perldtrace> describes Perl's DTrace support, listing the provided probes +and gives examples of their use. -XXX Description of the purpose of the new file here +=head3 L<perlexperiment> + +This document is intended to provide a list of experimental features in +Perl. It is still a work in progress. + +=head3 L<perlootut> + +This a new OO tutorial. It focuses on basic OO concepts, and then recommends +that readers choose an OO framework from CPAN. + +=head3 L<perlxstypemap> + +The new manual describes the XS typemapping mechanism in unprecedented +detail and combines new documentation with information extracted from +L<perlxs> and the previously unofficial list of all core typemaps. =head2 Changes to Existing Documentation -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<perlapi> + +=over 4 + +=item * + +The HV API has long accepted negative lengths to indicate that the key is +in UTF8. Now this is documented. + +=item * + +The C<boolSV()> macro is now documented. + +=back + +=head3 L<perlfunc> + +=over 4 + +=item * + +C<dbmopen> 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 * + +As an accident of history, C<open $fh, "<:", ...> applies the default +layers for the platform (C<:raw> on Unix, C<:crlf> on Windows), ignoring +whatever is declared by L<open.pm|open>. This seems such a useful feature +it has been documented in L<perlfunc|perlfunc/open> and L<open>. + +=item * + +The entry for C<split> has been rewritten. It is now far clearer than +before. + +=back + +=head3 L<perlguts> + +=over 4 + +=item * + +A new section, L<Autoloading with XSUBs|perlguts/Autoloading with XSUBs>, +has been added, which explains the two APIs for accessing the name of the +autoloaded sub. + +=item * + +Some of the function descriptions in L<perlguts> were confusing, as it was +not clear whether they referred to the function above or below the +description. This has been clarified [perl #91790]. + +=back + +=head3 L<perlobj> + +=over 4 + +=item * + +This document has been rewritten from scratch, and its coverage of various OO +concepts has been expanded. + +=back + +=head3 L<perlop> + +=over 4 + +=item * + +Documentation of the smartmatch operator has been reworked and moved from +perlsyn to perlop where it belongs. + +It has also been corrected for the case of C<undef> on the left-hand +side. The list of different smart match behaviours had an item in the +wrong place. + +=item * + +Documentation of the ellipsis statement (C<...>) has been reworked and +moved from perlop to perlsyn. + +=item * + +The explanation of bitwise operators has been expanded to explain how they +work on Unicode strings (5.14.1). + +=item * + +More examples for C<m//g> have been added (5.14.1). + +=item * + +The C<<< <<\FOO >>> here-doc syntax has been documented (5.14.1). + +=back + +=head3 L<perlpragma> + +=over 4 + +=item * + +There is now a standard convention for naming keys in the C<%^H>, +documented under L<Key naming|perlpragma/Key naming>. + +=back + +=head3 L<perlsec/Laundering and Detecting Tainted Data> + +=over 4 + +=item * + +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 remains L<Scalar::Util/tainted>. + +=back + +=head3 L<perllol> + +=over + +=item * + +L<perllol> has been expanded with examples using the new C<push $scalar> +syntax introduced in Perl 5.14.0 (5.14.1). + +=back + +=head3 L<perlmod> -=head3 L<XXX> +=over + +=item * + +L<perlmod> now states explicitly that some types of explicit symbol table +manipulation are not supported. This codifies what was effectively already +the case [perl #78074]. + +=back + +=head3 L<perlpodstyle> =over 4 =item * -XXX Description of the change here +The tips on which formatting codes to use have been corrected and greatly +expanded. + +=item * + +There are now a couple of example one-liners for previewing POD files after +they have been edited. + +=back + +=head3 L<perlre> + +=over + +=item * + +The C<(*COMMIT)> directive is now listed in the right section +(L<Verbs without an argument|perlre/Verbs without an argument>). + +=back + +=head3 L<perlrun> + +=over + +=item * + +L<perlrun> has undergone a significant clean-up. Most notably, the +B<-0x...> form of the B<-0> flag has been clarified, and the final section +on environment variables has been corrected and expanded (5.14.1). + +=back + +=head3 L<perlsub> + +=over + +=item * + +The ($;) prototype syntax, which has existed for rather a long time, is now +documented in L<perlsub>. It allows a unary function to have the same +precedence as a list operator. + +=back + +=head3 L<perltie> + +=over + +=item * + +The required syntax for tying handles has been documented. + +=back + +=head3 L<perlvar> + +=over + +=item * + +The documentation for L<$!|perlvar/$!> has been corrected and clarified. +It used to state that $! could be C<undef>, which is not the case. It was +also unclear as to whether system calls set C's C<errno> or Perl's C<$!> +[perl #91614]. + +=item * + +Documentation for L<$$|perlvar/$$> has been amended with additional +cautions regarding changing the process ID. =back +=head3 Other Changes + +=over 4 + +=item * + +L<perlxs> was extended with documentation on inline typemaps. + +=item * + +L<perlref> has a new L<Circular References|perlref/Circular References> +section explaining how circularities may not be freed and how to solve that +with weak references. + +=item * + +Parts of L<perlapi> were clarified, and Perl equivalents of some C +functions have been added as an additional mode of exposition. + +=item * + +A few parts of L<perlre> and L<perlrecharclass> were clarified. + +=back + +=head2 Removed Documentation + +=head3 Old OO Documentation + +All the old OO tutorials, perltoot, perltooc, and perlboot, have been +removed. The perlbot (bag of object tricks) document has been removed +as well. + +=head3 Development Deltas + +The perldelta files for development releases are no longer packaged with +perl. These can still be found in the perl source code repository. + =head1 Diagnostics The following additions or changes have been made to diagnostic output, including warnings and fatal error messages. For the complete list of diagnostic messages, see L<perldiag>. -XXX New or changed warnings emitted by the core's C<C> code go here. Also -include any changes in L<perldiag> that reconcile it to the C<C> code. +=head2 New Diagnostics + +=head3 New Errors + +=over 4 -[ Within each section, list entries as a =item entry that links to perldiag, - e.g. +=item * - =item * +L<Cannot set tied @DB::args|perldiag/"Cannot set tied @DB::args"> - L<Invalid version object|perldiag/"Invalid version object"> -] +This error occurs when C<caller> tries to set C<@DB::args> but finds it +tied. Before this error was added, it used to crash instead. -=head2 New Diagnostics +=item * -XXX Newly added diagnostic messages go here +L<Cannot tie unreifiable array|perldiag/"Cannot tie unreifiable array"> -=head3 New Errors +This error is part of a safety check that the C<tie> operator does before +tying a special array like C<@_>. You should never see this message. -=over 4 +=item * + +L<&CORE::%s cannot be called directly|perldiag/"&CORE::%s cannot be called directly"> + +This occurs when a subroutine in the C<CORE::> namespace is called +with C<&foo> syntax or through a reference. Some subroutines +in this package cannot yet be called that way, but must be +called as barewords. See L</Subroutines in the C<CORE> namespace>, above. =item * -XXX L<message|perldiag/"message"> +L<Source filters apply only to byte streams|perldiag/"Source filters apply only to byte streams"> + +This new error occurs when you try to activate a source filter (usually by +loading a source filter module) within a string passed to C<eval> under the +C<unicode_eval> feature. =back @@ -177,193 +1328,2332 @@ XXX L<message|perldiag/"message"> =item * -XXX L<message|perldiag/"message"> +L<defined(@array) is deprecated|perldiag/"defined(@array) is deprecated"> + +The long-deprecated C<defined(@array)> now also warns for package variables. +Previously it only issued a warning for lexical variables. + +=item * + +L<length() used on %s|perldiag/length() used on %s> + +This new warning occurs when C<length> is used on an array or hash, instead +of C<scalar(@array)> or C<scalar(keys %hash)>. + +=item * + +L<lvalue attribute %s already-defined subroutine|perldiag/"lvalue attribute %s already-defined subroutine"> + +L<attributes.pm|attributes> now emits this warning when the :lvalue +attribute is applied to a Perl subroutine that has already been defined, as +doing so can have unexpected side-effects. + +=item * + +L<overload arg '%s' is invalid|perldiag/"overload arg '%s' is invalid"> + +This warning, in the "overload" category, is produced when the overload +pragma is given an argument it doesn't recognize, presumably a mistyped +operator. + +=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. + +=item * + +L<Useless assignment to a temporary|perldiag/"Useless assignment to a temporary"> + +Assigning to a temporary scalar returned +from an lvalue subroutine now produces this +warning [perl #31946]. + +=item * + +L<Useless use of \E|perldiag/"Useless use of \E"> + +C<\E> does nothing unless preceded by C<\Q>, C<\L> or C<\U>. =back -=head2 Changes to Existing Diagnostics +=head2 Removed Errors + +=over + +=item * + +"sort is now a reserved word" + +This error used to occur when C<sort> was called without arguments, +followed by C<;> or C<)>. (E.g., C<sort;> would die, but C<{sort}> was +OK.) This error message was added in Perl 3 to catch code like +C<close(sort)> which would no longer work. More than two decades later, +this message is no longer appropriate. Now C<sort> without arguments is +always allowed, and returns an empty list, as it did in those cases +where it was already allowed [perl #90030]. -XXX Changes (i.e. rewording) of diagnostic messages go here +=back + +=head2 Changes to Existing Diagnostics =over 4 =item * -XXX Describe change here +The "Applying pattern match..." or similar warning produced when an +array or hash is on the left-hand side of the C<=~> operator now +mentions the name of the variable. + +=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<perldiag>. + +=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]. + +=item * + +The message, "Code point 0x%X is not Unicode, no properties match it; +all inverse properties do" has been changed to "Code point 0x%X is not +Unicode, all \p{} matches fail; all \P{} matches succeed". + +=item * + +Redefinition warnings for constant subroutines used to be mandatory, +even occurring under C<no warnings>. Now they respect the L<warnings> +pragma. + +=item * + +The "glob failed" warning message is now suppressible via C<no warnings> +[perl #111656]. + +=item * + +The L<Invalid version format|perldiag/"Invalid version format (%s)"> +error message now says "negative version number" within the parentheses, +rather than "non-numeric data", for negative numbers. + +=item * + +The two warnings +L<Possible attempt to put comments in qw() list|perldiag/"Possible attempt to put comments in qw() list"> +and +L<Possible attempt to separate words with commas|perldiag/"Possible attempt to separate words with commas"> +are no longer mutually exclusive: the same C<qw> construct may produce +both. + +=item * + +The uninitialized warning for C<y///r> when C<$_> is implicit and +undefined now mentions the variable name, just like the non-/r variation +of the operator. + +=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. + +=item * + +Warnings that mention the names of lexical (C<my>) variables with +Unicode characters in them now respect the presence or absence of the +C<:utf8> layer on the output handle, instead of outputting UTF8 +regardless. Also, the correct names are included in the strings passed +to C<$SIG{__WARN__}> handlers, rather than the raw UTF8 bytes. =back =head1 Utility Changes -XXX Changes to installed programs such as F<perlbug> and F<xsubpp> go -here. Most of these are built within the directories F<utils> and F<x2p>. +=head3 L<h2ph> + +=over 4 + +=item * + +L<h2ph> used to generate code of the form -[ List utility changes as a =head3 entry for each utility and =item -entries for each change -Use L<XXX> with program names to get proper documentation linking. ] + unless(defined(&FOO)) { + sub FOO () {42;} + } -=head3 L<XXX> +But the subroutine is a compile-time declaration, and is hence unaffected +by the condition. It has now been corrected to emit a string C<eval> +around the subroutine [perl #99368]. + +=back + +=head3 L<splain> =over 4 =item * -XXX +F<splain> no longer emits backtraces with the first line number repeated. -=back +This: -=head1 Configuration and Compilation + 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: -XXX Changes to F<Configure>, F<installperl>, F<installman>, and analogous tools -go here. Any other changes to the Perl build process should be listed here. -However, any platform-specific changes should be listed in the -L</Platform Support> section, instead. + 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<perldiag>. splain has been taught to find the separate +entries in these cases, instead of simply failing to find the message. + +=back -[ List changes as a =item entry ]. +=head3 L<zipdetails> =over 4 =item * -XXX +This is a new utility, included as part of an +L<IO::Compress::Base> upgrade. + +L<zipdetails> 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 -=head1 Testing +=head1 Configuration and Compilation + +=over 4 -XXX Any significant changes to the testing of a freshly built perl should be -listed here. Changes which create B<new> files in F<t/> go here as do any -large changes to the testing harness (e.g. when parallel testing was added). -Changes to existing files in F<t/> aren't worth summarising, although the bugs -that they represent may be covered elsewhere. +=item * -[ List each test improvement as a =item entry ] +F<regexp.h> has been modified for compatibility with GCC's B<-Werror> +option, as used by some projects that include perl's header files (5.14.1). -=over 4 +=item * + +C<USE_LOCALE{,_COLLATE,_CTYPE,_NUMERIC}> have been added the output of perl -V +as they have affect the behaviour of the interpreter binary (albeit only +in a small area). + +=item * + +The code and tests for L<IPC::Open2> have been moved from F<ext/IPC-Open2> +into F<ext/IPC-Open3>, as C<IPC::Open2::open2()> is implemented as a thin +wrapper around C<IPC::Open3::_open3()>, and hence is very tightly coupled to +it. + +=item * + +The magic types and magic vtables are now generated from data in a new script +F<regen/mg_vtable.pl>, instead of being maintained by hand. As different +EBCDIC variants can't agree on the code point for '~', the character to code +point conversion is done at build time by F<generate_uudmap> to a new generated +header F<mg_data.h>. C<PL_vtbl_bm> and C<PL_vtbl_fm> are now defined by the +pre-processor as C<PL_vtbl_regexp>, instead of being distinct C variables. +C<PL_vtbl_sig> has been removed. + +=item * + +Building with C<-DPERL_GLOBAL_STRUCT> works again. This configuration is not +generally used. + +=item * + +Perl configured with I<MAD> now correctly frees C<MADPROP> structures when +OPs are freed. C<MADPROP>s are now allocated with C<PerlMemShared_malloc()> + +=item * + +F<makedef.pl> has been refactored. This should have no noticeable affect on +any of the platforms that use it as part of their build (AIX, VMS, Win32). =item * -XXX +C<useperlio> can no longer be disabled. + +=item * + +The file F<global.sym> is no longer needed, and has been removed. It +contained a list of all exported functions, one of the files generated by +F<regen/embed.pl> from data in F<embed.fnc> and F<regen/opcodes>. The code +has been refactored so that the only user of F<global.sym>, F<makedef.pl>, +now reads F<embed.fnc> and F<regen/opcodes> directly, removing the need to +store the list of exported functions in an intermediate file. + +As F<global.sym> was never installed, this change should not be visible +outside the build process. + +=item * + +F<pod/buildtoc>, used by the build process to build L<perltoc>, has been +refactored and simplified. It now only contains code to build L<perltoc>; +the code to regenerate Makefiles has been moved to F<Porting/pod_rules.pl>. +It's a bug if this change has any material effect on the build process. + +=item * + +F<pod/roffitall> is now built by F<pod/buildtoc>, 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 * + +The man page for C<XS::Typemap> is no longer installed. C<XS::Typemap> +is a test module which is not installed, hence installing its +documentation makes no sense. + +=item * + +The -Dusesitecustomize and -Duserelocatableinc options now work +together properly. =back =head1 Platform Support -XXX Any changes to platform support should be listed in the sections below. +=head2 Platform-Specific Notes + +=head3 Cygwin -[ Within the sections, list each platform as a =item entry with specific -changes as paragraphs below it. ] +=over 4 + +=item * -=head2 New Platforms +Since version 1.7, Cygwin supports native UTF-8 paths. If Perl is built +under that environment, directory and filenames will be UTF-8 encoded. + +Cygwin does not initialize all original Win32 environment variables. See +F<README.cygwin> for a discussion of the newly-added +C<Cygwin::sync_winenv()> function [perl #110190] and for +further links. + +=back -XXX List any platforms that this version of perl compiles on, that previous -versions did not. These will either be enabled by new files in the F<hints/> -directories, or new subdirectories and F<README> files at the top level of the -source tree. +=head3 HP-UX =over 4 -=item XXX-some-platform +=item * -XXX +HP-UX PA-RISC/64 now supports gcc-4.x -=back +A fix to correct the socketsize now makes the test suite pass on HP-UX +PA-RISC for 64bitall builds. -=head2 Discontinued Platforms +=back -XXX List any platforms that this version of perl no longer compiles on. +=head3 VMS =over 4 -=item XXX-some-platform +=item * + +Remove unnecessary includes, fix miscellaneous compiler warnings and +close some unclosed comments on F<vms/vms.c>. + +Remove sockadapt layer from the VMS build. -XXX +=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. + +=item * + +The build on VMS now allows names of the resulting symbols in C code for +Perl longer than 31 characters. Symbols like +C<Perl__it_was_the_best_of_times_it_was_the_worst_of_times> can now be +created freely without causing the VMS linker to seize up. =back -=head2 Platform-Specific Notes +=head3 GNU/Hurd + +Numerous build and test failures on GNU/Hurd have been resolved with hints +for building DBM modules, detection of the library search path, and enabling +of large file support. + +=head3 OpenVOS + +Perl is now built with dynamic linking on OpenVOS, the minimum supported +version of which is now Release 17.1.0. -XXX List any changes for specific platforms. This could include configuration -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 SunOS + +The CC workshop C++ compiler is now detected and used on systems that ship +without cc. + +=head1 Internal Changes =over 4 -=item XXX-some-platform +=item * -XXX +The compiled representation of formats is now stored via the C<mg_ptr> of +their C<PERL_MAGIC_fm>. Previously it was stored in the string buffer, +beyond C<SvLEN()>, the regular end of the string. C<SvCOMPILED()> and +C<SvCOMPILED_{on,off}()> now exist solely for compatibility for XS code. +The first is always 0, the other two now no-ops. (5.14.1) + +=item * + +Some global variables have been marked C<const>, members in the interpreter +structure have been re-ordered, and the opcodes have been re-ordered. The +op C<OP_AELEMFAST> has been split into C<OP_AELEMFAST> and C<OP_AELEMFAST_LEX>. + +=item * + +When empting a hash of its elements (e.g. via undef(%h), or %h=()), HvARRAY +field is no longer temporarily zeroed. Any destructors called on the freed +elements see the remaining elements. Thus, %h=() becomes more like +C<delete $h{$_} for keys %h>. + +=item * + +Boyer-Moore compiled scalars are now PVMGs, and the Boyer-Moore tables are now +stored via the mg_ptr of their C<PERL_MAGIC_bm>. +Previously they were PVGVs, with the tables stored in +the string buffer, beyond C<SvLEN()>. This eliminates +the last place where the core stores data beyond C<SvLEN()>. + +=item * + +Simplified logic in C<Perl_sv_magic()> introduces a small change of +behaviour for error cases involving unknown magic types. Previously, if +C<Perl_sv_magic()> was passed a magic type unknown to it, it would + +=over + +=item 1. + +Croak "Modification of a read-only value attempted" if read only + +=item 2. + +Return without error if the SV happened to already have this magic + +=item 3. + +otherwise croak "Don't know how to handle magic of type \\%o" =back -=head1 Internal Changes +Now it will always croak "Don't know how to handle magic of type \\%o", even +on read only values, or SVs which already have the unknown magic type. -XXX Changes which affect the interface available to C<XS> code go here. -Other significant internal changes for future core maintainers should -be noted as well. +=item * -[ List each change as a =item entry ] +The experimental C<fetch_cop_label> function has been renamed to +C<cop_fetch_label>. -=over 4 +=item * + +The C<cop_store_label> function has been added to the API, but is +experimental. + +=item * + +F<embedvar.h> has been simplified, and one level of macro indirection for +PL_* variables has been removed for the default (non-multiplicity) +configuration. PERLVAR*() macros now directly expand their arguments to +tokens such as C<PL_defgv>, instead of expanding to C<PL_Idefgv>, with +F<embedvar.h> defining a macro to map C<PL_Idefgv> to C<PL_defgv>. XS code +which has unwarranted chumminess with the implementation may need updating. + +=item * + +An API has been added to explicitly choose whether or not to export XSUB +symbols. More detail can be found in the comments for commit e64345f8. + +=item * + +The C<is_gv_magical_sv> function has been eliminated and merged with +C<gv_fetchpvn_flags>. It used to be called to determine whether a GV +should be autovivified in rvalue context. Now it has been replaced with a +new C<GV_ADDMG> flag (not part of the API). + +=item * + +The returned code point from the function C<utf8n_to_uvuni()> +when the input is malformed UTF-8, malformations are allowed, and +C<utf8> warnings are off is now the Unicode REPLACEMENT CHARACTER +whenever the malformation is such that no well-defined code point can be +computed. Previously the returned value was essentially garbage. The +only malformations that have well-defined values are a zero-length +string (0 is the return), and overlong UTF-8 sequences. + +=item * + +Padlists are now marked C<AvREAL>; i.e., reference-counted. They have +always been reference-counted, but were not marked real, because F<pad.c> +did its own clean-up, instead of using the usual clean-up code in F<sv.c>. +That caused problems in thread cloning, so now the C<AvREAL> flag is on, +but is turned off in F<pad.c> right before the padlist is freed (after +F<pad.c> has done its custom freeing of the pads). + +=item * + +All the C files that make up the Perl core have been converted to UTF-8. + +=item * + +These new functions have been added as part of the work on Unicode symbols: + + HvNAMELEN + HvNAMEUTF8 + HvENAMELEN + HvENAMEUTF8 + gv_init_pv + gv_init_pvn + gv_init_pvsv + gv_fetchmeth_pv + gv_fetchmeth_pvn + gv_fetchmeth_sv + gv_fetchmeth_pv_autoload + gv_fetchmeth_pvn_autoload + gv_fetchmeth_sv_autoload + gv_fetchmethod_pv_flags + gv_fetchmethod_pvn_flags + gv_fetchmethod_sv_flags + gv_autoload_pv + gv_autoload_pvn + gv_autoload_sv + newGVgen_flags + sv_derived_from_pv + sv_derived_from_pvn + sv_derived_from_sv + sv_does_pv + sv_does_pvn + sv_does_sv + whichsig_pv + whichsig_pvn + whichsig_sv + newCONSTSUB_flags + +The gv_fetchmethod_*_flags functions, like gv_fetchmethod_flags, are +experimental and may change in a future release. + +=item * + +The following functions were added. These are I<not> part of the API: + + GvNAMEUTF8 + GvENAMELEN + GvENAME_HEK + CopSTASH_flags + CopSTASH_flags_set + PmopSTASH_flags + PmopSTASH_flags_set + sv_sethek + HEKfARG + +There is also a C<HEKf> macro corresponding to C<SVf>, for +interpolating HEKs in formatted strings. + +=item * + +C<sv_catpvn_flags> takes a couple of new internal-only flags, +C<SV_CATBYTES> and C<SV_CATUTF8>, which tell it whether the char array to +be concatenated is UTF8. This allows for more efficient concatenation than +creating temporary SVs to pass to C<sv_catsv>. + +=item * + +For XS AUTOLOAD subs, $AUTOLOAD is set once more, as it was in 5.6.0. This +is in addition to setting C<SvPVX(cv)>, for compatibility with 5.8 to 5.14. +See L<perlguts/Autoloading with XSUBs>. + +=item * + +Perl now checks whether the array (the linearised isa) returned by a MRO +plugin begins with the name of the class itself, for which the array was +created, instead of assuming that it does. This prevents the first element +from being skipped during method lookup. It also means that +C<mro::get_linear_isa> may return an array with one more element than the +MRO plugin provided [perl #94306]. =item * -XXX +C<PL_curstash> is now reference-counted. + +=item * + +There are now feature bundle hints in C<PL_hints> (C<$^H>) that version +declarations use, to avoid having to load F<feature.pm>. One setting of +the hint bits indicates a "custom" feature bundle, which means that the +entries in C<%^H> still apply. F<feature.pm> uses that. + +The C<HINT_FEATURE_MASK> macro is defined in F<perl.h> along with other +hints. Other macros for setting and testing features and bundles are in +the new F<feature.h>. C<FEATURE_IS_ENABLED> (which has moved to +F<feature.h>) is no longer used throughout the codebase, but more specific +macros, e.g., C<FEATURE_SAY_IS_ENABLED>, that are defined in F<feature.h>. + +=item * + +F<lib/feature.pm> is now a generated file, created by the new +F<regen/feature.pl> script, which also generates F<feature.h>. + +=item * + +Tied arrays are now always C<AvREAL>. If C<@_> or C<DB::args> is tied, it +is reified first, to make sure this is always the case. + +=item * + +Two new functions C<utf8_to_uvchr_buf()> and C<utf8_to_uvuni_buf()> have +been added. These are the same as C<utf8_to_uvchr> and +C<utf8_to_uvuni> (which are now deprecated), but take an extra parameter +that is used to guard against reading beyond the end of the input +string. +See L<perlapi/utf8_to_uvchr_buf> and L<perlapi/utf8_to_uvuni_buf>. + +=item * + +The regular expression engine now does TRIE case insensitive matches +under Unicode. This may change the output of C<< use re 'debug'; >>, +and will speed up various things. + +=item * + +There is a new C<wrap_op_checker()> function, which provides a thread-safe +alternative to writing to C<PL_check> directly. =back =head1 Selected Bug Fixes -XXX Important bug fixes in the core language are summarised here. -Bug fixes in files in F<ext/> and F<lib/> are best summarised in -L</Modules and Pragmata>. +=head2 Array and hash -[ List each fix as a =item entry ] +=over -=over 4 +=item * + +A bug has been fixed that would cause a "Use of freed value in iteration" +error if the next two hash elements that would be iterated over are +deleted [perl #85026]. (5.14.1) =item * -XXX +Deleting the current hash iterator (the hash element that would be returend +by the next call to C<each>) in void context used not to free it +[perl #85026]. + +=item * + +Deletion of methods via C<delete $Class::{method}> syntax used to update +method caches if called in void context, but not scalar or list context. + +=item * + +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 * + +A C<keys> optimisation in Perl 5.12.0 to make it faster on empty hashes +caused C<each> not to reset the iterator if called after the last element +was deleted. + +=item * + +Freeing deeply nested hashes no longer crashes [perl #44225]. + +=item * + +It is possible from XS code to create hashes with elements that have no +values. The hash element and slice operators used to crash +when handling these in lvalue context. They now +produce a "Modification of non-creatable hash value attempted" error +message. + +=item * + +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 * + +It used to be possible to free the typeglob of a localised array or hash +(e.g., C<local @{"x"}; delete $::{x}>), resulting in a crash on scope exit. + +=item * + +Some core bugs affecting L<Hash::Util> have been fixed: locking a hash +element that is a glob copy no longer causes subsequent assignment to it to +corrupt the glob, and unlocking a hash element that holds a copy-on-write +scalar no longer causes modifications to that scalar to modify other +scalars that were sharing the same string buffer. =back -=head1 Known Problems +=head2 C API fixes + +=over + +=item * + +The C<newHVhv> XS function now works on tied hashes, instead of crashing or +returning an empty hash. + +=item * + +The C<SvIsCOW> C macro now returns false for read-only copies of typeglobs, +such as those created by: + + $hash{elem} = *foo; + Hash::Util::lock_value %hash, 'elem'; + +It used to return true. + +=item * + +The C<SvPVutf8> C function no longer tries to modify its argument, +resulting in errors [perl #108994]. + +=item * + +C<SvPVutf8> now works properly with magical variables. + +=item * + +C<SvPVbyte> now works properly non-PVs. + +=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 * + +The C-level C<pregcomp> 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]. + +=back + +=head2 Compile-time hints + +=over + +=item * + +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<eval $string> and C<require> used not to +localise C<%^H> during compilation if it +was empty at the time the C<eval> call itself was compiled. This could +lead to scary side effects, like C<use re "/m"> enabling other flags that +the surrounding code was trying to enable for its caller [perl #68750]. -XXX Descriptions of platform agnostic bugs we know we can't fix go here. Any -tests that had to be C<TODO>ed for the release would be noted here, unless -they were specific to a particular platform (see below). +=item * + +C<eval $string> and C<require> 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<BEGIN { $^H{foo}=7 }> equivalent to +C<BEGIN { eval '$^H{foo}=7' }> [perl #70151]. + +=item * + +Creating a BEGIN block from XS code (via C<newXS> or C<newATTRSUB>) 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. + +=back + +=head2 Copy-on-write scalars + +Copy-on-write or shared hash key scalars +were introduced in 5.8.0, but most Perl code +did not encounter them (they were used mostly internally). Perl +5.10.0 extended them, such that assigning C<__PACKAGE__> or a +hash key to a scalar would make it copy-on-write. Several parts +of Perl were not updated to account for them, but have now been fixed. + +=over + +=item * + +C<utf8::decode> had a nasty bug that would modify copy-on-write scalars' +string buffers in place (i.e., skipping the copy). This could result in +hashes having two elements with the same key [perl #91834]. + +=item * + +Lvalue subroutines were not allowing COW scalars to be returned. This was +fixed for lvalue scalar context in Perl 5.12.3 and 5.14.0, but list context +was not fixed until this release. + +=item * + +Elements of restricted hashes (see the L<fields> pragma) containing +copy-on-write values couldn't be deleted, nor could such hashes be cleared +(C<%hash = ()>). + +=item * + +Localising a tied variable used to make it read-only if it contained a +copy-on-write string. + +=item * + +Assigning a copy-on-write string to a stash +element no longer causes a double free. Regardless of this change, the +results of such assignments are still undefined. + +=item * + +Assigning a copy-on-write string to a tied variable no longer stops that +variable from being tied if it happens to be a PVMG or PVLV internally. + +=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 * + +This one is a regression from 5.12: In 5.14.0, the bitwise assignment +operators C<|=>, C<^=> and C<&=> started leaving the left-hand side +undefined if it happened to be a copy-on-write string [perl #108480]. + +=item * + +L<Storable>, L<Devel::Peek> and L<PerlIO::scalar> had similar problems. +See L</Updated Modules and Pragmata>, above. + +=back + +=head2 The debugger + +=over + +=item * + +F<dumpvar.pl>, and consequently the C<x> 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]. + +=item * + +The "R" command for restarting a debugger session has been fixed to work on +Windows, or any other system lacking a C<POSIX::_SC_OPEN_MAX> constant +[perl #87740]. + +=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. + +=item * + +When subroutine calls are intercepted by the debugger, the name of the +subroutine or a reference to it is stored in C<$DB::sub>, for the debugger +to access. In some cases (such as C<$foo = *bar; undef *bar; &$foo>) +C<$DB::sub> would be set to a name that could not be used to find the +subroutine, and so the debugger's attempt to call it would fail. Now the +check to see whether a reference is needed is more robust, so those +problems should not happen anymore [rt.cpan.org #69862]. + +=item * + +Every subroutine has a filename associated with it that the debugger uses. +The one associated with constant subroutines used to be misallocated when +cloned under threads. Consequently, debugging threaded applications could +result in memory corruption [perl #96126]. + +=back + +=head2 Dereferencing operators + +=over + +=item * + +C<defined(${"..."})>, C<defined(*{"..."})>, etc., used to +return true for most, but not all built-in variables, if +they had not been used yet. This bug affected C<${^GLOBAL_PHASE}> and +C<${^UTF8CACHE}>, among others. It also used to return false if the +package name was given as well (C<${"::!"}>) [perl #97978, #97492]. + +=item * + +Perl 5.10.0 introduced a similar bug: C<defined(*{"foo"})> where "foo" +represents the name of a built-in global variable used to return false if +the variable had never been used before, but only on the I<first> call. +This, too, has been fixed. + +=item * + +Since 5.6.0, C<*{ ... }> has been inconsistent in how it treats undefined +values. It would die in strict mode or lvalue context for most undefined +values, but would be treated as the empty string (with a warning) for the +specific scalar return by C<undef()> (C<&PL_sv_undef> internally). This +has been corrected. C<undef()> is now treated like other undefined +scalars, as in Perl 5.005. + +=back + +=head2 Filehandle, last-accessed + +Perl has an internal variable that stores the last filehandle to be +accessed. It is used by C<$.> and by C<tell> and C<eof> without +arguments. + +=over + +=item * + +It used to be possible to set this internal variable to a glob copy and +then modify that glob copy to be something other than a glob, and still +have the last-accessed filehandle associated with the variable after +assigning a glob to it again: + + my $foo = *STDOUT; # $foo is a glob copy + <$foo>; # $foo is now the last-accessed handle + $foo = 3; # no longer a glob + $foo = *STDERR; # still the last-accessed handle + +Now the C<$foo = 3> assignment unsets that internal variable, so there +is no last-accessed filehandle, just as if C<< <$foo> >> had never +happened. + +This also prevents some unrelated handle from becoming the last-accessed +handle if $foo falls out of scope and the same internal SV gets used for +another handle [perl #97988]. + +=item * + +A regression in 5.14 caused these statements not to set that internal +variable: + + my $fh = *STDOUT; + tell $fh; + eof $fh; + seek $fh, 0,0; + tell *$fh; + eof *$fh; + seek *$fh, 0,0; + readline *$fh; + +This is now fixed, but C<tell *{ *$fh }> still has the problem, and it +is not clear how to fix it [perl #106536]. + +=back + +=head2 Filetests and C<stat> + +The term "filetests" refers to the operators that consist of a hyphen +followed by a single letter: C<-r>, C<-x>, C<-M>, etc. The term "stacked" +when applied to filetests means followed by another filetest operator +sharing the same operand, as in C<-r -x -w $fooo>. + +=over + +=item * + +C<stat> produces more consistent warnings. It no longer warns for "_" +[perl #71002] and no longer skips the warning at times for other unopened +handles. It no longer warns about an unopened handle when the operating +system's C<fstat> function fails. + +=item * + +C<stat> would sometimes return negative numbers for large inode numbers, +because it was using the wrong internal C type. [perl #84590] + +=item * + +C<lstat> is documented to fall back to C<stat> (with a warning) when given +a filehandle. When passed an IO reference, it was actually doing the +equivalent of S<C<stat _>> and ignoring the handle. + +=item * + +C<-T _> with no preceding C<stat> used to produce a +confusing "uninitialized" warning, even though there +is no visible uninitialized value to speak of. + +=item * + +C<-T>, C<-B>, C<-l> and C<-t> now work +when stacked with other filetest operators +[perl #77388]. + +=item * + +In 5.14.0, filetest ops (C<-r>, C<-x>, etc.) started calling FETCH on a +tied argument belonging to the previous argument to a list operator, if +called with a bareword argument or no argument at all. This has been +fixed, so C<push @foo, $tied, -r> no longer calls FETCH on C<$tied>. + +=item * + +In Perl 5.6, C<-l> followed by anything other than a bareword would treat +its argument as a file name. That was changed in 5.8 for glob references +(C<\*foo>), but not for globs themselves (C<*foo>). C<-l> started +returning C<undef> for glob references without setting the last +stat buffer that the "_" handle uses, but only if warnings +were turned on. With warnings off, it was the same as 5.6. +In other words, it was simply buggy and inconsistent. Now the 5.6 +behaviour has been restored. + +=item * + +C<-l> followed by a bareword no longer "eats" the previous argument to +the list operator in whose argument list it resides. Hence, +C<print "bar", -l foo> now actually prints "bar", because C<-l> +on longer eats it. + +=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. + +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): + +=over + +=item * + +C<-T I<HANDLE>>, even though it does a C<stat>, was not resetting the last +stat type, so an C<lstat _> following it would merrily return the wrong +results. Also, it was not setting the success status. + +=item * + +Freeing the handle last used by C<stat> or a filetest could result in +S<C<-T _>> using an unrelated handle. + +=item * + +C<stat> with an IO reference would not reset the stat type or record the +filehandle for S<C<-T _>> to use. + +=item * + +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. +Fatal warnings also stopped C<-T> from setting C<$!>. + +=item * + +When the last stat was on an unreadable file, C<-T _> is supposed to +return C<undef>, leaving the last stat buffer unchanged. But it was +setting the stat type, causing C<lstat _> to stop working. + +=item * + +C<-T I<FILENAME>> was not resetting the internal stat buffers for +unreadable files. + +=back + +These have all been fixed. + +=back + +=head2 Formats + +=over + +=item * + +A number of edge cases have been fixed with formats and C<formline>; +in particular, where the format itself is potentially variable (such as +with ties and overloading), and where the format and data differ in their +encoding. In both these cases, it used to possible for the output to be +corrupted [perl #91032]. + +=item * + +C<formline> no longer converts its argument into a string in-place. So +passing a reference to C<formline> no longer destroys the reference +[perl #79532]. + +=item * + +Assignment to C<$^A> (the format output accumulator) now recalculates +the number of lines output. + +=back + +=head2 C<given> and C<when> + +=over + +=item * + +C<given> was not scoping its implicit $_ properly, resulting in memory +leaks or "Variable is not available" warnings [perl #94682]. + +=item * + +C<given> was not calling set-magic on the implicit lexical C<$_> that it +uses. This meant, for example, that C<pos> would be remembered from one +execution of the same C<given> block to the next, even if the input were a +different variable [perl #84526]. + +=item * + +C<when> blocks are now capable of returning variables declared inside the +enclosing C<given> block [perl #93548]. + +=back + +=head2 The C<glob> operator + +=over + +=item * + +On OSes other than VMS, Perl's C<glob> operator (and the C<< <...> >> form) +use L<File::Glob> underneath. L<File::Glob> splits the pattern into words, +before feeding each word to its C<bsd_glob> function. + +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]. + +=item * + +C<CORE::glob> now works as a way to call the default globbing function. It +used to respect overrides, despite the C<CORE::> prefix. + +=item * + +Under miniperl (used to configure modules when perl itself is built), +C<glob> now clears %ENV before calling csh, since the latter croaks on some +systems if it does not like the contents of the LS_COLORS enviroment +variable [perl #98662]. + +=back + +=head2 Lvalue subroutines + +=over + +=item * -This is a list of some significant unfixed bugs, which are regressions -from either 5.XXX.XXX or 5.XXX.XXX. +Explicit return now returns the actual argument passed to return, instead +of copying it [perl #72724, #72706]. -[ List each fix as a =item entry ] +=item * + +Lvalue subroutines used to enforce lvalue syntax (i.e., whatever can go on +the left-hand side of C<=>) for the last statement and the arguments to +return. Since lvalue subroutines are not always called in lvalue context, +this restriction has been lifted. + +=item * + +Lvalue subroutines are less restrictive as to what values can be returned. +It used to croak on values returned by C<shift> and C<delete> and from +other subroutines, but no longer does so [perl #71172]. + +=item * + +Empty lvalue subroutines (C<sub :lvalue {}>) used to return C<@_> in list +context. In fact, all subroutines used to, but regular subs were fixed in +Perl 5.8.2. Now lvalue subroutines have been likewise fixed. + +=item * + +Autovivification now works on values returned from lvalue subroutines +[perl #7946], as does returning C<keys> in lvalue context. + +=item * + +Lvalue subroutines used to copy their return values in rvalue context. Not +only was this a waste of CPU cycles, but it also caused bugs. A C<($)> +prototype would cause an lvalue sub to copy its return value [perl #51408], +and C<while(lvalue_sub() =~ m/.../g) { ... }> would loop endlessly +[perl #78680]. + +=item * + +When called in potential lvalue context +(e.g., subroutine arguments or a list +passed to C<for>), lvalue subroutines used to copy +any read-only value that was returned. E.g., C< sub :lvalue { $] } > +would not return C<$]>, but a copy of it. + +=item * + +When called in potential lvalue context, an lvalue subroutine returning +arrays or hashes used to bind the arrays or hashes to scalar variables, +resulting in bugs. This was fixed in 5.14.0 if an array were the first +thing returned from the subroutine (but not for C<$scalar, @array> or +hashes being returned). Now a more general fix has been applied +[perl #23790]. + +=item * + +Method calls whose arguments were all surrounded with C<my()> or C<our()> +(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. + +=item * + +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 * + +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<are> 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 * + +C<AUTOLOAD> 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 * + +Applying the C<:lvalue> attribute to an XSUB or to an aliased subroutine +stub with C<< sub foo :lvalue; >> syntax stopped working in Perl 5.12. +This has been fixed. + +=item * + +Applying the :lvalue attribute to subroutine that is already defined does +not work properly, as the attribute changes the way the sub is compiled. +Hence, Perl 5.12 began warning when an attempt is made to apply the +attribute to an already defined sub. In such cases, the attribute is +discarded. + +But the change in 5.12 missed the case where custom attributes are also +present: that case still silently and ineffectively applied the attribute. +That omission has now been corrected. C<sub foo :lvalue :Whatever> (when +C<foo> is already defined) now warns about the :lvalue attribute, and does +not apply it. + +=item * + +A bug affecting lvalue context propagation through nested lvalue subroutine +calls has been fixed. Previously, returning a value in nested rvalue +context would be treated as lvalue context by the inner subroutine call, +resulting in some values (such as read-only values) being rejected. + +=back + +=head2 Overloading + +=over + +=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 * + +Errors that occur when methods cannot be found during overloading now +mention the correct package name, as they did in 5.8.x, instead of +erroneously mentioning the "overload" package, as they have since 5.10.0. + +=item * + +Undefining C<%overload::> no longer causes a crash. + +=back + +=head2 Prototypes of built-in keywords + +=over + +=item * + +The C<prototype> function no longer dies for the C<__FILE__>, C<__LINE__> +and C<__PACKAGE__> directives. It now returns an empty-string prototype +for them, because they are syntactically indistinguishable from nullary +functions like C<time>. + +=item * + +C<prototype> now returns C<undef> for all overridable infix operators, +such as C<eq>, which are not callable in any way resembling functions. +It used to return incorrect prototypes for some and die for others +[perl #94984]. + +=item * + +The prototypes of several built-in functions--C<getprotobynumber>, C<lock>, +C<not> and C<select>--have been corrected, or at least are now closer to +reality than before. + +=back + +=head2 Regular expressions + +=for comment Is it possible to merge some of these items? =over 4 =item * -XXX +C</[[:ascii:]]/> and C</[[:blank:]]/> now use locale rules under +C<use locale> when the platform supports that. Previously, they used +the platform's native character set. + +=item * + +C<m/[[:ascii:]]/i> and C</\p{ASCII}/i> 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 * + +C</.*/g> would sometimes refuse to match at the end of a string that ends +with "\n". This has been fixed [perl #109206]. + +=item * + +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<Hash::Util>. This could result in double frees, crashes or erratic +behaviour. + +=item * + +The new (in 5.14.0) regular expression modifier C</a> when repeated like +C</aa> forbids the characters outside the ASCII range that match +characters inside that range from matching under C</i>. This did not +work under some circumstances, all involving alternation, such as: + + "\N{KELVIN SIGN}" =~ /k|foo/iaa; + +succeeded inappropriately. This is now fixed. + +=item * + +5.14.0 introduced some memory leaks in regular expression character +classes such as C<[\w\s]>, which have now been fixed. (5.14.1) + +=item * + +An edge case in regular expression matching could potentially loop. +This happened only under C</i> in bracketed character classes that have +characters with multi-character folds, and the target string to match +against includes the first portion of the fold, followed by another +character that has a multi-character fold that begins with the remaining +portion of the fold, plus some more. + + "s\N{U+DF}" =~ /[\x{DF}foo]/i + +is one such case. C<\xDF> folds to C<"ss">. (5.14.1) + +=item * + +A few characters in regular expression pattern matches did not +match correctly in some circumstances, all involving C</i>. The +affected characters are: +COMBINING GREEK YPOGEGRAMMENI, +GREEK CAPITAL LETTER IOTA, +GREEK CAPITAL LETTER UPSILON, +GREEK PROSGEGRAMMENI, +GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA, +GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS, +GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA, +GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS, +LATIN SMALL LETTER LONG S, +LATIN SMALL LIGATURE LONG S T, +and +LATIN SMALL LIGATURE ST. + +=item * + +A memory leak regression in regular expression compilation +under threading has been fixed. + +=item * + +A regression introduced in 5.13.6 has +been 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. + +=item * + +Three problematic Unicode characters now work better in regex pattern matching under C</i> + +In the past, three Unicode characters: +LATIN SMALL LETTER SHARP S, +GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS, +and +GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS, +along with the sequences that they fold to +(including "ss" in the case of LATIN SMALL LETTER SHARP S), +did not properly match under C</i>. 5.14.0 fixed some of these cases, +but introduced others, including a panic when one of the characters or +sequences was used in the C<(?(DEFINE)> regular expression predicate. +The known bugs that were introduced in 5.14 have now been fixed; as well +as some other edge cases that have never worked until now. All these +involve using the characters and sequences outside bracketed character +classes under C</i>. This closes [perl #98546]. + +There remain known problems when using certain characters with +multi-character folds inside bracketed character classes, including such +constructs as C<qr/[\N{LATIN SMALL LETTER SHARP}a-z]/i>. These +remaining bugs are addressed in [perl #89774]. + +=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 * + +In 5.14, C</[[:lower:]]/i> and C</[[:upper:]]/i> no longer matched the +opposite case. This has been fixed [perl #101970]. + +=item * + +A regular expression match with an overloaded object on the right-hand side +would in some cases stringify the object too many times. + +=item * + +A regression has been fixed that was introduced in 5.14, in C</i> +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] + +=item * + +In case-insensitive regular expression pattern matching, no longer on +UTF-8 encoded strings does the scan for the start of match only look at +the first possible position. This caused matches such as +C<"f\x{FB00}" =~ /ff/i> to fail. + +=item * + +The regexp optimiser no longer crashes on debugging builds when merging +fixed-string nodes with inconvenient contents. + +=item * + +A panic involving the combination of the regular expression modifiers +C</aa> and the C<\b> escape sequence introduced in 5.14.0 has been +fixed [perl #95964]. + +=item * + +The combination of the regular expression modifiers C</aa> and the C<\b> +and C<\B> escape sequences did not work properly on UTF-8 encoded +strings. All non-ASCII characters under C</aa> should be treated as +non-word characters, but what was happening was that Unicode rules were +used to determine wordness/non-wordness for non-ASCII characters. This +is now fixed [perl #95968]. + +=item * + +C<< (?foo: ...) >> no longer loses passed in character set. + +=item * + +The trie optimisation used to have problems with alternations containing +an empty C<(?:)>, causing C<< "x" =~ /\A(?>(?:(?:)A|B|C?x))\z/ >> not to +match, whereas it should [perl #111842]. + +=item * + +Use of lexical (C<my>) variables in code blocks embedded in regular +expressions will no longer result in memory corruption or crashes. + +Nevertheless, these code blocks are still experimental, as there are still +problems with the wrong variables being closed over (in loops for instance) +and with abnormal exiting (e.g., C<die>) causing memory corruption. + +=item * + +The C<\h>, C<\H>, C<\v> and C<\V> regular expression metacharacters used to +cause a panic error message when attempting to match at the end of the +string [perl #96354]. + +=item * + +The abbreviations for four C1 control characters C<MW> C<PM>, C<RI>, and +C<ST> were previously unrecognized by C<\N{}>, vianame(), and +string_vianame(). + +=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]. + +=item * + +Creating a C<UNIVERSAL::AUTOLOAD> sub no longer stops C<%+>, C<%-> and +C<%!> from working some of the time [perl #105024]. + +=back + +=head2 Smartmatching + +=over + +=item * + +C<~~> now correctly handles the precedence of Any~~Object, and is not tricked +by an overloaded object on the left-hand side. + +=item * + +In Perl 5.14.0, C<$tainted ~~ @array> stopped working properly. Sometimes +it would erroneously fail (when C<$tainted> contained a string that occurs +in the array I<after> the first element) or erroneously succeed (when +C<undef> occurred after the first element) [perl #93590]. + +=back + +=head2 The C<sort> operator + +=over + +=item * + +C<sort> was not treating C<sub {}> and C<sub {()}> as equivalent when +such a sub was provided as the comparison routine. It used to croak on +C<sub {()}>. + +=item * + +C<sort> now works once more with custom sort routines that are XSUBs. It +stopped working in 5.10.0. + +=item * + +C<sort> with a constant for a custom sort routine, although it produces +unsorted results, no longer crashes. It started crashing in 5.10.0. + +=item * + +Warnings emitted by C<sort> when a custom comparison routine returns a +non-numeric value now contain "in sort" and show the line number of the +C<sort> operator, rather than the last line of the comparison routine. The +warnings also occur now only if warnings are enabled in the scope where +C<sort> occurs. Previously the warnings would occur if enabled in the +comparison routine's scope. + +=item * + +C<< sort { $a <=> $b } >>, which is optimised internally, now produces +"uninitialized" warnings for NaNs (not-a-number values), since C<< <=> >> +returns C<undef> for those. This brings it in line with +S<C<< sort { 1; $a <=> $b } >>> and other more complex cases, which are not +optimised [perl #94390]. + +=back + +=head2 The C<substr> operator + +=over + +=item * + +Tied (and otherwise magical) variables are no longer exempt from the +"Attempt to use reference as lvalue in substr" warning. + +=item * + +That warning now occurs when the returned lvalue is assigned to, not +when C<substr> itself is called. This only makes a difference if the +return value of C<substr> is referenced and assigned to later. + +=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<substr>. + +=item * + +C<substr> assignments no longer call FETCH twice if the first argument +is a tied variable, just once. + +=back + +=head2 Support for embedded nulls + +Some parts of Perl did not work correctly with nulls (C<chr 0>) embedded in +strings. That meant that, for instance, C<< $m = "a\0b"; foo->$m >> would +call the "a" method, instead of the actual method name contained in $m. +These parts of perl have been fixed to support nulls: + +=over + +=item * + +Method names + +=item * + +Typeglob names (including filehandle and subroutine names) + +=item * + +Package names, including the return value of C<ref()> + +=item * + +Typeglob elements (C<*foo{"THING\0stuff"}>) + +=item * + +Signal names + +=item * + +Various warnings and error messages that mention variable names or values, +methods, etc. + +=back + +One side effect of these changes is that blessing into "\0" no longer +causes C<ref()> to return false. + +=head2 Threading bugs + +=over + +=item * + +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 * + +Some cases of threads crashing due to memory allocation during cloning have +been fixed [perl #90006]. + +=item * + +Thread joining would sometimes emit "Attempt to free unreferenced scalar" +warnings if C<caller> had been used from the C<DB> package prior to thread +creation [perl #98092]. + +=item * + +Locking a subroutine (via C<lock &sub>) is no longer a compile-time error +for regular subs. For lvalue subroutines, it no longer tries to return the +sub as a scalar, resulting in strange side effects like C<ref \$_> +returning "CODE" in some instances. + +C<lock &sub> is now a run-time error if L<threads::shared> is loaded (a +no-op otherwise), but that may be rectified in a future version. + +=back + +=head2 Tied variables + +=over + +=item * + +Various cases in which FETCH was being ignored or called too many times +have been fixed: + +=over + +=item * + +C<PerlIO::get_layers> [perl #97956] + +=item * + +C<$tied =~ y/a/b/>, C<chop $tied> and C<chomp $tied> when $tied holds a +reference. + +=item * + +When calling C<local $_> [perl #105912] + +=item * + +Four-argument C<select> + +=item * + +A tied buffer passed to C<sysread> + +=item * + +C<< $tied .= <> >> + +=item * + +Three-argument C<open>, the third being a tied file handle +(as in C<< open $fh, ">&", $tied >>) + +=item * + +C<sort> with a reference to a tied glob for the comparison routine. + +=item * + +C<..> and C<...> in list context [perl #53554]. + +=item * + +C<${$tied}>, C<@{$tied}>, C<%{$tied}> and C<*{$tied}> where the tied +variable returns a string (C<&{}> was unaffected) + +=item * + +C<defined ${ $tied_variable }> + +=item * + +Various functions that take a filehandle argument in rvalue context +(C<close>, C<readline>, etc.) [perl #97482] + +=item * + +Some cases of dereferencing a complex expression, such as +C<${ (), $tied } = 1>, used to call C<FETCH> multiple times, but now call +it once. + +=item * + +C<$tied-E<gt>method> where $tied returns a package name--even resulting in +a failure to call the method, due to memory corruption + +=item * + +Assignments like C<*$tied = \&{"..."}> and C<*glob = $tied> + +=item * + +C<chdir>, C<chmod>, C<chown>, C<utime>, C<truncate>, C<stat>, C<lstat> and +the filetest ops (C<-r>, C<-x>, etc.) + +=back + +=item * + +C<caller> 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 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 * + +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]. + +=item * + +Four-argument C<select> no longer produces its "Non-string passed as +bitmask" warning on tied or tainted variables that are strings. + +=item * + +Localising a tied scalar that returns a typeglob no longer stops it from +being tied till the end of the scope. + +=item * + +Attempting to C<goto> out of a tied handle method used to cause memory +corruption or crashes. Now it produces an error message instead +[perl #8611]. + +=item * + +A bug has been fixed that occurs when a tied variable is used as a +subroutine reference: if the last thing assigned to or returned from the +variable was a reference or typeglob, the C<\&$tied> could either crash or +return the wrong subroutine. The reference case is a regression introduced +in Perl 5.10.0. For typeglobs, it has probably never worked till now. + +=back + +=head2 Version objects and vstrings + +=over + +=item * + +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<B::Deparse> to deparse C<~v1.2.3> +incorrectly, without the C<~> [perl #29070]. + +=item * + +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<< version->new("version") >> and C<printf "%vd", "version"> no longer +crash [perl #102586]. + +=item * + +Version comparisons, such as those that happen implicitly with C<use +v5.43>, no longer cause locale settings to change [perl #105784]. + +=item * + +Version objects no longer cause memory leaks in boolean context +[perl #109762]. + +=back + +=head2 Warnings, redefinition + +=over + +=item * + +Subroutines from the C<autouse> 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<autouse> 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<autouse> logic was reversed in +5.10-14. Only subroutines from the C<autouse> namespace would warn +when clobbered.) + +=item * + +C<newCONSTSUB> 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<newCONSTSUB> redefined an existing +subroutine: + + use warnings; + BEGIN { + no warnings; + some_XS_function_that_calls_new_CONSTSUB(); + } + +=item * + +Redefinition warnings for constant subroutines are on by default (what +are known as severe warnings in L<perldiag>). 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 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} + +=back + +=head2 Warnings, "Uninitialized" + +=over + +=item * + +Various functions that take a filehandle argument in rvalue context +(C<close>, C<readline>, etc.) used to warn twice for an undefined handle +[perl #97482]. + +=item * + +C<dbmopen> now only warns once, rather than three times, if the mode +argument is C<undef> [perl #90064]. + +=item * + +The C<+=> operator does not usually warn when the left-hand side is +C<undef>, but it was doing so for tied variables. This has been fixed +[perl #44895]. + +=item * + +A bug fix in Perl 5.14 introduced a new bug, causing "uninitialized" +warnings to report the wrong variable if the operator in question had +two operands and one was C<%{...}> or C<@{...}>. This has been fixed +[perl #103766]. + +=item * + +C<..> and C<...> in list context now mention the name of the variable in +"uninitialized" warnings for string (as opposed to numeric) ranges. + +=back + +=head2 Weak references + +=over + +=item * + +Weakening the first argument to an automatically-invoked C<DESTROY> method +could result in erroneous "DESTROY created new reference" errors or +crashes. Now it is an error to weaken a read-only reference. + +=item * + +Weak references to lexical hashes going out of scope were not going stale +(becoming undefined), but continued to point to the hash. + +=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. + +=item * + +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]. + +=back + +=head2 Other notable fixes + +=over + +=item * + +C<quotemeta> now quotes consistently the same non-ASCII characters under +C<use feature 'unicode_strings'>, regardless of whether the string is +encoded in UTF-8 or not, hence fixing the last vestiges (we hope) of the +infamous L<perlunicode/The "Unicode Bug">. [perl #77654]. + +Which of these code points is quoted has changed, based on Unicode's +recommendations. See L<perlfunc/quotemeta> for details. + +=item * + +When one writes C<open foo || die>, 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 * + +After package aliasing (C<*foo:: = *bar::>), C<select> 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<undef> even when a filehandle +was selected. Now it returns a typeglob reference in such cases. + +=item * + +C<PerlIO::get_layers> 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 * + +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<system> now temporarily blocks the SIGCHLD signal handler, to prevent the +signal handler from stealing the exit status [perl #105700]. + +=item * + +The %n formatting code for C<printf> and C<sprintf>, which causes the number +of characters to be assigned to the next argument, now actually +assigns the number of characters, instead of the number of bytes. + +It also works now with special lvalue functions like C<substr> and with +nonexistent hash and array elements [perl #3471, #103492]. + +=item * + +Perl skips copying values returned from a subroutine, for the sake of +speed, if doing so would make no observable difference. Due to faulty +logic, this would happen with the +result of C<delete>, C<shift> or C<splice>, even if the result was +referenced elsewhere. It also did so with tied variables about to be freed +[perl #91844, #95548]. + +=item * + +C<utf8::decode> now refuses to modify read-only scalars [perl #91850]. + +=item * + +Freeing $_ inside a C<grep> or C<map> block, a code block embedded in a +regular expression, or an @INC filter (a subroutine returned by a +subroutine in @INC) used to result in double frees or crashes +[perl #91880, #92254, #92256]. + +=item * + +C<eval> returns C<undef> in scalar context or an empty list in list +context when there is a run-time error. When C<eval> was passed a +string in list context and a syntax error occurred, 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]. + +=item * + +C<goto &func> no longer 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 * + +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]: + + package Foo; + BEGIN {*Foo:: = *Bar::} + sub foo; + +=item * + +The C<x> repetition operator no longer crashes on 64-bit builds with large +repeat counts [perl #94560]. + +=item * + +Calling C<require> on an implicit C<$_> when C<*CORE::GLOBAL::require> has +been overridden does not segfault anymore, and C<$_> is now passed to the +overriding subroutine [perl #78260]. + +=item * + +C<use> and C<require> are no longer affected by the I/O layers active in +the caller's scope (enabled by L<open.pm|open>) [perl #96008]. + +=item * + +C<our $::é; $é> (which is invalid) no longer produces the "Compilation +error at lib/utf8_heavy.pl..." error message, which it started emitting in +5.10.0 [perl #99984]. + +=item * + +On 64-bit systems, C<read()> now understands large string offsets beyond +the 32-bit range. + +=item * + +Errors that occur when processing subroutine attributes no longer cause the +subroutine's op tree to leak. + +=item * + +Passing the same constant subroutine to both C<index> and C<formline> no +longer causes one or the other to fail [perl #89218]. (5.14.1) + +=item * + +List assignment to lexical variables declared with attributes in the same +statement (C<my ($x,@y) : blimp = (72,94)>) stopped working in Perl 5.8.0. +It has now been fixed. + +=item * + +Perl 5.10.0 introduced some faulty logic that made "U*" in the middle of +a pack template equivalent to "U0" if the input string was empty. This has +been fixed [perl #90160]. + +=item * + +Destructors on objects were not called during global destruction on objects +that were not referenced by any scalars. This could happen if an array +element were blessed (e.g., C<bless \$a[0]>) or if a closure referenced a +blessed variable (C<bless \my @a; sub foo { @a }>). + +Now there is an extra pass during global destruction to fire destructors on +any objects that might be left after the usual passes that check for +objects referenced by scalars [perl #36347]. + +=item * + +Fixed a case where it was possible that a freed buffer may have been read +from when parsing a here document [perl #90128]. (5.14.1) + +=item * + +C<each(I<ARRAY>)> is now wrapped in C<defined(...)>, like C<each(I<HASH>)>, +inside a C<while> condition [perl #90888]. + +=item * + +A problem with context propagation when a C<do> block is an argument to +C<return> has been fixed. It used to cause C<undef> to be returned in +some cases of a C<return> inside an C<if> block which itself is followed by +another C<return>. + +=item * + +Calling C<index> with a tainted constant no longer causes constants in +subsequently compiled code to become tainted [perl #64804]. + +=item * + +Infinite loops like C<1 while 1> used to stop C<strict 'subs'> mode from +working for the rest of the block.t + +=item * + +For list assignments like C<($a,$b) = ($b,$a)>, Perl has to make a copy of +the items on the right-hand side before assignment them to the left. For +efficiency's sake, it assigns the values on the right straight to the items +on the left if no one variable is mentioned on both sides, as in C<($a,$b) = +($c,$d)>. The logic for determining when it can cheat was faulty, in that +C<&&> and C<||> on the right-hand side could fool it. So C<($a,$b) = +$some_true_value && ($b,$a)> would end up assigning the value of C<$b> to +both scalars. + +=item * + +Perl no longer tries to apply lvalue context to the string in +C<("string", $variable) ||= 1> (which used to be an error). Since the +left-hand side of C<||=> is evaluated in scalar context, that's a scalar +comma operator, which gives all but the last item void context. There is +no such thing as void lvalue context, so it was a mistake for Perl to try +to force it [perl #96942]. + +=item * + +C<caller> no longer leaks memory when called from the DB package if +C<@DB::args> was assigned to after the first call to C<caller>. L<Carp> +was triggering this bug [perl #97010]. + +=item * + +C<close> and similar filehandle functions, when called on built-in global +variables (like C<$+>), used to die if the variable happened to hold the +undefined value, instead of producing the usual "Use of uninitialized +value" warning. + +=item * + +When autovivified file handles were introduced in Perl 5.6.0, C<readline> +was inadvertently made to autovivify when called as C<readline($foo)> (but +not as C<E<lt>$fooE<gt>>). It has now been fixed never to autovivify. + +=item * + +Calling an undefined anonymous subroutine (e.g., what $x holds after +C<undef &{$x = sub{}}>) used to cause a "Not a CODE reference" error, which +has been corrected to "Undefined subroutine called" [perl #71154]. + +=item * + +Causing C<@DB::args> to be freed between uses of C<caller> no longer +results in a crash [perl #93320]. + +=item * + +C<setpgrp($foo)> used to be equivalent to C<($foo, setpgrp)>, because +C<setpgrp> was ignoring its argument if there was just one. Now it is +equivalent to C<setpgrp($foo,0)>. + +=item * + +C<shmread> was not setting the scalar flags correctly when reading from +shared memory, causing the existing cached numeric representation in the +scalar to persist [perl #98480]. + +=item * + +C<++> and C<--> now work on copies of globs, instead of dying. + +=item * + +C<splice()> doesn't warn when truncating + +You can now limit the size of an array using C<splice(@a,MAX_LEN)> without +worrying about warnings. + +=item * + +C<< $$ >> is no longer tainted. Since this value comes directly from +C<< getpid() >>, it is always safe. + +=item * + +The parser no longer leaks a filehandle if STDIN was closed before parsing +started [perl #37033]. + +=item * + +C<< die; >> with a non-reference, non-string, or magical (e.g., tainted) +value in $@ now properly propagates that value [perl #111654]. =back -=head1 Obituary +=head1 Known Problems + +=over 4 + +=item * + +On Solaris, we have two kinds of failure. + +If F<make> is Sun's F<make≥>, we get an error about a badly formed macro +assignment in the F<Makefile>. That happens when F<./Configure> tries to +make depends. F<Configure> then exits 0, but further F<make>-ing fails. + +If F<make> is F<gmake>, F<Configure> completes, then we get errors related +to F</usr/include/stdbool.h> + +=item * + +The following CPAN modules have test failures with perl 5.16. Patches have +been submitted for all of these, so hopefully there will be new releases +soon: + +=over + +=item * -XXX If any significant core contributor has died, we've added a short obituary -here. +L<Date::Pcalc> version 6.1 + +=item * + +L<Module::CPANTS::Analyse> version 0.85 + +This fails due to problems in L<Module::Find> 0.10 and L<File::MMagic> +1.27. + +=item * + +L<PerlIO::Util> version 0.72 + +=back + +=back =head1 Acknowledgements XXX Generate this with: - perl Porting/acknowledgements.pl v5.15.9..HEAD + perl Porting/acknowledgements.pl v5.14.0..HEAD =head1 Reporting Bugs If you find what you think is a bug, you might check the articles recently posted to the comp.lang.perl.misc newsgroup and the perl -bug database at http://rt.perl.org/perlbug/ . There may also be -information at http://www.perl.org/ , the Perl Home Page. +bug database at L<http://rt.perl.org/perlbug/>. There may also be +information at L<http://www.perl.org/>, the Perl Home Page. If you believe you have an unreported bug, please run the L<perlbug> program included with your release. Be sure to trim your bug down @@ -372,15 +3662,14 @@ output of C<perl -V>, will be sent off to perlbug@perl.org to be analysed by the Perl porting team. If the bug you are reporting has security implications, which make it -inappropriate to send to a publicly archived mailing list, then please send -it to perl5-security-report@perl.org. This points to a closed subscription -unarchived mailing list, which includes -all the core committers, who will be able -to help assess the impact of issues, figure out a resolution, and help -co-ordinate the release of patches to mitigate or fix the problem across all -platforms on which Perl is supported. Please only use this address for -security issues in the Perl core, not for modules independently -distributed on CPAN. +inappropriate to send to a publicly archived mailing list, then please +send it to perl5-security-report@perl.org. This points to a closed +subscription unarchived mailing list, which includes all the core +committers, who will be able to help assess the impact of issues, figure +out a resolution, and help co-ordinate the release of patches to +mitigate or fix the problem across all platforms on which Perl is +supported. Please only use this address for security issues in the Perl +core, not for modules independently distributed on CPAN. =head1 SEE ALSO diff --git a/vms/descrip_mms.template b/vms/descrip_mms.template index 7f0427b078..98463de58b 100644 --- a/vms/descrip_mms.template +++ b/vms/descrip_mms.template @@ -345,7 +345,7 @@ x2p : [.x2p]$(DBG)a2p$(E) [.x2p]s2p.com [.x2p]find2perl.com extra.pods : miniperl @ @extra_pods.com -PERLDELTA_CURRENT = [.pod]perl51510delta.pod +PERLDELTA_CURRENT = [.pod]perl5160delta.pod $(PERLDELTA_CURRENT) : [.pod]perldelta.pod Copy/NoConfirm/Log $(MMS$SOURCE) $(MMS$TARGET) diff --git a/win32/Makefile b/win32/Makefile index 30618dbbb4..16e2fd90dd 100644 --- a/win32/Makefile +++ b/win32/Makefile @@ -1075,7 +1075,7 @@ utils: $(PERLEXE) $(X2P) copy ..\README.vmesa ..\pod\perlvmesa.pod copy ..\README.vos ..\pod\perlvos.pod copy ..\README.win32 ..\pod\perlwin32.pod - copy ..\pod\perldelta.pod ..\pod\perl51510delta.pod + copy ..\pod\perldelta.pod ..\pod\perl5160delta.pod cd ..\win32 $(PERLEXE) $(PL2BAT) $(UTILS) $(PERLEXE) $(ICWD) ..\autodoc.pl .. @@ -1168,7 +1168,7 @@ distclean: realclean -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API -cd $(PODDIR) && del /f *.html *.bat roffitall \ - perl51510delta.pod perlaix.pod perlamiga.pod perlapi.pod \ + perl5160delta.pod perlaix.pod perlamiga.pod perlapi.pod \ perlbeos.pod perlbs2000.pod perlce.pod perlcn.pod \ perlcygwin.pod perldgux.pod perldos.pod perlepoc.pod \ perlfreebsd.pod perlhaiku.pod perlhpux.pod perlhurd.pod \ diff --git a/win32/makefile.mk b/win32/makefile.mk index 2be7c4e0e9..9e4d33994d 100644 --- a/win32/makefile.mk +++ b/win32/makefile.mk @@ -1261,7 +1261,7 @@ utils: $(PERLEXE) $(X2P) copy ..\README.vmesa ..\pod\perlvmesa.pod copy ..\README.vos ..\pod\perlvos.pod copy ..\README.win32 ..\pod\perlwin32.pod - copy ..\pod\perldelta.pod ..\pod\perl51510delta.pod + copy ..\pod\perldelta.pod ..\pod\perl5160delta.pod $(PERLEXE) $(PL2BAT) $(UTILS) $(PERLEXE) $(ICWD) ..\autodoc.pl .. $(PERLEXE) $(ICWD) ..\pod\perlmodlib.pl -q @@ -1353,7 +1353,7 @@ distclean: realclean -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API -cd $(PODDIR) && del /f *.html *.bat roffitall \ - perl51510delta.pod perlaix.pod perlamiga.pod perlapi.pod \ + perl5160delta.pod perlaix.pod perlamiga.pod perlapi.pod \ perlbeos.pod perlbs2000.pod perlce.pod perlcn.pod \ perlcygwin.pod perldgux.pod perldos.pod perlepoc.pod \ perlfreebsd.pod perlhaiku.pod perlhpux.pod perlhurd.pod \ diff --git a/win32/pod.mak b/win32/pod.mak index 4ef661bcd4..e7bb256ec4 100644 --- a/win32/pod.mak +++ b/win32/pod.mak @@ -26,17 +26,7 @@ POD = perl.pod \ perl5140delta.pod \ perl5141delta.pod \ perl5142delta.pod \ - perl5150delta.pod \ - perl51510delta.pod \ - perl5151delta.pod \ - perl5152delta.pod \ - perl5153delta.pod \ - perl5154delta.pod \ - perl5155delta.pod \ - perl5156delta.pod \ - perl5157delta.pod \ - perl5158delta.pod \ - perl5159delta.pod \ + perl5160delta.pod \ perl561delta.pod \ perl56delta.pod \ perl581delta.pod \ @@ -154,17 +144,7 @@ MAN = perl.man \ perl5140delta.man \ perl5141delta.man \ perl5142delta.man \ - perl5150delta.man \ - perl51510delta.man \ - perl5151delta.man \ - perl5152delta.man \ - perl5153delta.man \ - perl5154delta.man \ - perl5155delta.man \ - perl5156delta.man \ - perl5157delta.man \ - perl5158delta.man \ - perl5159delta.man \ + perl5160delta.man \ perl561delta.man \ perl56delta.man \ perl581delta.man \ @@ -282,17 +262,7 @@ HTML = perl.html \ perl5140delta.html \ perl5141delta.html \ perl5142delta.html \ - perl5150delta.html \ - perl51510delta.html \ - perl5151delta.html \ - perl5152delta.html \ - perl5153delta.html \ - perl5154delta.html \ - perl5155delta.html \ - perl5156delta.html \ - perl5157delta.html \ - perl5158delta.html \ - perl5159delta.html \ + perl5160delta.html \ perl561delta.html \ perl56delta.html \ perl581delta.html \ @@ -410,17 +380,7 @@ TEX = perl.tex \ perl5140delta.tex \ perl5141delta.tex \ perl5142delta.tex \ - perl5150delta.tex \ - perl51510delta.tex \ - perl5151delta.tex \ - perl5152delta.tex \ - perl5153delta.tex \ - perl5154delta.tex \ - perl5155delta.tex \ - perl5156delta.tex \ - perl5157delta.tex \ - perl5158delta.tex \ - perl5159delta.tex \ + perl5160delta.tex \ perl561delta.tex \ perl56delta.tex \ perl581delta.tex \ |