=encoding utf8
-=for comment
-This has been completed up to c60dbbc38, except for:
-d9018cbe5b480ba29cc6151aba8f5102a7e009c4 (Eric Brine)
- -- while I (use git blame to find out who) see how this change within
- lex_read_unichar is correct, I cannot tell at a glance what visible
- effects this bug has at the Perl level or through the lexer API.
-a04eb69c733e84250299f12df200f10b76b0a45c (David Golden)
-7a799f6bb3cac2e1bf9bede83579324cffa59c16 (David Golden)
-be48bbe8d671b6841c3ec7cb734b98071afe3cd9 (Chip)
-0bda3001dd6310abfca950134ed78f6192d3d8a7 (Karl Williamson)
-
=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.4
+perldelta - what is new for perl v5.15.5
=head1 DESCRIPTION
-This document describes differences between the 5.15.3 release and
-the 5.15.4 release.
+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<perl5153delta>, which describes differences between 5.15.3 and
+L<perl5154delta>, which describes differences between 5.15.3 and
5.15.4.
-=head1 Notice
-
-XXX Any important notices here
-
=head1 Core Enhancements
-=head2 $^X converted to an absolute path on FreeBSD, OS X and Solaris
+=head2 More consistent C<eval>
-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).
+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.
-This makes relocatable perl installations more useful on these platforms.
-(See "Relocatable @INC" in F<INSTALL>)
+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.
-=head2 Unicode Symbol Names
+These features also fix oddities with source filters leaking to outer
+dynamic scopes.
-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:
+See L<feature> for more detail.
-=over
+=head2 C<$[> is back
-=item *
+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>.
-Method names (including those passed to C<use overload>)
+The new implementation has some bug fixes. See L<arybase>.
-=item *
+=head1 Security
-Typeglob names (including names of variables, subroutines and filehandles)
+=head2 Privileges are now set correctly when assigning to C<$(>
-=item *
+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.
-Package names
+=head1 Incompatible Changes
-=item *
+=head2 Certain deprecated Unicode properties are no longer supported by default
-Constant subroutine names (not nul-clean yet)
+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.
-=item *
+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>.
-C<goto>
+=head2 Dereferencing IO thingies as typeglobs
-=item *
+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.
-Symbolic dereferencing
+Previously, it would stringify as an empty string, but some operators would
+treat it as undefined, producing an "uninitialized" warning.
-=item *
+Having a typeglob appear as an empty string is a side effect of the
+implementation that has caused various bugs over the years.
-Second argument to C<bless()> and C<tie()>
+The solution was to make it stringify like a normal anonymous typeglob,
+like those produced by C<< open($foo->{bar}, ...) >> [perl #96326].
-=item *
+=head1 Deprecations
-Return value of C<ref()>
+=head2 Don't read the Unicode data base files in F<lib/unicore>
-=item *
+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.)
-Package names returned by C<caller()>
+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.
-=item *
+=head1 Performance Enhancements
-Subroutine prototypes
+=over 4
=item *
-Attributes
+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.
-=item *
-
-Various warnings and error messages that mention variable names or values,
-methods, etc.
+This does not affect VMS, as it does not use File::Glob.
=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.
+=head1 Modules and Pragmata
-C<*{"*a::b"}> automatically strips off the * if it is followed by an ASCII
-letter. That has been extended to all Unicode identifier characters.
+=head2 New Modules and Pragmata
-C<$é> is now subject to "Used only once" warnings. It used to be exempt,
-as it was treated as a punctuation variable.
+=over 4
-=head2 Support for Embedded Nuls
+=item *
-Some parts of Perl did not work correctly with nuls (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 nuls:
+L<arybase> -- this new module implements the C<$[> variable.
-=over
+=back
-=item *
+=head2 Updated Modules and Pragmata
-Method names
+=over 4
=item *
-Typeglob names (including filehandle names)
+L<Archive::Extract> has been upgraded from version 0.56 to version 0.58.
=item *
-Package names
+L<B::Concise> has been upgraded from version 0.86 to version 0.87.
=item *
-Autoloading
-
-=item *
+L<B::Deparse> has been upgraded from version 1.08 to version 1.09.
-Return value of C<ref()>
+It now correctly deparses C<CORE::do>, C<CORE::glob> and slices of empty
+lists.
=item *
-Package names returned by C<caller()>
+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 *
-Filehandle warnings
+L<charnames> has been upgraded from version 1.23 to version 1.24.
=item *
-Typeglob elements (C<*foo{"THING\0stuff"}>)
+L<Compress::Raw::Bzip2> has been upgraded from version 2.037 to version 2.042.
=item *
-Signal names
+L<Compress::Raw::Zlib> has been upgraded from version 2.037 to version 2.042.
=item *
-Various warnings and error messages that mention variable names or values,
-methods, etc.
+L<Compress::Zlib> has been upgraded from version 2.037 to version 2.042.
-=back
+=item *
-One side effect of these changes is that blessing into "\0" no longer
-causes C<ref()> to return false.
+L<CPANPLUS> has been upgraded from version 0.9111 to version 0.9112.
-=head1 Security
+=item *
-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.
+L<CPANPLUS::Dist::Build> has been upgraded from version 0.58 to version 0.60.
-[ List each security issue as a =head2 entry ]
+=item *
-=head1 Incompatible Changes
+L<Digest::SHA> has been upgraded from version 5.62 to version 5.63.
-XXX For a release on a stable branch, this section aspires to be:
+Added code to allow very large data inputs all at once, which had previously been
+limited to several hundred megabytes at a time
- There are no changes intentionally incompatible with 5.XXX.XXX
- If any exist, they are bugs and reports are welcome.
+=item *
-[ List each incompatible change as a =head2 entry ]
+L<Errno> has been upgraded from version 1.14 to version 1.15.
-=head1 Deprecations
+Choosing an archname containing a @, $ or % character no longer results in
+unintended interpolation in Errno's architecture check.
-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.
+=item *
-[ List each deprecation as a =head2 entry ]
+L<ExtUtils::MakeMaker> has been upgraded from version 6.61_01 to version 6.63_02.
-=head1 Performance Enhancements
+=item *
-XXX Changes which enhance performance without changing behaviour go here. There
-may well be none in a stable release.
+L<feature> has been upgraded from version 1.22 to version 1.23.
-[ List each enhancement as a =item entry ]
+=item *
-=over 4
+L<File::DosGlob> has been upgraded from version 1.05 to version 1.06.
=item *
-XXX
+L<File::Glob> has been upgraded from version 1.13 to version 1.14.
-=back
+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.
-=head1 Modules and Pragmata
+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>.
-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.
+=item *
-[ Within each section, list entries as a =item entry ]
+L<HTTP::Tiny> has been upgraded from version 0.013 to version 0.016.
-=head2 New Modules and Pragmata
-
-=over 4
+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 *
-XXX
+L<Module::CoreList> has been upgraded from version 2.57 to version 2.58.
-=back
-
-=head2 Updated Modules and Pragmata
+=item *
-=over 4
+L<Opcode> has been upgraded from version 1.20 to version 1.21.
=item *
-L<perlfaq> has been upgraded from version 5.0150034 to version 5.0150035.
+L<perlfaq> has been upgraded from version 5.0150035 to version 5.0150036.
=item *
-L<Digest> has been upgraded from version 1.16 to version 1.17.
+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<DynaLoader> has been upgraded from version 1.13 to 1.14.
+L<Storable> has been upgraded from version 2.32 to 2.33.
-It stopped exporting its symbols with the ExtUtils::ParseXS changes in
-5.15.2. Now it exports them once more.
+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<ExtUtils::MakeMaker> has been upgraded from version 6.59 to version 6.61_01.
+L<strict> has been upgraded from version 1.04 to version 1.05.
=item *
-L<ExtUtils::ParseXS> has been upgraded from version 3.04_04 to version 3.05.
+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<Module::Load> has been upgraded from version 0.20 to version 0.22.
+L<Unicode::UCD> has been upgraded from version 0.36 to version 0.37.
-Resolve possible security problem [http://goo.gl/YzHRU] where a '::' prefixed
-module can 'jump' out of @INC
+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<Unicode::Collate> has been upgraded from version 0.78 to version 0.79.
+L<UNIVERSAL> has been upgraded from version 1.09 to version 1.10.
=back
-=head2 Removed Modules and Pragmata
-
-=over 4
+=head1 Diagnostics
-=item *
+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
+=head2 New Diagnostics
-=back
+=head3 New Errors
-=head1 Documentation
+=over 4
-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>.
+=item *
-=head2 New Documentation
+L<Source filters apply only to byte streams|perldiag/"Source filters apply only to byte streams">
-XXX Changes which create B<new> files in F<pod/> go here.
+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.
-=head3 L<XXX>
+=item *
-XXX Description of the purpose of the new file here
+L<That use of $[ is unsupported|perldiag/"That use of $[ is unsupported">
-=head2 Changes to Existing Documentation
+This previously removed error has been restored with the re-implementation
+of C<$[> as a module.
-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.
+=back
-=head3 L<perlfunc>, L<open>
+=head3 New Warnings
=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>.
+L<length() used on %s|perldiag/length() used on %s>
-=back
-
-=head1 Diagnostics
+This new warning occurs when C<length> is used on an array or hash, instead
+of C<scalar(@array)> or C<scalar(keys %hash)>.
-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>.
+=item *
-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.
+L<$[ used in %s (did you mean $] ?)|perldiag/"$[ used in %s (did you mean $] ?)">
-[ Within each section, list entries as a =item entry that links to perldiag,
- e.g.
+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 *
+=item *
- L<Invalid version object|perldiag/"Invalid version object">
-]
+L<Use of assignment to $[ is deprecated|perldiag/"Use of assignment to $[ is deprecated">
-=head2 New Diagnostics
+This previously removed warning has been restored with the re-implementation
+of C<$[> as a module.
-XXX Newly added diagnostic messages go here
+=back
-=head3 New Errors
+=head2 Changes to Existing Diagnostics
=over 4
=item *
-XXX L<message|perldiag/"message">
-
-=back
-
-=head3 New Warnings
-
-=over 4
+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 *
-XXX L<message|perldiag/"message">
+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
-=head2 Changes to Existing Diagnostics
-
-XXX Changes (i.e. rewording) of diagnostic messages go here
+=head1 Configuration and Compilation
=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"
-
+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 Utility Changes
+=head1 Platform Support
-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>.
+=head2 Platform-Specific Notes
-[ 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. ]
+=over 4
-=head3 L<XXX>
+=item GNU/Hurd
-=over 4
+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 *
+=item OpenVOS
-XXX
+Perl is now built with dynamic linking on OpenVOS, the minimum supported
+version of which is now Release 17.1.0.
-=back
+=item SunOS
-=head1 Configuration and Compilation
+The CC workshop C++ compiler is now detected and used on systems that ship
+without cc.
-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.
+=back
-[ List changes as a =item entry ].
+=head1 Internal Changes
=over 4
=item *
-XXX
+C<PL_curstash> is now reference-counted.
=back
-=head1 Testing
-
-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.
-
-[ List each test improvement as a =item entry ]
+=head1 Selected Bug Fixes
=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
+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]:
-=head1 Platform Support
+ package Foo;
+ BEGIN {*Foo:: = *Bar::}
+ sub foo;
-XXX Any changes to platform support should be listed in the sections below.
+=item *
-[ Within the sections, list each platform as a =item entry with specific
-changes as paragraphs below it. ]
+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].
-=head2 New Platforms
+=item *
-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.
+The C<x> repetition operator no longer crashes on 64-bit builds with large
+repeat counts [perl #94560].
-=over 4
-
-=item XXX-some-platform
+=item *
-XXX
+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.
-=back
+=item *
-=head2 Discontinued Platforms
+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.
-XXX List any platforms that this version of perl no longer compiles on.
+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].
-=over 4
+=item *
-=item XXX-some-platform
+C<CORE::glob> now works as a way to call the default globbing function. It
+used to respect overrides, despite the C<CORE::> prefix.
-XXX
+=item *
-=back
+In 5.14, C</[[:lower:]]/i> and C</[[:upper:]]/i> no longer matched the
+opposite case. This has been fixed [perl #101970].
-=head2 Platform-Specific Notes
+=item *
-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.
+A regular expression match with an overloaded object on the right-hand side
+would in some cases stringify the object too many times.
-=over 4
+=item *
-=item XXX-some-platform
+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].
-XXX
+=item *
-=back
+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]
-=head1 Internal Changes
+=item *
-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.
+C<@{"..."} = reverse ...> started crashing in 5.15.3. This has been fixed.
-[ List each change as a =item entry ]
+=item *
-=over 4
+C<ref> in a tainted expression started producing an "sv_upgrade" error in
+5.15.4. This has been fixed.
=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
-
-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
-
-=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>.
-
-=back
+Weak references to lexical hashes going out of scope were not going stale
+(becoming undefined), but continued to point to the hash.
-=head1 Selected Bug Fixes
+=item *
-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>.
+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.
-[ List each fix as a =item entry ]
+=item *
-=over 4
+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 *
-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].
+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 *
-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].
+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 *
-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.
+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<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].
+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 *
-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.
+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 *
-Undefining C<%overload::> no longer causes a crash.
+Localising a tied scalar that returns a typeglob no longer stops it from
+being tied till the end of the scope.
=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].
+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).
-=back
+=item *
-=head1 Known Problems
+C<sort> no longer ignores FETCH when passed a reference to a tied glob for
+the comparison routine.
-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 *
-This is a list of some significant unfixed bugs, which are regressions
-from either 5.XXX.XXX or 5.XXX.XXX.
+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.
-[ List each fix as a =item entry ]
+=item *
-=over 4
+C<Internals::SvREFCNT> now behaves consistently in 'get' and 'set' scenarios
+[perl #103222] and also treats the reference count as unsigned.
=item *
-XXX A couple of modules were broken by stdbool.h changes, or was that in
-5.15.3?
+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 Obituary
+=head1 Acknowledgements
-XXX If any significant core contributor has died, we've added a short obituary
-here.
+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.
-=head1 Acknowledgements
+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.
-XXX Generate this with:
+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.
- perl Porting/acknowledgements.pl v5.15.3..HEAD
+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