Perl Changelog

What's new in Perl 5.21.0 Dev

May 28, 2014
  • Updated Modules and Pragmata:
  • feature has been upgraded from version 1.36 to 1.37.
  • Module::CoreList has been upgraded from version 3.10 to 5.021001.
  • Removed Modules and Pragmata:
  • CGI has been removed from the core. It is still available on the CPAN.
  • Module::Build has been removed from the core. It is still available on the CPAN.
  • Package::Constants has been removed from the core. It is still available on the CPAN.

New in Perl 5.20.0 (May 27, 2014)

  • CORE ENHANCEMENTS:
  • Experimental Subroutine signatures:
  • Declarative syntax to unwrap argument list into lexical variables. sub foo ($a,$b) {...} checks the number of arguments and puts the arguments into lexical variables. Signatures are not equivalent to the existing idiom of sub foo { my($a,$b) = @_; ... }. Signatures are only available by enabling a non-default feature, and generate warnings about being experimental. The syntactic clash with prototypes is managed by disabling the short prototype syntax when signatures are enabled.
  • subs now take a prototype attribute:
  • When declaring or defining a sub, the prototype can now be specified inside of a prototype attribute instead of in parens following the name.
  • For example, sub foo($$){} could be rewritten as sub foo : prototype($$){}.
  • More consistent prototype parsing:
  • Multiple semicolons in subroutine prototypes have long been tolerated and treated as a single semicolon. There was one case where this did not happen. A subroutine whose prototype begins with "*" or ";*" can affect whether a bareword is considered a method name or sub call. This now applies also to ";;;*".
  • Whitespace has long been allowed inside subroutine prototypes, so sub( $ $ ) is equivalent to sub($$), but until now it was stripped when the subroutine was parsed. Hence, whitespace was not allowed in prototypes set by Scalar::Util::set_prototype. Now it is permitted, and the parser no longer strips whitespace. This means prototype &mysub returns the original prototype, whitespace and all.
  • rand now uses a consistent random number generator:
  • Previously perl would use a platform specific random number generator, varying between the libc rand(), random() or drand48().
  • This meant that the quality of perl's random numbers would vary from platform to platform, from the 15 bits of rand() on Windows to 48-bits on POSIX platforms such as Linux with drand48().
  • Perl now uses its own internal drand48() implementation on all platforms. This does not make perl's rand cryptographically secure. [perl #115928]
  • New slice syntax:
  • The new %hash{...} and %array[...] syntax returns a list of key/value (or index/value) pairs. See "Key/Value Hash Slices" in perldata.
  • Experimental Postfix Dereferencing:
  • When the postderef feature is in effect, a number of syntactical equivalencies are set up.
  • Unicode 6.3 now supported:
  • Perl now supports and is shipped with Unicode 6.3 (though Perl may be recompiled with any previous Unicode release as well). A detailed list of Unicode 6.3 changes is at http://www.unicode.org/versions/Unicode6.3.0/.
  • New \p{Unicode} regular expression pattern property:
  • This is a synonym for \p{Any} and matches the set of Unicode-defined code points 0 - 0x10FFFF.
  • Better 64-bit support:
  • On 64-bit platforms, the internal array functions now use 64-bit offsets, allowing Perl arrays to hold more than 2**31 elements, if you have the memory available.
  • The regular expression engine now supports strings longer than 2**31 characters. [perl #112790, #116907]
  • The functions PerlIO_get_bufsiz, PerlIO_get_cnt, PerlIO_set_cnt and PerlIO_set_ptrcnt now have SSize_t, rather than int, return values and parameters.
  • use locale now works on UTF-8 locales:
  • Until this release, only single-byte locales, such as the ISO 8859 series were supported. Now, the increasingly common multi-byte UTF-8 locales are also supported. A UTF-8 locale is one in which the character set is Unicode and the encoding is UTF-8. The POSIX LC_CTYPE category operations (case changing (like lc(), "\U"), and character classification (\w, \D, qr/[[:punct:]]/)) under such a locale work just as if not under locale, but instead as if under use feature 'unicode_strings', except taint rules are followed. Sorting remains by code point order in this release. [perl #56820].
  • use locale now compiles on systems without locale ability:
  • Previously doing this caused the program to not compile. Within its scope the program behaves as if in the "C" locale. Thus programs written for platforms that support locales can run on locale-less platforms without change. Attempts to change the locale away from the "C" locale will, of course, fail.
  • More locale initialization fallback options:
  • If there was an error with locales during Perl start-up, it immediately gave up and tried to use the "C" locale. Now it first tries using other locales given by the environment variables, as detailed in "ENVIRONMENT" in perllocale. For example, if LC_ALL and LANG are both set, and using the LC_ALL locale fails, Perl will now try the LANG locale, and only if that fails, will it fall back to "C". On Windows machines, Perl will try, ahead of using "C", the system default locale if all the locales given by environment variables fail.
  • -DL runtime option now added for tracing locale setting:
  • This is designed for Perl core developers to aid in field debugging bugs regarding locales.
  • -F now implies -a and -a implies -n:
  • Previously -F without -a was a no-op, and -a without -n or -p was a no-op, with this change, if you supply -F then both -a and -n are implied and if you supply -a then -n is implied.
  • You can still use -p for its extra behaviour. [perl #116190]
  • $a and $b warnings exemption:
  • The special variables $a and $b, used in sort, are now exempt from "used once" warnings, even where sort is not used. This makes it easier for CPAN modules to provide functions using $a and $b for similar purposes. [perl #120462]
  • SECURITY:
  • Avoid possible read of free()d memory during parsing:
  • It was possible that free()d memory could be read during parsing in the unusual circumstance of the Perl program ending with a heredoc and the last line of the file on disk having no terminating newline character. This has now been fixed.
  • INCOMPATIBLE CHANGES:
  • do can no longer be used to call subroutines:
  • The do SUBROUTINE(LIST) form has resulted in a deprecation warning since Perl v5.0.0, and is now a syntax error.
  • Quote-like escape changes:
  • The character after \c in a double-quoted string ("..." or qq(...)) or regular expression must now be a printable character and may not be {.
  • A literal { after \B or \b is now fatal.
  • These were deprecated in perl v5.14.0.
  • Tainting happens under more circumstances; now conforms to documentation:
  • This affects regular expression matching and changing the case of a string (lc, "\U", etc.) within the scope of use locale. The result is now tainted based on the operation, no matter what the contents of the string were, as the documentation (perlsec, "SECURITY" in perllocale) indicates it should. Previously, for the case change operation, if the string contained no characters whose case change could be affected by the locale, the result would not be tainted. For example, the result of uc() on an empty string or one containing only above-Latin1 code points is now tainted, and wasn't before. This leads to more consistent tainting results. Regular expression patterns taint their non-binary results (like $&, $2) if and only if the pattern contains elements whose matching depends on the current (potentially tainted) locale. Like the case changing functions, the actual contents of the string being matched now do not matter, whereas formerly it did. For example, if the pattern contains a \w, the results will be tainted even if the match did not have to use that portion of the pattern to succeed or fail, because what a \w matches depends on locale. However, for example, a . in a pattern will not enable tainting, because the dot matches any single character, and what the current locale is doesn't change in any way what matches and what doesn't.
  • \p{}, \P{} matching has changed for non-Unicode code points.:
  • \p{} and \P{} are defined by Unicode only on Unicode-defined code points (U+0000 through U+10FFFF). Their behavior on matching these legal Unicode code points is unchanged, but there are changes for code points 0x110000 and above. Previously, Perl treated the result of matching \p{} and \P{} against these as undef, which translates into "false". For \P{}, this was then complemented into "true". A warning was supposed to be raised when this happened. However, various optimizations could prevent the warning, and the results were often counter-intuitive, with both a match and its seeming complement being false. Now all non-Unicode code points are treated as typical unassigned Unicode code points. This generally is more Do-What-I-Mean. A warning is raised only if the results are arguably different from a strict Unicode approach, and from what Perl used to do. Code that needs to be strictly Unicode compliant can make this warning fatal, and then Perl always raises the warning.
  • Details are in "Beyond Unicode code points" in perlunicode.
  • \p{All} has been expanded to match all possible code points:
  • The Perl-defined regular expression pattern element \p{All}, unused on CPAN, used to match just the Unicode code points; now it matches all possible code points; that is, it is equivalent to qr/./s. Thus \p{All} is no longer synonymous with \p{Any}, which continues to match just the Unicode code points, as Unicode says it should.
  • Data::Dumper's output may change:
  • Depending on the data structures dumped and the settings set for Data::Dumper, the dumped output may have changed from previous versions.
  • If you have tests that depend on the exact output of Data::Dumper, they may fail.
  • To avoid this problem in your code, test against the data structure from evaluating the dumped structure, instead of the dump itself.
  • Locale decimal point character no longer leaks outside of use locale scope:
  • This is actually a bug fix, but some code has come to rely on the bug being present, so this change is listed here. The current locale that the program is running under is not supposed to be visible to Perl code except within the scope of a use locale. However, until now under certain circumstances, the character used for a decimal point (often a comma) leaked outside the scope. If your code is affected by this change, simply add a use locale.
  • Assignments of Windows sockets error codes to $! now prefer errno.h values over WSAGetLastError() values:
  • In previous versions of Perl, Windows sockets error codes as returned by WSAGetLastError() were assigned to $!, and some constants such as ECONNABORTED, not in errno.h in VC++ (or the various Windows ports of gcc) were defined to corresponding WSAE* values to allow $! to be tested against the E* constants exported by Errno and POSIX.
  • This worked well until VC++ 2010 and later, which introduced new E* constants with values > 100 into errno.h, including some being (re)defined by perl to WSAE* values. That caused problems when linking XS code against other libraries which used the original definitions of errno.h constants.
  • To avoid this incompatibility, perl now maps WSAE* error codes to E* values where possible, and assigns those values to $!. The E* constants exported by Errno and POSIX are updated to match so that testing $! against them, wherever previously possible, will continue to work as expected, and all E* constants found in errno.h are now exported from those modules with their original errno.h values.
  • In order to avoid breakage in existing Perl code which assigns WSAE* values to $!, perl now intercepts the assignment and performs the same mapping to E* values as it uses internally when assigning to $! itself.
  • However, one backwards-incompatibility remains: existing Perl code which compares $! against the numeric values of the WSAE* error codes that were previously assigned to $! will now be broken in those cases where a corresponding E* value has been assigned instead. This is only an issue for those E* values < 100, which were always exported from Errno and POSIX with their original errno.h values, and therefore could not be used for WSAE* error code tests (e.g. WSAEINVAL is 10022, but the corresponding EINVAL is 22). (E* values > 100, if present, were redefined to WSAE* values anyway, so compatibility can be achieved by using the E* constants, which will work both before and after this change, albeit using different numeric values under the hood.)
  • Functions PerlIO_vsprintf and PerlIO_sprintf have been removed:
  • These two functions, undocumented, unused in CPAN, and problematic, have been removed.
  • DEPRECATIONS:
  • The /\C/ character class:
  • The /\C/ regular expression character class is deprecated. From perl 5.22 onwards it will generate a warning, and from perl 5.24 onwards it will be a regular expression compiler error. If you need to examine the individual bytes that make up a UTF8-encoded character, then use utf8::encode() on the string (or a copy) first.
  • Literal control characters in variable names:
  • This deprecation affects things like $\cT, where \cT is a literal control (such as a NAK or NEGATIVE ACKNOWLEDGE character) in the source code. Surprisingly, it appears that originally this was intended as the canonical way of accessing variables like $^T, with the caret form only being added as an alternative.
  • The literal control form is being deprecated for two main reasons. It has what are likely unfixable bugs, such as $\cI not working as an alias for $^I, and their usage not being portable to non-ASCII platforms: While $^T will work everywhere, \cT is whitespace in EBCDIC. [perl #119123]
  • References to non-integers and non-positive integers in $/:
  • Setting $/ to a reference to zero or a reference to a negative integer is now deprecated, and will behave exactly as though it was set to undef. If you want slurp behavior set $/ to undef explicitly.
  • Setting $/ to a reference to a non integer is now forbidden and will throw an error. Perl has never documented what would happen in this context and while it used to behave the same as setting $/ to the address of the references in future it may behave differently, so we have forbidden this usage.
  • Character matching routines in POSIX:
  • Use of any of these functions in the POSIX module is now deprecated: isalnum, isalpha, iscntrl, isdigit, isgraph, islower, isprint, ispunct, isspace, isupper, and isxdigit. The functions are buggy and don't work on UTF-8 encoded strings. See their entries in POSIX for more information.
  • A warning is raised on the first call to any of them from each place in the code that they are called. (Hence a repeated statement in a loop will raise just the one warning.)
  • Interpreter-based threads are now discouraged:
  • The "interpreter-based threads" provided by Perl are not the fast, lightweight system for multitasking that one might expect or hope for. Threads are implemented in a way that make them easy to misuse. Few people know how to use them correctly or will be able to provide help.
  • The use of interpreter-based threads in perl is officially discouraged.
  • Module removals:
  • The following modules will be removed from the core distribution in a future release, and will at that time need to be installed from CPAN. Distributions on CPAN which require these modules will need to list them as prerequisites.
  • The core versions of these modules will now issue "deprecated"-category warnings to alert you to this fact. To silence these deprecation warnings, install the modules in question from CPAN.
  • Note that the planned removal of these modules from core does not reflect a judgement about the quality of the code and should not be taken as a suggestion that their use be halted. Their disinclusion from core primarily hinges on their necessity to bootstrapping a fully functional, CPAN-capable Perl installation, not on concerns over their design.
  • Utility removals:
  • The following utilities will be removed from the core distribution in a future release, and will at that time need to be installed from CPAN.
  • Performance Enhancements:
  • Perl has a new copy-on-write mechanism that avoids the need to copy the internal string buffer when assigning from one scalar to another. This makes copying large strings appear much faster. Modifying one of the two (or more) strings after an assignment will force a copy internally. This makes it unnecessary to pass strings by reference for efficiency.
This feature was already available in 5.18.0, but wasn't enabled by default.
  • On some operating systems Perl can be compiled in such a way that any attempt to modify string buffers shared by multiple SVs will crash. This way XS authors can test that their modules handle copy-on-write scalars correctly.
  • Perl has an optimizer for regular expression patterns. It analyzes the pattern to find things such as the minimum length a string has to be to match, etc. It now better handles code points that are above the Latin1 range.
  • Executing a regex that contains the ^ anchor (or its variant under the /m flag) has been made much faster in several situations.
  • Precomputed hash values are now used in more places during method lookup.
  • Constant hash key lookups ($hash{key} as opposed to $hash{$key}) have long had the internal hash value computed at compile time, to speed up lookup. This optimisation has only now been applied to hash slices as well.
  • Combined and and or operators in void context, like those generated for unless ($a && $b) and if ($a || b) now short circuit directly to the end of the statement. [perl #120128]
  • The creation of certain sorts of lists, including array and hash slices, is now faster.
  • The optimisation for arrays indexed with a small constant integer is now applied for integers in the range -128..127, rather than 0..255. This should speed up Perl code using expressions like $x[-1], at the expense of (presumably much rarer) code using expressions like $x[200].
  • The first iteration over a large hash (using keys or each) is now faster. This is achieved by preallocating the hash's internal iterator state, rather than lazily creating it when the hash is first iterated. (For small hashes, the iterator is still created only when first needed. The assumption is that small hashes are more likely to be used as objects, and therefore never allocated. For large hashes, that's less likely to be true, and the cost of allocating the iterator is swamped by the cost of allocating space for the hash itself.)
  • When doing a global regex match on a string that came from the readline or operator, the data is no longer copied unnecessarily. [perl #121259]
  • Dereferencing (as in $obj->[0] or $obj->{k}) is now faster when $obj is an instance of a class that has overloaded methods, but doesn't overload any of the dereferencing methods @{}, %{}, and so on.
  • Perl's optimiser no longer skips optimising code that follows certain eval {} expressions (including those with an apparent infinite loop).
  • The implementation now does a better job of avoiding meaningless work at runtime. Internal effect-free "null" operations (created as a side-effect of parsing Perl programs) are normally deleted during compilation. That deletion is now applied in some situations that weren't previously handled.
  • Perl now does less disk I/O when dealing with Unicode properties that cover up to three ranges of consecutive code points.
  • MODULES AND PRAGMATA:
  • New Modules and Pragmata:
  • experimental 0.007 has been added to the Perl core.
  • IO::Socket::IP 0.29 has been added to the Perl core.
  • Updated Modules and Pragmata:
  • Archive::Tar has been upgraded from version 1.90 to 1.96.
  • arybase has been upgraded from version 0.06 to 0.07.
  • Attribute::Handlers has been upgraded from version 0.94 to 0.96.
  • attributes has been upgraded from version 0.21 to 0.22.
  • autodie has been upgraded from version 2.13 to 2.23.
  • AutoLoader has been upgraded from version 5.73 to 5.74.
  • autouse has been upgraded from version 1.07 to 1.08.
  • B has been upgraded from version 1.42 to 1.48.
  • B::Concise has been upgraded from version 0.95 to 0.992.
  • B::Debug has been upgraded from version 1.18 to 1.19.
  • B::Deparse has been upgraded from version 1.20 to 1.26.
  • base has been upgraded from version 2.18 to 2.22.
  • Benchmark has been upgraded from version 1.15 to 1.18.
  • bignum has been upgraded from version 0.33 to 0.37.
  • Carp has been upgraded from version 1.29 to 1.3301.
  • CGI has been upgraded from version 3.63 to 3.65. NOTE: CGI is deprecated and may be removed from a future version of Perl.
  • charnames has been upgraded from version 1.36 to 1.40.
  • Class::Struct has been upgraded from version 0.64 to 0.65.
  • Compress::Raw::Bzip2 has been upgraded from version 2.060 to 2.064.
  • Compress::Raw::Zlib has been upgraded from version 2.060 to 2.065.
  • Config::Perl::V has been upgraded from version 0.17 to 0.20.
  • constant has been upgraded from version 1.27 to 1.31.
  • CPAN has been upgraded from version 2.00 to 2.05.
  • CPAN::Meta has been upgraded from version 2.120921 to 2.140640.
  • CPAN::Meta::Requirements has been upgraded from version 2.122 to 2.125.
  • CPAN::Meta::YAML has been upgraded from version 0.008 to 0.012.
  • Data::Dumper has been upgraded from version 2.145 to 2.151.
  • DB has been upgraded from version 1.04 to 1.07.
  • DB_File has been upgraded from version 1.827 to 1.831.
  • DBM_Filter has been upgraded from version 0.05 to 0.06.
  • deprecate has been upgraded from version 0.02 to 0.03.
  • Devel::Peek has been upgraded from version 1.11 to 1.16.
  • Devel::PPPort has been upgraded from version 3.20 to 3.21.
  • diagnostics has been upgraded from version 1.31 to 1.34.
  • Digest::MD5 has been upgraded from version 2.52 to 2.53.
  • Digest::SHA has been upgraded from version 5.84 to 5.88.
  • DynaLoader has been upgraded from version 1.18 to 1.25.
  • Encode has been upgraded from version 2.49 to 2.60.
  • encoding has been upgraded from version 2.6_01 to 2.12.
  • English has been upgraded from version 1.06 to 1.09.
  • Errno has been upgraded from version 1.18 to 1.20_03.
  • Exporter has been upgraded from version 5.68 to 5.70.
  • ExtUtils::CBuilder has been upgraded from version 0.280210 to 0.280216.
  • ExtUtils::Command has been upgraded from version 1.17 to 1.18.
  • ExtUtils::Embed has been upgraded from version 1.30 to 1.32.
  • ExtUtils::Install has been upgraded from version 1.59 to 1.67.
  • ExtUtils::MakeMaker has been upgraded from version 6.66 to 6.98.
  • ExtUtils::Miniperl has been upgraded from version to 1.01.
  • ExtUtils::ParseXS has been upgraded from version 3.18 to 3.24.
  • ExtUtils::Typemaps has been upgraded from version 3.19 to 3.24.
  • ExtUtils::XSSymSet has been upgraded from version 1.2 to 1.3.
  • feature has been upgraded from version 1.32 to 1.36.
  • fields has been upgraded from version 2.16 to 2.17.
  • File::Basename has been upgraded from version 2.84 to 2.85.
  • File::Copy has been upgraded from version 2.26 to 2.29.
  • File::DosGlob has been upgraded from version 1.10 to 1.12.
  • File::Fetch has been upgraded from version 0.38 to 0.48.
  • File::Find has been upgraded from version 1.23 to 1.27.
  • File::Glob has been upgraded from version 1.20 to 1.23.
  • File::Spec has been upgraded from version 3.40 to 3.47.
  • File::Temp has been upgraded from version 0.23 to 0.2304.
  • FileCache has been upgraded from version 1.08 to 1.09.
  • Filter::Simple has been upgraded from version 0.89 to 0.91.
  • Filter::Util::Call has been upgraded from version 1.45 to 1.49.
  • Getopt::Long has been upgraded from version 2.39 to 2.42.
  • Getopt::Std has been upgraded from version 1.07 to 1.10.
  • Hash::Util::FieldHash has been upgraded from version 1.10 to 1.15.
  • HTTP::Tiny has been upgraded from version 0.025 to 0.043.
  • I18N::Langinfo has been upgraded from version 0.10 to 0.11.
  • I18N::LangTags has been upgraded from version 0.39 to 0.40.
  • if has been upgraded from version 0.0602 to 0.0603.
  • inc::latest has been upgraded from version 0.4003 to 0.4205. NOTE: inc::latest is deprecated and may be removed from a future version of Perl.
  • integer has been upgraded from version 1.00 to 1.01.
  • IO has been upgraded from version 1.28 to 1.31.
  • IO::Compress::Gzip and friends have been upgraded from version 2.060 to 2.064.
  • IPC::Cmd has been upgraded from version 0.80 to 0.92.
  • IPC::Open3 has been upgraded from version 1.13 to 1.16.
  • IPC::SysV has been upgraded from version 2.03 to 2.04.
  • JSON::PP has been upgraded from version 2.27202 to 2.27203.
  • List::Util has been upgraded from version 1.27 to 1.38.
  • locale has been upgraded from version 1.02 to 1.03.
  • Locale::Codes has been upgraded from version 3.25 to 3.30.
  • Locale::Maketext has been upgraded from version 1.23 to 1.25.
  • Math::BigInt has been upgraded from version 1.9991 to 1.9993.
  • Math::BigInt::FastCalc has been upgraded from version 0.30 to 0.31.
  • Math::BigRat has been upgraded from version 0.2604 to 0.2606.
  • MIME::Base64 has been upgraded from version 3.13 to 3.14.
  • Module::Build has been upgraded from version 0.4003 to 0.4205. NOTE: Module::Build is deprecated and may be removed from a future version of Perl.
  • Module::CoreList has been upgraded from version 2.89 to 3.10.
  • Module::Load has been upgraded from version 0.24 to 0.32.
  • Module::Load::Conditional has been upgraded from version 0.54 to 0.62.
  • Module::Metadata has been upgraded from version 1.000011 to 1.000019.
  • mro has been upgraded from version 1.11 to 1.16.
  • Net::Ping has been upgraded from version 2.41 to 2.43.
  • Opcode has been upgraded from version 1.25 to 1.27.
  • Package::Constants has been upgraded from version 0.02 to 0.04. NOTE: Package::Constants is deprecated and may be removed from a future version of Perl.
  • Params::Check has been upgraded from version 0.36 to 0.38.
  • parent has been upgraded from version 0.225 to 0.228.
  • Parse::CPAN::Meta has been upgraded from version 1.4404 to 1.4414.
  • Perl::OSType has been upgraded from version 1.003 to 1.007.
  • perlfaq has been upgraded from version 5.0150042 to 5.0150044.
  • PerlIO has been upgraded from version 1.07 to 1.09.
  • PerlIO::encoding has been upgraded from version 0.16 to 0.18.
  • PerlIO::scalar has been upgraded from version 0.16 to 0.18.
  • PerlIO::via has been upgraded from version 0.12 to 0.14.
  • Pod::Escapes has been upgraded from version 1.04 to 1.06.
  • Pod::Functions has been upgraded from version 1.06 to 1.08.
  • Pod::Html has been upgraded from version 1.18 to 1.21.
  • Pod::Parser has been upgraded from version 1.60 to 1.62.
  • Pod::Perldoc has been upgraded from version 3.19 to 3.23.
  • Pod::Usage has been upgraded from version 1.61 to 1.63.
  • POSIX has been upgraded from version 1.32 to 1.38_03.
  • re has been upgraded from version 0.23 to 0.26.
  • Safe has been upgraded from version 2.35 to 2.37.
  • Scalar::Util has been upgraded from version 1.27 to 1.38.
  • SDBM_File has been upgraded from version 1.09 to 1.11.
  • Socket has been upgraded from version 2.009 to 2.013.
  • Storable has been upgraded from version 2.41 to 2.49.
  • strict has been upgraded from version 1.07 to 1.08.
  • subs has been upgraded from version 1.01 to 1.02.
  • Sys::Hostname has been upgraded from version 1.17 to 1.18.
  • Sys::Syslog has been upgraded from version 0.32 to 0.33.
  • Term::Cap has been upgraded from version 1.13 to 1.15.
  • Term::ReadLine has been upgraded from version 1.12 to 1.14.
  • Test::Harness has been upgraded from version 3.26 to 3.30.
  • Test::Simple has been upgraded from version 0.98 to 1.001002.
  • Text::ParseWords has been upgraded from version 3.28 to 3.29.
  • Text::Tabs has been upgraded from version 2012.0818 to 2013.0523.
  • Text::Wrap has been upgraded from version 2012.0818 to 2013.0523.
  • Thread has been upgraded from version 3.02 to 3.04.
  • Thread::Queue has been upgraded from version 3.02 to 3.05.
  • threads has been upgraded from version 1.86 to 1.93.
  • threads::shared has been upgraded from version 1.43 to 1.46.
  • Tie::Array has been upgraded from version 1.05 to 1.06.
  • Tie::File has been upgraded from version 0.99 to 1.00.
  • Tie::Hash has been upgraded from version 1.04 to 1.05.
  • Tie::Scalar has been upgraded from version 1.02 to 1.03.
  • Tie::StdHandle has been upgraded from version 4.3 to 4.4.
  • Time::HiRes has been upgraded from version 1.9725 to 1.9726.
  • Time::Piece has been upgraded from version 1.20_01 to 1.27.
  • Unicode::Collate has been upgraded from version 0.97 to 1.04.
  • Unicode::Normalize has been upgraded from version 1.16 to 1.17.
  • Unicode::UCD has been upgraded from version 0.51 to 0.57.
  • utf8 has been upgraded from version 1.10 to 1.13.
  • version has been upgraded from version 0.9902 to 0.9908.
  • vmsish has been upgraded from version 1.03 to 1.04.
  • warnings has been upgraded from version 1.18 to 1.23.
  • Win32 has been upgraded from version 0.47 to 0.49.
  • XS::Typemap has been upgraded from version 0.10 to 0.13.
  • XSLoader has been upgraded from version 0.16 to 0.17.
  • DOCUMENTATION:
  • New Documentation:
  • perlrepository
  • This document was removed (actually, renamed perlgit and given a major overhaul) in Perl v5.14, causing Perl documentation websites to show the now out of date version in Perl v5.12 as the latest version. It has now been restored in stub form, directing readers to current information.
  • Changes to Existing Documentation:
  • perldata:
  • New sections have been added to document the new index/value array slice and key/value hash slice syntax.
  • perldebguts:
  • The DB::goto and DB::lsub debugger subroutines are now documented. [perl #77680]
  • perlexperiment:
  • \s matching \cK is marked experimental.
  • ithreads were accepted in v5.8.0 (but are discouraged as of v5.20.0).
  • Long doubles are not considered experimental.
  • Code in regular expressions, regular expression backtracking verbs, and lvalue subroutines are no longer listed as experimental. (This also affects perlre and perlsub.)
  • perlfunc:
  • chop and chomp now note that they can reset the hash iterator.
  • exec's handling of arguments is now more clearly documented.
  • eval EXPR now has caveats about expanding floating point numbers in some locales.
  • goto EXPR is now documented to handle an expression that evalutes to a code reference as if it was goto &$coderef. This behavior is at least ten years old.
  • Since Perl v5.10, it has been possible for subroutines in @INC to return a reference to a scalar holding initial source code to prepend to the file. This is now documented.
  • The documentation of ref has been updated to recommend the use of blessed, isa and reftype when dealing with references to blessed objects.
  • perlguts:
  • Numerous minor changes have been made to reflect changes made to the perl internals in this release.
  • New sections on Read-Only Values and Copy on Write have been added.
  • perlhack:
  • The Super Quick Patch Guide section has been updated.
  • perlhacktips:
  • The documentation has been updated to include some more examples of gdb usage.
  • perllexwarn:
  • The perllexwarn documentation used to describe the hierarchy of warning categories understood by the warnings pragma. That description has now been moved to the warnings documentation itself, leaving perllexwarn as a stub that points to it. This change consolidates all documentation for lexical warnings in a single place.
  • perllocale:
  • The documentation now mentions fc() and \F, and includes many clarifications and corrections in general.
  • perlop:
  • The language design of Perl has always called for monomorphic operators. This is now mentioned explicitly.
  • perlopentut:
  • The open tutorial has been completely rewritten by Tom Christiansen, and now focuses on covering only the basics, rather than providing a comprehensive reference to all things openable. This rewrite came as the result of a vigorous discussion on perl5-porters kicked off by a set of improvements written by Alexander Hartmaier to the existing perlopentut. A "more than you ever wanted to know about open" document may follow in subsequent versions of perl.
  • perlre:
  • The fact that the regexp engine makes no effort to call (?{}) and (??{}) constructs any specified number of times (although it will basically DWIM in case of a successful match) has been documented.
  • The /r modifier (for non-destructive substitution) is now documented. [perl #119151]
  • The documentation for /x and (?# comment) has been expanded and clarified.
  • perlreguts:
  • The documentation has been updated in the light of recent changes to regcomp.c.
  • perlsub:
  • The need to predeclare recursive functions with prototypes in order for the prototype to be honoured in the recursive call is now documented. [perl #2726]
  • A list of subroutine names used by the perl implementation is now included. [perl #77680]
  • perltrap:
  • There is now a JavaScript section.
  • perlunicode:
  • The documentation has been updated to reflect Bidi_Class changes in Unicode 6.3.
  • perlvar:
  • A new section explaining the performance issues of $`, $& and $', including workarounds and changes in different versions of Perl, has been added.
  • Three English variable names which have long been documented but do not actually exist have been removed from the documentation. These were $OLD_PERL_VERSION, $OFMT, and $ARRAY_BASE.
  • perlxs:
  • Several problems in the MY_CXT example have been fixed.
  • 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 perldiag.
  • New Diagnostics:
  • New Errors:
  • delete argument is index/value array slice, use array slice
(F) You used index/value array slice syntax (%array[...]) as the argument to delete. You probably meant @array[...] with an @ symbol instead.
  • delete argument is key/value hash slice, use hash slice
(F) You used key/value hash slice syntax (%hash{...}) as the argument to delete. You probably meant @hash{...} with an @ symbol instead.
  • Magical list constants are not supported
(F) You assigned a magical array to a stash element, and then tried to use the subroutine from the same slot. You are asking Perl to do something it cannot do, details subject to change between Perl versions.
  • Added Setting $/ to a %s reference is forbidden
  • New Warnings:
  • %s on reference is experimental:
The "auto-deref" feature is experimental.
Starting in v5.14.0, it was possible to use push, pop, keys, and other built-in functions not only on aggregate types, but on references to them. The feature was not deployed to its original intended specification, and now may become redundant to postfix dereferencing. It has always been categorized as an experimental feature, and in v5.20.0 is carries a warning as such.
Warnings will now be issued at compile time when these operations are detected.
  • no if $] >= 5.01908, warnings => "experimental::autoderef";

  • 

Consider, though, replacing the use of these features, as they may change behavior again before becoming stable.
  • A sequence of multiple spaces in a charnames alias definition is deprecated
Trailing white-space in a charnames alias definition is deprecated
These two deprecation warnings involving \N{...} were incorrectly implemented. They did not warn by default (now they do) and could not be made fatal via use warnings FATAL => 'deprecated' (now they can).
  • Attribute prototype(%s) discards earlier prototype attribute in same sub
(W misc) A sub was declared as sub foo : prototype(A) : prototype(B) {}, for example. Since each sub can only have one prototype, the earlier declaration(s) are discarded while the last one is applied.
  • Invalid \0 character in %s for %s: %s\0%s
(W syscalls) Embedded \0 characters in pathnames or other system call arguments produce a warning as of 5.20. The parts after the \0 were formerly ignored by system calls.
  • Matched non-Unicode code point 0x%X against Unicode property; may not be portable.
This replaces the message "Code point 0x%X is not Unicode, all \p{} matches fail; all \P{} matches succeed".
  • Missing ']' in prototype for %s : %s
(W illegalproto) A grouping was started with [ but never closed with ].
  • Possible precedence issue with control flow operator
(W syntax) There is a possible problem with the mixing of a control flow operator (e.g. return) and a low-precedence operator like or.
  • Postfix dereference is experimental
(S experimental::postderef) This warning is emitted if you use the experimental postfix dereference syntax.
  • Prototype '%s' overridden by attribute 'prototype(%s)' in %s
(W prototype) A prototype was declared in both the parentheses after the sub name and via the prototype attribute. The prototype in parentheses is useless, since it will be replaced by the prototype from the attribute before it's ever used.
  • Scalar value @%s[%s] better written as $%s[%s]
(W syntax) In scalar context, you've used an array index/value slice (indicated by %) to select a single element of an array. Generally it's better to ask for a scalar value (indicated by $). The difference is that $foo[&bar] always behaves like a scalar, both in the value it returns and when evaluating its argument, while %foo[&bar] provides a list context to its subscript, which can do weird things if you're expecting only one subscript. When called in list context, it also returns the index (what &bar returns) in addition to the value.
  • Scalar value @%s{%s} better written as $%s{%s}
(W syntax) In scalar context, you've used a hash key/value slice (indicated by %) to select a single element of a hash. Generally it's better to ask for a scalar value (indicated by $). The difference is that $foo{&bar} always behaves like a scalar, both in the value it returns and when evaluating its argument, while @foo{&bar} and provides a list context to its subscript, which can do weird things if you're expecting only one subscript. When called in list context, it also returns the key in addition to the value.
  • Setting $/ to a reference to %s as a form of slurp is deprecated, treating as undef
  • Unexpected exit %u
(S) exit() was called or the script otherwise finished gracefully when PERL_EXIT_WARN was set in PL_exit_flags.
  • Unexpected exit failure %d
(S) An uncaught die() was called when PERL_EXIT_WARN was set in PL_exit_flags.
  • Use of literal control characters in variable names is deprecated
(D deprecated) Using literal control characters in the source to refer to the ^FOO variables, like $^X and ${^GLOBAL_PHASE} is now deprecated. This only affects code like $\cT, where \cT is a control (like a SOH) in the source code: ${"\cT"} and $^T remain valid.
  • Useless use of greediness modifier
This fixes [Perl #42957].
  • Changes to Existing Diagnostics:
  • Warnings and errors from the regexp engine are now UTF-8 clean.
  • The "Unknown switch condition" error message has some slight changes. This error triggers when there is an unknown condition in a (?(foo)) conditional. The error message used to read:
  • Unknown switch condition (?(%s in regex;

  • But what %s could be was mostly up to luck. For (?(foobar)), you might have seen "fo" or "f". For Unicode characters, you would generally get a corrupted string. The message has been changed to read:
  • The "%s "\x%X" does not map to Unicode" warning is now correctly listed as a severe warning rather than as a fatal error.
  • Under rare circumstances, one could get a "Can't coerce readonly REF to string" instead of the customary "Modification of a read-only value". This alternate error message has been removed.
  • "Ambiguous use of * resolved as operator *": This and similar warnings about "%" and "&" used to occur in some circumstances where there was no operator of the type cited, so the warning was completely wrong. This has been fixed [perl #117535, #76910].
  • Warnings about malformed subroutine prototypes are now more consistent in how the prototypes are rendered. Some of these warnings would truncate prototypes containing nulls. In other cases one warning would suppress another. The warning about illegal characters in prototypes no longer says "after '_'" if the bad character came before the underscore.
  • Perl folding rules are not up-to-date for 0x%X; please use the perlbug utility to report; in regex; marked by bar). In some cases it could cause the method to be called on the wrong handle. Now a typeglob argument is treated as a handle (just like (\*foo)->bar), or, if its IO slot is empty, an error is raised.
  • Assigning a vstring to a tied variable or to a subroutine argument aliased to a nonexistent hash or array element now works, without flattening the vstring into a regular string.
  • pos, tie, tied and untie did not work properly on subroutine arguments aliased to nonexistent hash and array elements [perl #77814, #27010].
  • The => fat arrow operator can now quote built-in keywords even if it occurs on the next line, making it consistent with how it treats other barewords.
  • Autovivifying a subroutine stub via \&$glob started causing crashes in Perl 5.18.0 if the $glob was merely a copy of a real glob, i.e., a scalar that had had a glob assigned to it. This has been fixed. [perl #119051]
  • Perl used to leak an implementation detail when it came to referencing the return values of certain operators. for ($a+$b) { warn \$_; warn \$_ } used to display two different memory addresses, because the \ operator was copying the variable. Under threaded builds, it would also happen for constants (for(1) { ... }). This has been fixed. [perl #21979, #78194, #89188, #109746, #114838, #115388]
  • The range operator .. was returning the same modifiable scalars with each call, unless it was the only thing in a foreach loop header. This meant that changes to values within the list returned would be visible the next time the operator was executed. [perl #3105]
  • Constant folding and subroutine inlining no longer cause operations that would normally return new modifiable scalars to return read-only values instead.
  • Closures of the form sub () { $some_variable } are no longer inlined, causing changes to the variable to be ignored by callers of the subroutine. [perl #79908]
  • Return values of certain operators such as ref would sometimes be shared between recursive calls to the same subroutine, causing the inner call to modify the value returned by ref in the outer call. This has been fixed.
  • __PACKAGE__ and constants returning a package name or hash key are now consistently read-only. In various previous Perl releases, they have become mutable under certain circumstances.
  • Enabling "used once" warnings no longer causes crashes on stash circularities created at compile time (*Foo::Bar::Foo:: = *Foo::).
  • Undef constants used in hash keys (use constant u => undef; $h{+u}) no longer produce "uninitialized" warnings at compile time.
  • Modifying a substitution target inside the substitution replacement no longer causes crashes.
  • The first statement inside a string eval used to use the wrong pragma setting sometimes during constant folding. eval 'uc chr 0xe0' would randomly choose between Unicode, byte, and locale semantics. This has been fixed.
  • The handling of return values of @INC filters (subroutines returned by subroutines in @INC) has been fixed in various ways. Previously tied variables were mishandled, and setting $_ to a reference or typeglob could result in crashes.
  • The SvPVbyte XS function has been fixed to work with tied scalars returning something other than a string. It used to return utf8 in those cases where SvPV would.
  • Perl 5.18.0 inadvertently made -- and ++ crash on dereferenced regular expressions, and stopped ++ from flattening vstrings.
  • bless no longer dies with "Can't bless non-reference value" if its first argument is a tied reference.
  • reset with an argument no longer skips copy-on-write scalars, regular expressions, typeglob copies, and vstrings. Also, when encountering those or read-only values, it no longer skips any array or hash with the same name.
  • reset with an argument now skips scalars aliased to typeglobs (for $z (*foo) { reset "z" }). Previously it would corrupt memory or crash.
  • ucfirst and lcfirst were not respecting the bytes pragma. This was a regression from Perl 5.12. [perl #117355]
  • Changes to UNIVERSAL::DESTROY now update DESTROY caches in all classes, instead of causing classes that have already had objects destroyed to continue using the old sub. This was a regression in Perl 5.18. [perl #114864]
  • All known false-positive occurrences of the deprecation warning "Useless use of '\'; doesn't escape metacharacter '%c'", added in Perl 5.18.0, have been removed. [perl #119101]
  • The value of $^E is now saved across signal handlers on Windows. [perl #85104]
  • A lexical filehandle (as in open my $fh...) is usually given a name based on the current package and the name of the variable, e.g. "main::$fh". Under recursion, the filehandle was losing the "$fh" part of the name. This has been fixed.
  • Uninitialized values returned by XSUBs are no longer exempt from uninitialized warnings. [perl #118693]
  • elsif ("") no longer erroneously produces a warning about void context. [perl #118753]
  • Passing undef to a subroutine now causes @_ to contain the same read-only undefined scalar that undef returns. Furthermore, exists $_[0] will now return true if undef was the first argument. [perl #7508, #109726]
  • Passing a non-existent array element to a subroutine does not usually autovivify it unless the subroutine modifies its argument. This did not work correctly with negative indices and with non-existent elements within the array. The element would be vivified immediately. The delayed vivification has been extended to work with those. [perl #118691]
  • Assigning references or globs to the scalar returned by $#foo after the @foo array has been freed no longer causes assertion failures on debugging builds and memory leaks on regular builds.
  • On 64-bit platforms, large ranges like 1..1000000000000 no longer crash, but eat up all your memory instead. [perl #119161]
  • __DATA__ now puts the DATA handle in the right package, even if the current package has been renamed through glob assignment.
  • When die, last, next, redo, goto and exit unwind the scope, it is possible for DESTROY recursively to call a subroutine or format that is currently being exited. It that case, sometimes the lexical variables inside the sub would start out having values from the outer call, instead of being undefined as they should. This has been fixed. [perl #119311]
  • ${^MPEN} is no longer treated as a synonym for ${^MATCH}.
  • Perl now tries a little harder to return the correct line number in (caller)[2]. [perl #115768]
  • Line numbers inside multiline quote-like operators are now reported correctly. [perl #3643]
  • #line directives inside code embedded in quote-like operators are now respected.
  • Line numbers are now correct inside the second here-doc when two here-doc markers occur on the same line.
  • An optimization in Perl 5.18 made incorrect assumptions causing a bad interaction with the Devel::CallParser CPAN module. If the module was loaded then lexical variables declared in separate statements following a my(...) list might fail to be cleared on scope exit.
  • &xsub and goto &xsub calls now allow the called subroutine to autovivify elements of @_.
  • &xsub and goto &xsub no longer crash if *_ has been undefined and has no ARRAY entry (i.e. @_ does not exist).
  • &xsub and goto &xsub now work with tied @_.
  • Overlong identifiers no longer cause a buffer overflow (and a crash). They started doing so in Perl 5.18.
  • The warning "Scalar value @hash{foo} better written as $hash{foo}" now produces far fewer false positives. In particular, @hash{+function_returning_a_list} and @hash{ qw "foo bar baz" } no longer warn. The same applies to array slices. [perl #28380, #114024]
  • $! = EINVAL; waitpid(0, WNOHANG); no longer goes into an internal infinite loop. [perl #85228]
  • A possible segmentation fault in filehandle duplication has been fixed.
  • A subroutine in @INC can return a reference to a scalar containing the initial contents of the file. However, that scalar was freed prematurely if not referenced elsewhere, giving random results.
  • last no longer returns values that the same statement has accumulated so far, fixing amongst other things the long-standing bug that push @a, last would try to return the @a, copying it like a scalar in the process and resulting in the error, "Bizarre copy of ARRAY in last." [perl #3112]
  • In some cases, closing file handles opened to pipe to or from a process, which had been duplicated into a standard handle, would call perl's internal waitpid wrapper with a pid of zero. With the fix for [perl #85228] this zero pid was passed to waitpid, possibly blocking the process. This wait for process zero no longer occurs. [perl #119893]
  • select used to ignore magic on the fourth (timeout) argument, leading to effects such as select blocking indefinitely rather than the expected sleep time. This has now been fixed. [perl #120102]
  • The class name in for my class $foo is now parsed correctly. In the case of the second character of the class name being followed by a digit (e.g. 'a1b') this used to give the error "Missing $ on loop variable". [perl #120112]
  • Perl 5.18.0 accidentally disallowed -bareword under use strict and use integer. This has been fixed. [perl #120288]
  • -a at the start of a line (or a hyphen with any single letter that is not a filetest operator) no longer produces an erroneous 'Use of "-a" without parentheses is ambiguous' warning. [perl #120288]
  • Lvalue context is now properly propagated into bare blocks and if and else blocks in lvalue subroutines. Previously, arrays and hashes would sometimes incorrectly be flattened when returned in lvalue list context, or "Bizarre copy" errors could occur. [perl #119797]
  • Lvalue context is now propagated to the branches of || and && (and their alphabetic equivalents, or and and). This means foreach (pos $x || pos $y) {...} now allows pos to be modified through $_.
  • stat and readline remember the last handle used; the former for the special _ filehandle, the latter for ${^LAST_FH}. eval "*foo if 0" where *foo was the last handle passed to stat or readline could cause that handle to be forgotten if the handle were not opened yet. This has been fixed.
  • Various cases of delete $::{a}, delete $::{ENV} etc. causing a crash have been fixed. [perl #54044]
  • Setting $! to EACCESS before calling require could affect require's behaviour. This has been fixed.
  • The "Can't use \1 to mean $1 in expression" warning message now only occurs on the right-hand (replacement) part of a substitution. Formerly it could happen in code embedded in the left-hand side, or in any other quote-like operator.
  • Blessing into a reference (bless $thisref, $thatref) has long been disallowed, but magical scalars for the second like $/ and those tied were exempt. They no longer are. [perl #119809]
  • Blessing into a reference was accidentally allowed in 5.18 if the class argument were a blessed reference with stale method caches (i.e., whose class had had subs defined since the last method call). They are disallowed once more, as in 5.16.
  • $x->{key} where $x was declared as my Class $x no longer crashes if a Class::FIELDS subroutine stub has been declared.
  • @$obj{'key'} and ${$obj}{key} used to be exempt from compile-time field checking ("No such class field"; see fields) but no longer are.
  • A nonexistent array element with a large index passed to a subroutine that ties the array and then tries to access the element no longer results in a crash.
  • Declaring a subroutine stub named NEGATIVE_INDICES no longer makes negative array indices crash when the current package is a tied array class.
  • Declaring a require, glob, or do subroutine stub in the CORE::GLOBAL:: package no longer makes compilation of calls to the corresponding functions crash.
  • Aliasing CORE::GLOBAL:: functions to constants stopped working in Perl 5.10 but has now been fixed.
  • When `...` or qx/.../ calls a readpipe override, double-quotish interpolation now happens, as is the case when there is no override. Previously, the presence of an override would make these quote-like operators act like q{}, suppressing interpolation. [perl #115330]

New in Perl 5.18.2 (Jan 7, 2014)

  • Changes to Existing Documentation:
  • perlrepository has been restored with a pointer to more useful pages.
  • perlhack has been updated with the latest changes from blead.
  • Selected Bug Fixes:
  • Perl 5.18.1 introduced a regression along with a bugfix for lexical subs. Some B::SPECIAL results from B::CV::GV became undefs instead. This broke Devel::Cover among other libraries. This has been fixed. [perl #119351]
  • Perl 5.18.0 introduced a regression whereby [:^ascii:], if used in the same character class as other qualifiers, would fail to match characters in the Latin-1 block. This has been fixed. [perl #120799]
  • Perl 5.18.0 introduced a regression when using ->SUPER::method with AUTOLOAD by looking up AUTOLOAD from the current package, rather than the current package’s superclass. This has been fixed. [perl #120694]
  • Perl 5.18.0 introduced a regression whereby -bareword was no longer permitted under the strict and integer pragmata when used together. This has been fixed. [perl #120288]
  • Previously PerlIOBase_dup didn't check if pushing the new layer succeeded before (optionally) setting the utf8 flag. This could cause segfaults-by-nullpointer. This has been fixed.
  • A buffer overflow with very long identifiers has been fixed.
  • A regression from 5.16 in the handling of padranges led to assertion failures if a keyword plugin declined to handle the second ‘my’, but only after creating a padop. This affected, at least, Devel::CallParser under threaded builds. This has been fixed
  • The construct $r=qr/.../; /$r/p is now handled properly, an issue which had been worsened by changes 5.18.0. [perl #118213]

New in Perl 5.18.1 (Aug 13, 2013)

  • Updated Modules and Pragmata:B has been upgraded from 1.42 to 1.42_01, fixing bugs related to lexical subroutines.Digest::SHA has been upgraded from 5.84 to 5.84_01, fixing a crashing bug. [RT #118649]Module::CoreList has been upgraded from 2.89 to 2.96.
  • Selected Bug Fixes:
  • Starting in v5.18.0, a construct like /[#](?{})/x would have its # incorrectly interpreted as a comment. The code block would be skipped, unparsed. This has been corrected.
  • A number of memory leaks related to the new, experimental regexp bracketed character class feature have been plugged.
  • The OP allocation code now returns correctly aligned memory in all cases for struct pmop. Previously it could return memory only aligned to a 4-byte boundary, which is not correct for an ithreads build with 64 bit IVs on some 32 bit platforms. Notably, this caused the build to fail completely on sparc GNU/Linux. [RT #118055]
  • The debugger's man command been fixed. It was broken in the v5.18.0 release. The man command is aliased to the names doc and perldoc - all now work again.
  • @_ is now correctly visible in the debugger, fixing a regression introduced in v5.18.0's debugger. [RT #118169]
  • Fixed a small number of regexp constructions that could either fail to match or crash perl when the string being matched against was allocated above the 2GB line on 32-bit systems. [RT #118175]
  • Perl v5.16 inadvertently introduced a bug whereby calls to XSUBs that were not visible at compile time were treated as lvalues and could be assigned to, even when the subroutine was not an lvalue sub. This has been fixed. [perl #117947]
  • Perl v5.18 inadvertently introduced a bug whereby dual-vars (i.e. variables with both string and numeric values, such as $! ) where the truthness of the variable was determined by the numeric value rather than the string value. [RT #118159]
  • Perl v5.18 inadvertently introduced a bug whereby interpolating mixed up- and down-graded UTF-8 strings in a regex could result in malformed UTF-8 in the pattern: specifically if a downgraded character in the range \x80..\xff followed a UTF-8 string, e.g.utf8::upgrade( my $u = "\x{e5}");utf8::downgrade(my $d = "\x{e5}");/$u$d/
  • [perl #118297].
  • Lexical constants (my sub a() { 42 }) no longer crash when inlined.
  • Parameter prototypes attached to lexical subroutines are now respected when compiling sub calls without parentheses. Previously, the prototypes were honoured only for calls with parentheses. [RT #116735]
  • Syntax errors in lexical subroutines in combination with calls to the same subroutines no longer cause crashes at compile time.
  • The dtrace sub-entry probe now works with lexical subs, instead of crashing [perl #118305].
  • Undefining an inlinable lexical subroutine (my sub foo() { 42 } undef &foo) would result in a crash if warnings were turned on.
  • Deep recursion warnings no longer crash lexical subroutines. [RT #118521]