manpagez: man pages & more
man perl5217delta(1)
Home | html | info | man
PERL5217DELTA(1pm)     Perl Programmers Reference Guide     PERL5217DELTA(1pm)


       perl5217delta - what is new for perl v5.21.7


       This document describes differences between the 5.21.6 release and the
       5.21.7 release.

       If you are upgrading from an earlier release such as 5.21.5, first read
       perl5216delta, which describes differences between 5.21.5 and 5.21.6.

Core Enhancements

   faster array and hash lookups
       Array and hash lookups (especially nested ones) that use only constants
       or simple variables as keys, are now considerably faster. See "Internal
       Changes" for more details.

   "fileno" now works on directory handles
       When the relevant support is available in the operating system, the
       "fileno" builtin now works on directory handles, yielding the
       underlying file descriptor in the same way as for filehandles. On
       operating systems without such support, "fileno" on a directory handle
       continues to return the undefined value, as before, but also sets $! to
       indicate that the operation is not supported.

       Currently, this uses either a "dd_fd" member in the OS "DIR" structure,
       or a dirfd(3) function as specified by POSIX.1-2008.

Incompatible Changes

   "&" and "\&" prototypes accepts only subs
       The "&" prototype character now accepts only anonymous subs ("sub
       {...}") and things beginning with "\&".  Formerly it erroneously also
       allowed "undef" and references to array, hashes, and lists.  [perl
       #4539] [perl #123062]

       The "\&" prototype was allowing subroutine calls, whereas now it only
       allows subroutines.  &foo is permitted.  "&foo()" and "foo()" are not.
       [perl #77860]

   "use encoding" is now lexical
       The encoding pragma's effect is now limited to lexical scope.  This
       pragma is deprecated, but in the meantime, it could adversely affect
       unrelated modules that are included in the same program.

   List slices returning empty lists
       List slices return an empty list now only if the original list was
       empty (or if there are no indices).  Formerly, a list slice would
       return an empty list if all indices fell outside the original list.
       [perl #114498]


   Setting "${^ENCODING}" to anything but "undef"
       This variable allows Perl scripts to be written in a non-ASCII,
       non-UTF-8 encoding.  However, it affects all modules globally, leading
       to wrong answers and segmentation faults.  New scripts should be
       written in UTF-8; old scripts should be converted to UTF-8, which is
       easily done with the encoding pragma.

Performance Enhancements

       o   Win32 Perl uses 8 KB less of per-process memory than before for
           every perl process of this version. This data is now memory mapped
           from disk and shared between perl processes from the same perl

       o   If method and class names are known at compile time, hashes are
           precomputed to speed up run-time method lookup.  Also, compound
           method names like "SUPER::new" are parsed at compile time, to save
           having to parse them at run time.

Modules and Pragmata

   Updated Modules and Pragmata
       o   The PathTools module collection has been upgraded from 3.52 to

           Don't turn leading "//" into "/" on Cygwin. [perl #122635]

       o   Archive::Tar has been upgraded from version 2.02 to 2.04.

       o   arybase has been upgraded from version 0.08 to 0.09.

       o   B has been upgraded from version 1.53 to 1.54.

           Nulled COPs are now of class "B::COP", rather than "B::OP".

           B::REGEXP objects now provide a "qr_anoncv" method for accessing
           the implicit CV associated with "qr//" things containing code
           blocks, and a "compflags" method that returns the pertinent flags
           originating from the "qr//blahblah" op.

           B::PMOP now provides a "pmregexp" method returning a B::REGEXP

           Two new classes, B::PADNAME and B::PADNAMELIST, have been

       o   B::Concise has been upgraded from version 0.995 to 0.996.

       o   B::Deparse has been upgraded from version 1.30 to 1.31.

           BEGIN blocks at the end of the enclosing scope are now deparsed in
           the right place.  [perl #77452]

           BEGIN blocks were sometimes deparsed as __ANON__, but are now
           always called BEGIN.

           Lexical subroutines are now fully deparsed.  [perl #116553]

           Deparsing of "$lexical =~ //" was accidentally broken in 1.30 (perl
           5.21.6), omitting the "$lexical =~", but has now been fixed.

           "Anything =~ y///r" with "/r" no longer omits the left-hand

           The op trees that make up regexp code blocks are now deparsed for
           real.  Formerly, the original string that made up the regular
           expression was used.  That caused problems with
           "qr/(?{<<heredoc})/" and multiline code blocks, which were deparsed
           incorrectly.  [perl #123217] [perl #115256]

           $; at the end of a statement no longer loses its semicolon.  [perl

           Some cases of subroutine declarations stored in the stash in
           shorthand form were being omitted.

           Non-ASCII characters are now consistently escaped in strings,
           instead of some of the time.  (There are still outstanding problems
           with regular expressions and identifiers that have not been fixed.)

           When prototype sub calls are deparsed with "&" (e.g., under the -P
           option), "scalar" is now added where appropriate, to force the
           scalar context implied by the prototype.

           "require(foo())", "do(foo())", "goto(foo())" and similar constructs
           with loop controls are now deparsed correctly.  The outer
           parentheses are not optional.

           Whitespace is no longer escaped in regular expressions, because it
           was getting erroneously escaped within "(?x:...)" sections.

           "sub foo { foo() }" is now deparsed with those mandatory

           "/@array/" is now deparsed as a regular expression, and not just

           "/@{-}/", "/@{+}/" and $#{1} are now deparsed with the braces,
           which are mandatory in these cases.

           In deparsing feature bundles, B::Deparse was emitting "no feature;"
           first instead of "no feature ':all';".  This has been fixed.

           "chdir FH" is now deparsed without quotation marks.

           "\my @a" is now deparsed without parentheses.  (Parenthese would
           flatten the array.)

           "system" and "exec" followed by a block are now deparsed correctly.
           Formerly there was an erroneous "do" before the block.

           "use constant QR => qr/.../flags" followed by """ =~ QR" is no
           longer without the flags.

       o   charnames has been upgraded from version 1.41 to 1.43.

       o   Compress::Raw::Bzip2 has been upgraded from version 2.066 to 2.067.

       o   Compress::Raw::Zlib has been upgraded from version 2.066 to 2.067.

       o   Data::Dumper has been upgraded from version 2.154 to 2.155.

       o   DB_File has been upgraded from version 1.831 to 1.834.

       o   Devel::Peek has been upgraded from version 1.19 to 1.20.

       o   Devel::PPPort has been upgraded from version 3.24 to 3.25.

       o   DynaLoader has been upgraded from version 1.28 to 1.29.

       o   Encode has been upgraded from version 2.64 to 2.67.

       o   Errno has been upgraded from version 1.21 to 1.22.

       o   ExtUtils::CBuilder has been upgraded from version 0.280220 to

       o   ExtUtils::MakeMaker has been upgraded from version 7.02 to 7.04.

       o   ExtUtils::ParseXS has been upgraded from version 3.26 to 3.27.

           Only declare "file" unused if we actually define it.

           Improve generated "RETVAL" code generation to avoid repeated
           references to ST(0).  [perl #123278]

           Broaden and document the "/OBJ$/" to "/REF$/" typemap optimization
           for the "DESTROY" method.  [perl #123418]

       o   feature has been upgraded from version 1.38 to 1.39.

       o   File::Spec has been upgraded from version 3.51 to 3.54.

       o   Filter::Util::Call has been upgraded from version 1.49 to 1.51.

       o   HTTP::Tiny has been upgraded from version 0.051 to 0.053.

       o   IO has been upgraded from version 1.34 to 1.35.

       o   The IO::Compress module collection has been upgraded from version
           2.066 to 2.067.

       o   IO::Socket::IP has been upgraded from version 0.32 to 0.34.

       o   Locale::Codes has been upgraded from version 3.32 to 3.33.

       o   Locale::Maketext has been upgraded from version 1.25 to 1.26.

       o   Module::CoreList has been upgraded from version 5.20141120 to

       o   mro has been upgraded from version 1.16 to 1.17.

       o   NDBM_File has been upgraded from version 1.13 to 1.14.

       o   Opcode has been upgraded from version 1.29 to 1.30.

       o   PerlIO::scalar has been upgraded from version 0.20 to 0.21.

           Reading from a position well past the end of the scalar now
           correctly returns end of file.  [perl #123443]

           Seeking to a negative position still fails, but no longer leaves
           the file position set to a negation location.

           "eof()" on a "PerlIO::scalar" handle now properly returns true when
           the file position is past the 2GB mark on 32-bit systems.

       o   Pod::Escapes has been upgraded from version 1.06 to 1.07.

       o   POSIX has been upgraded from version 1.46 to 1.48.

       o   SDBM_File has been upgraded from version 1.11 to 1.12.

       o   Storable has been upgraded from version 2.51 to 2.52.

       o   strict has been upgraded from version 1.08 to 1.09.

       o   Sys::Hostname has been upgraded from version 1.19 to 1.20.

       o   Test::Simple has been upgraded from version 1.301001_075 to

       o   threads has been upgraded from version 1.96 to 1.96_001.

       o   Unicode::Collate has been upgraded from version 1.07 to 1.09.

       o   XSLoader has been upgraded from version 0.19 to 0.20

           Don't test twice for bootstrap file.


       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.

   Changes to Existing Diagnostics
       o   "Variable %s will not stay shared" has been changed to say
           "Subroutine" when it is actually a lexical sub that will not stay

Platform Support

   Platform-Specific Notes

       o   Intel C builds are now always built with C99 mode on.

Internal Changes

       o   The PADNAME and PADNAMELIST types are now separate types, and no
           longer simply aliases for SV and AV.  [perl #123223]

       o   Pad names are now always UTF8.  The "PadnameUTF8" macro always
           returns true.  Previously, this was effectively the case already,
           but any support for two different internal representations of pad
           names has now been removed.

       o   The "OP_SIBLING" and "OP_HAS_SIBLING" macros added in an earlier
           5.21.x release have been renamed "OpSIBLING" and "OpHAS_SIBLING",
           following the existing convention.

       o   A new op class, "UNOP_AUX", has been added. This is a subclass of
           "UNOP" with an "op_aux" field added, which points to an array of
           unions of "UV", "SV*" etc. It is intended for where an op needs to
           store more data than a simple "op_sv" or whatever. Currently the
           only op of this type is "OP_MULTIDEREF" (see below).

       o   A new op has been added, "OP_MULTIDEREF", which performs one or
           more nested array and hash lookups where the key is a constant or
           simple variable. For example the expression $a[0]{$k}[$i], which
           previously involved ten "rv2Xv", "Xelem", "gvsv" and "const" ops is
           now performed by a single "multideref" op. It can also handle
           "local", "exists" and "delete". A non-simple index expression, such
           as "[$i+1]" is still done using "aelem/helem", and single-level
           array lookup with a small constant index is still done using

Selected Bug Fixes

       o   On Win32, restoring in a child pseudo-process a variable that was
           "local()"ed in a parent pseudo-process before the "fork" happened
           caused memory corruption and a crash in the child pseudo-process
           (and therefore OS process).  [perl #40565]

       o   Calling "write" on a format with a "^**" field could produce a
           panic in sv_chop() if there were insufficient arguments or if the
           variable used to fill the field was empty.  [perl #123245]

       o   Non-ASCII lexical sub names (use in error messages) on longer have
           extra junk on the end.

       o   The "\@" subroutine prototype no longer flattens parenthesized
           arrays (taking a reference to each element), but takes a reference
           to the array itself.  [perl #47363]

       o   A block containing nothing except a C-style "for" loop could
           corrupt the stack, causing lists outside the block to lose elements
           or have elements overwritten.  This could happen with "map {
           for(...){...} } ..." and with lists containing "do { for(...){...}
           }".  [perl #123286]

       o   "scalar()" now propagates lvalue context, so that
           "for(scalar($#foo)) { ... }" can modify $#foo through $_.

       o   "qr/@array(?{block})/" no longer dies with "Bizarre copy of ARRAY".

       o   "eval '$variable'" in nested named subroutines would sometimes look
           up a global variable even with a lexical variable in scope.

       o   In perl 5.20.0, "sort CORE::fake" where 'fake' is anything other
           than a keyword started chopping of the last 6 characters and
           treating the result as a sort sub name.  The previous behaviour of
           treating "CORE::fake" as a sort sub name has been restored.  [perl

       o   Outside of "use utf8", a single-character Latin-1 lexical variable
           is disallowed.  The error message for it, "Can't use global
           $foo...", was giving garbage instead of the variable name.

       o   "readline" on a nonexistent handle was causing "${^LAST_FH}" to
           produce a reference to an undefined scalar (or fail an assertion).
           Now "${^LAST_FH}" ends up undefined.

       o   "(...)x..." in void context now applies scalar context to the left-
           hand argument, instead of the context the current sub was called
           in.  [perl #123020]


       Perl 5.21.7 represents approximately 4 weeks of development since Perl
       5.21.6 and contains approximately 97,000 lines of changes across 640
       files from 30 authors.

       Excluding auto-generated files, documentation and release tools, there
       were approximately 26,000 lines of changes to 400 .pm, .t, .c and .h

       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.21.7:

       Aaron Crane, Aristotle Pagaltzis, Chad Granum, Chris 'BinGOs' Williams,
       Craig A. Berry, Dagfinn Ilmari Mannsaaker, Daniel Dragan, David
       Mitchell, Eric Herman, Father Chrysostomos, H.Merijn Brand, Hugo van
       der Sanden, James Raspass, Jarkko Hietaniemi, Jim Cromie, Karen
       Etheridge, Karl Williamson, kmx, Lukas Mai, Matthew Horsfall, Max
       Maischein, Petr PisaX, Ricardo Signes, Shlomi Fish, Steffen Mueller,
       Steve Hay, Sullivan Beck, syber, Todd Rinaldo, 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 AUTHORS file in the Perl source distribution.

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 .  There may also be information at , the Perl Home Page.

       If you believe you have an unreported bug, please run the 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 "perl -V", will be sent off to 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  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.


       The Changes file for an explanation of how to view exhaustive details
       on what changed.

       The INSTALL file for how to build Perl.

       The README file for general stuff.

       The Artistic and Copying files for copyright information.

perl v5.22.0                      2015-05-13                PERL5217DELTA(1pm)

perl 5.22 - Generated Fri Aug 14 15:26:20 CDT 2015
© 2000-2021
Individual documents may contain additional copyright information.