The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

Changes for version 5.22.0

  • L<[perl #122655]|https://rt.perl.org/Ticket/Display.html?id=122655>
  • =item *
  • Constant folding could incorrectly suppress warnings if lexical warnings (C<use warnings> or C<no warnings>) were not in effect and C<$^W> were false at compile time and true at run time.
  • =item *
  • Loading Unicode tables during a regular expression match could cause assertion failures under debugging builds if the previous match used the very same regular expression. L<[perl #122747]|https://rt.perl.org/Ticket/Display.html?id=122747>
  • =item *
  • Thread cloning used to work incorrectly for lexical subs, possibly causing crashes or double frees on exit.
  • =item *
  • Since Perl 5.14.0, deleting C<$SomePackage::{__ANON__}> and then undefining an anonymous subroutine could corrupt things internally, resulting in L<Devel::Peek> crashing or L<B.pm|B> giving nonsensical data. This has been fixed.
  • =item *
  • S<C<(caller $n)[3]>> now reports names of lexical subs, instead of treating them as C<"(unknown)">.
  • =item *
  • C<sort subname LIST> now supports using a lexical sub as the comparison routine.
  • =item *
  • Aliasing (e.g., via S<C<*x = *y>>) could confuse list assignments that mention the two names for the same variable on either side, causing wrong values to be assigned. L<[perl #15667]|https://rt.perl.org/Ticket/Display.html?id=15667>
  • =item *
  • Long here-doc terminators could cause a bad read on short lines of input. This has been fixed. It is doubtful that any crash could have occurred. This bug goes back to when here-docs were introduced in Perl 3.000 twenty-five years ago.
  • =item *
  • An optimization in C<split> to treat S<C<split /^/>> like S<C<split /^/m>> had the unfortunate side-effect of also treating S<C<split /\A/>> like S<C<split /^/m>>, which it should not. This has been fixed. (Note, however, that S<C<split /^x/>> does not behave like S<C<split /^x/m>>, which is also considered to be a bug and will be fixed in a future version.) L<[perl #122761]|https://rt.perl.org/Ticket/Display.html?id=122761>
  • =item *
  • The little-known S<C<my Class $var>> syntax (see L<fields> and L<attributes>) could get confused in the scope of C<use utf8> if C<Class> were a constant whose value contained Latin-1 characters.
  • =item *
  • Locking and unlocking values via L<Hash::Util> or C<Internals::SvREADONLY> no longer has any effect on values that were read-only to begin with. Previously, unlocking such values could result in crashes, hangs or other erratic behaviour.
  • =item *
  • Some unterminated C<(?(...)...)> constructs in regular expressions would either crash or give erroneous error messages. C</(?(1)/> is one such example.
  • =item *
  • S<C<pack "w", $tied>> no longer calls FETCH twice.
  • =item *
  • List assignments like S<C<($x, $z) = (1, $y)>> now work correctly if C<$x> and C<$y> have been aliased by C<foreach>.
  • =item *
  • Some patterns including code blocks with syntax errors, such as S<C</ (?{(^{})/>>, would hang or fail assertions on debugging builds. Now they produce errors.
  • =item *
  • An assertion failure when parsing C<sort> with debugging enabled has been fixed. L<[perl #122771]|https://rt.perl.org/Ticket/Display.html?id=122771>.
  • =item *
  • S<C<*a = *b; @a = split //, $b[1]>> could do a bad read and produce junk results.
  • =item *
  • In S<C<() = @array = split>>, the S<C<() =>> at the beginning no longer confuses the optimizer into assuming a limit of 1.
  • =item *
  • Fatal warnings no longer prevent the output of syntax errors. L<[perl #122966]|https://rt.perl.org/Ticket/Display.html?id=122966>.
  • =item *
  • Fixed a NaN double-to-long-double conversion error on VMS. For quiet NaNs (and only on Itanium, not Alpha) negative infinity instead of NaN was produced.
  • =item *
  • Fixed the issue that caused C<< make distclean >> to incorrectly leave some files behind. L<[perl #122820]|https://rt.perl.org/Ticket/Display.html?id=122820>.
  • =item *
  • AIX now sets the length in C<< getsockopt >> correctly. L<[perl #120835]|https://rt.perl.org/Ticket/Display.html?id=120835>. L<[cpan #91183]|https://rt.cpan.org/Ticket/Display.html?id=91183>. L<[cpan #85570]|https://rt.cpan.org/Ticket/Display.html?id=85570>.
  • =item *
  • The optimization phase of a regexp compilation could run "forever" and exhaust all memory under certain circumstances; now fixed. L<[perl #122283]|https://rt.perl.org/Ticket/Display.html?id=122283>.
  • =item *
  • The test script F<< t/op/crypt.t >> now uses the SHA-256 algorithm if the default one is disabled, rather than giving failures. L<[perl #121591]|https://rt.perl.org/Ticket/Display.html?id=121591>.
  • =item *
  • Fixed an off-by-one error when setting the size of a shared array. L<[perl #122950]|https://rt.perl.org/Ticket/Display.html?id=122950>.
  • =item *
  • Fixed a bug that could cause perl to enter an infinite loop during compilation. In particular, a C<while(1)> within a sublist, e.g.
    • sub foo { () = ($a, my $b, ($c, do { while(1) {} })) }
  • The bug was introduced in 5.20.0 L<[perl #122995]|https://rt.perl.org/Ticket/Display.html?id=122995>.
  • =item *
  • On Win32, if a variable was C<local>-ized in a pseudo-process that later forked, restoring the original value in the child pseudo-process caused memory corruption and a crash in the child pseudo-process (and therefore the OS process). L<[perl #40565]|https://rt.perl.org/Ticket/Display.html?id=40565>.
  • =item *
  • Calling C<write> on a format with a C<^**> field could produce a panic in C<sv_chop()> if there were insufficient arguments or if the variable used to fill the field was empty. L<[perl #123245]|https://rt.perl.org/Ticket/Display.html?id=123245>.
  • =item *
  • Non-ASCII lexical sub names now appear without trailing junk when they appear in error messages.
  • =item *
  • The C<\@> subroutine prototype no longer flattens parenthesized arrays (taking a reference to each element), but takes a reference to the array itself. L<[perl #47363]|https://rt.perl.org/Ticket/Display.html?id=47363>.
  • =item *
  • A block containing nothing except a C-style C<for> loop could corrupt the stack, causing lists outside the block to lose elements or have elements overwritten. This could happen with C<map { for(...){...} } ...> and with lists containing C<do { for(...){...} }>. L<[perl #123286]|https://rt.perl.org/Ticket/Display.html?id=123286>.
  • =item *
  • C<scalar()> now propagates lvalue context, so that S<C<for(scalar($#foo)) { ... }>> can modify C<$#foo> through C<$_>.
  • =item *
  • C<qr/@array(?{block})/> no longer dies with "Bizarre copy of ARRAY". L<[perl #123344]|https://rt.perl.org/Ticket/Display.html?id=123344>.
  • =item *
  • S<C<eval '$variable'>> in nested named subroutines would sometimes look up a global variable even with a lexical variable in scope.
  • =item *
  • In perl 5.20.0, C<sort CORE::fake> where 'fake' is anything other than a keyword, started chopping off 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. L<[perl #123410]|https://rt.perl.org/Ticket/Display.html?id=123410>.
  • =item *
  • Outside of C<use utf8>, a single-character Latin-1 lexical variable is disallowed. The error message for it, "Can't use global C<$foo>...", was giving garbage instead of the variable name.
  • =item *
  • C<readline> on a nonexistent handle was causing C<${^LAST_FH}> to produce a reference to an undefined scalar (or fail an assertion). Now C<${^LAST_FH}> ends up undefined.
  • =item *
  • C<(...) x ...> in void context now applies scalar context to the left-hand argument, instead of the context the current sub was called in. L<[perl #123020]|https://rt.perl.org/Ticket/Display.html?id=123020>.
  • =back
  • =head1 Known Problems
  • =over 4
  • =item *
  • C<pack>-ing a NaN on a perl compiled with Visual C 6 does not behave properly, leading to a test failure in F<t/op/infnan.t>. L<[perl 125203]|https://rt.perl.org/Ticket/Display.html?id=125203>
  • =item *
  • A goal is for Perl to be able to be recompiled to work reasonably well on any Unicode version. In Perl 5.22, though, the earliest such version is Unicode

Documentation

README for the Porting/ directory in the Perl 5 core distribution.
Compare the performance of perl code snippets across multiple perls.
use git bisect to pinpoint changes
Check that all the URLs in the Perl source are valid
Check source code for ANSI-C violations
list of Perl release epigraphs
expand C macros using the C preprocessor
Annotate commits for perldelta
How to write a perldelta
Notes on handling the Perl Patch Pumpkin And Porting Perl
Releasing a new version of perl 5.x
Perl 5 release schedule
Sort warning and error messages in perldiag.pod
Perl TO-DO list
A post processor for make test.valgrind
autogenerated documentation for the perl public API
access Perl configuration information
lib
manipulate @INC at compile time
Dynamically load C libraries into Perl code
System errno constants
Group Perl's functions a la perlfunc.pod
Test Pod::Functions
convert .pod files to .html files
Test Pod::Html::anchorify()
the
Test HTML cross reference links
Test --htmldir feature
Test --htmldir feature
Test --htmldir feature
Test --htmldir feature
Test --htmldir feature
Test HTML links
Plain Old Documentation: format specification and notes
Perl predefined variables
converts a collection of POD pages to HTML format.
Namespace for Perl's core routines
The tests for Pod::InputObjects
Tests for Pod::Select.
Tests for Pod::Usage
the perl debugger
make patchnum
distribute ppport.h among extensions
The Perl 5 language interpreter
what's new for perl5.004
what's new for perl5.005
what is new for perl 5.10.0
what is new for perl v5.10.1
what is new for perl v5.12.0
what is new for perl v5.12.1
what is new for perl v5.12.2
what is new for perl v5.12.3
what is new for perl v5.12.4
what is new for perl v5.12.5
what is new for perl v5.14.0
what is new for perl v5.14.1
what is new for perl v5.14.2
what is new for perl v5.14.3
what is new for perl v5.14.4
what is new for perl v5.16.0
what is new for perl v5.16.1
what is new for perl v5.16.2
what is new for perl v5.16.3
what is new for perl v5.18.0
what is new for perl v5.18.1
what is new for perl v5.18.2
what is new for perl v5.18.4
what is new for perl v5.20.0
what is new for perl v5.20.1
what is new for perl v5.20.2
what is new for perl v5.21.0
what is new for perl v5.21.10
what is new for perl v5.21.11
what is new for perl v5.21.1
what is new for perl v5.21.2
what is new for perl v5.21.3
what is new for perl v5.21.4
what is new for perl v5.21.5
what is new for perl v5.21.6
what is new for perl v5.21.7
what is new for perl v5.21.8
what is new for perl v5.21.9
what's new for perl v5.6.1
what's new for perl v5.6.0
what is new for perl v5.8.1
what is new for perl v5.8.2
what is new for perl v5.8.3
what is new for perl v5.8.4
what is new for perl v5.8.5
what is new for perl v5.8.6
what is new for perl v5.8.7
what is new for perl v5.8.8
what is new for perl v5.8.9
what is new for perl v5.8.0
perl's IO abstraction interface.
the Perl Artistic License
Books about and related to Perl
Links to information on object-oriented programming in Perl
Links to information on object-oriented programming in Perl
Perl calling conventions from C
Perl 5 Cheat Sheet
Internal replacements for standard C library functions
a brief overview of the Perl community
Perl data types
Perl DBM Filters
Guts of Perl debugging
Perl debugging tutorial
Perl debugging
what is new for perl v5.22.0
various Perl diagnostics
Perl Data Structures Cookbook
Perl's support for DTrace
Considerations for running Perl on EBCDIC platforms
how to embed perl in your C program
A listing of experimental features in Perl
Source Filters
Perl's fork() emulation
Perl formats
Perl builtin functions
Detailed information about git and the Perl repository
the GNU General Public License, version 1
Introduction to the Perl API
How to hack on Perl
Tips for Perl core C code hacking
Walk through the creation of a simple C code patch
the Perl history records
An overview of the Perl interpreter
a brief introduction and overview of Perl
C API for Perl's implementation of IO in Layers.
Perl interprocess communication (signals, fifos, pipes, safe subprocesses, sockets, and semaphores)
Perl Lexical Warnings
Perl locale handling (internationalization and localization)
Manipulating Arrays of Arrays in Perl
Perl modules (packages and symbol tables)
Installing CPAN Modules
constructing new Perl modules and finding existing ones
Perl module style guide
Perl method resolution plugin interface
preparing a new module for distribution
semantics of numbers and numeric operations in Perl
Perl object reference
Object-Oriented Programming in Perl Tutorial
Perl operators and precedence
simple recipes for opening files and pipes in Perl
tutorial on pack and unpack
Perl Performance and Optimization Techniques
the Plain Old Documentation format
Plain Old Documentation: format specification and notes
Perl POD style guide
Various and sundry policies and commitments related to the Perl core
Writing portable Perl
how to write a user pragma
Perl regular expressions
Perl regular expression plugin interface
Perl Regular Expression Backslash Sequences and Escapes
Perl Regular Expression Character Classes
Perl references and nested data structures
Mark's very short tutorial about references
Description of the Perl regular expression engine.
Links to current information on the Perl source repository
Perl regular expressions quick start
Perl Regular Expressions Reference
Perl regular expressions tutorial
how to execute the Perl interpreter
Perl security
A guide to the Perl source tree
Perl style guide
Perl subroutines
Perl syntax
Tutorial on threads in Perl
how to hide an object class in a simple variable
Link to the Perl to-do list
Links to information on object-oriented programming in Perl
Links to information on object-oriented programming in Perl
Perl traps for the unwary
Unicode support in Perl
cookbookish examples of handling Unicode in Perl
Perl Unicode FAQ
Perl Unicode introduction
Perl Unicode Tutorial
utilities packaged with the Perl distribution
Perl predefined variables
VMS-specific documentation for Perl
Perl pragma to enable new features
Generate C macros that match character classes efficiently
Perl pragma to control optional warnings
a C++ base class encapsulating a Perl interpreter in Symbian
a C++ utility class for Perl/Symbian
convert .h C header files to .ph Perl header files
convert .h C header files to Perl extensions
configure libnet
how to submit bug reports on Perl
Perl Installation Verification Procedure
Rough tool to translate Perl4 .pl files to Perl5 .pm modules.

Modules

functions for dealing with RFC3066-style language tags
detect the user's language preferences
tags and names for human languages
IO
load various IO modules
supply object methods for directory handles
supply object methods for filehandles
supply object methods for I/O handles
supply object methods for pipes
Object interface to system poll call
supply seek based methods for I/O objects
OO interface to the select system call
Object interface to socket communications
Object interface for AF_INET domain sockets
Object interface for AF_UNIX domain sockets
B
The Perl Compiler Backend
Walk Perl syntax tree, printing concise info about ops
Show lexical variables used in functions or files
Walk Perl syntax tree, printing terse info about ops
Generates cross reference reports for Perl programs
O
Generic interface to Perl Compiler backends
check optrees as rendered by B::Concise
A data debugging tool for the XS programmer
write the C code for perlmain.c
load the C Fcntl.h defines
DOS like globbing and then some
Traverse a directory tree.
Perl extension for BSD glob routine
keep more files open than the system permits
Perl5 access to the gdbm library.
Support for Inside-Out Classes
A selection of general-utility hash subroutines
query locale information
open a process for both reading and writing using open2()
open a process for reading, writing, and error handling using open3()
Tied access to ndbm files
Tied access to odbm files
Disable named opcodes when compiling perl code
ops
Perl pragma to restrict unsafe operations when compiling
Perl interface to IEEE Std 1003.1
encoding layer
Memory mapped IO
in-memory IO, scalar IO
Helper class for PerlIO layers implemented in perl
module to convert pod files to HTML
Tied access to sdbm files
Try every conceivable way to get hostname
Named regexp capture buffers
add data to hash when needed
Perl extension to manipulate DCL symbols
convert between VMS and Unix file specification syntax
standard I/O functions via VMS extensions
Win32 CORE function stubs
Test the perl C API
module to test the XS typemaps distributed with perl
Set indexing base via $[
get/set subroutine or variable attributes
mro
Method Resolution Order
re
Perl pragma to alter regular expression behaviour
Interfaces to some Haiku API Functions
provide framework for multiple DBMs
Perl compiler backend to produce perl code
OP op_private flag definitions
benchmark running times of Perl code
declare struct-like datatypes as Perl classes
hash lookup of which core extensions were built.
DB
programmatic interface to the Perl debugging API
Filter DBM keys/values
filter for DBM_Filter
filter for DBM_Filter
filter for DBM_Filter
filter for DBM_Filter
filter for DBM_Filter
supply object methods for directory handles
use nice English (or awk) names for ugly punctuation variables
Utilities for embedding Perl in C/C++ applications
keep sets of symbol names palatable to the VMS linker
Parse file paths into directory, filename and suffix.
Compare files or filehandles
Copy files or filehandles
by-name interface to Perl's built-in stat() functions
supply object methods for filehandles
Locate directory of original perl script
by-name interface to Perl's built-in gethost*() functions
by-name interface to Perl's built-in getnet*() functions
by-name interface to Perl's built-in getproto*() functions
by-name interface to Perl's built-in getserv*() functions
On demand loader for PerlIO layers and root of PerlIO::* name space
save and restore selected file handle
manipulate Perl symbols and their names
Manipulate threads in Perl (for old code only)
base class for tied arrays
base class definitions for tied handles
base class definitions for tied handles
Fixed-table-size, fixed-key-length hashing
by-name interface to Perl's built-in gmtime() function
by-name interface to Perl's built-in localtime() function
internal object used by Time::gmtime and Time::localtime
base class for ALL classes (blessed references)
Unicode character database
by-name interface to Perl's built-in getgr*() functions
by-name interface to Perl's built-in getpw*() functions
Use MakeMaker's uninstalled version of a package
Perl pragma to force byte semantics rather than character semantics
access to Unicode character names and named character sequences; also define character names
Perl pragma for deprecating the core version of a module
Perl pragma to enable new features
Perl pragma to control the filetest permission operators
Perl pragma to use integer arithmetic instead of floating point
perl pragma to request less of something
Perl pragma to use or avoid POSIX locales for built-in operations
perl pragma to set default PerlIO layers for input and output
Package for overloading Perl operations
perl pragma to lexically control overloading
Perl pragma to enable simple signal handling
perl pragma to control sort() behaviour
Perl pragma to restrict unsafe constructs
Perl pragma to predeclare sub names
Perl pragma to enable/disable UTF-8 (or UTF-EBCDIC) in source code
Perl pragma to predeclare global variable names
Perl pragma to control VMS-specific language features
Perl pragma to control optional warnings
warnings import function
Perl access to extended attributes.
Perl extension for access to OS/2 setting database.
exports constants for system() call, and process control on OS2.
access to DLLs with REXX calling convention.
access to DLLs with REXX calling convention and REXX runtime.

Provides

in ext/B/B.pm
in ext/B/B.pm
in lib/Class/Struct.pm
in lib/Getopt/Std.pm
in symbian/ext/Moped/Msg/Msg.pm
in os2/OS2/OS2-REXX/DLL/DLL.pm
in os2/OS2/OS2-PrfDB/PrfDB.pm
in os2/OS2/OS2-PrfDB/PrfDB.pm
in os2/OS2/OS2-REXX/REXX.pm
in os2/OS2/OS2-REXX/REXX.pm
in os2/OS2/OS2-REXX/REXX.pm
in os2/OS2/OS2-Process/Process.pm
in ext/POSIX/lib/POSIX.pm
in ext/POSIX/lib/POSIX.pm
in ext/POSIX/lib/POSIX.pm
in ext/Pod-Html/lib/Pod/Html.pm
in ext/File-Find/t/lib/Testing.pm
in lib/Tie/Hash.pm
in lib/DBM_Filter.pm
in lib/Tie/Hash.pm
in lib/Tie/Scalar.pm
in lib/Tie/Array.pm
in lib/Tie/Hash.pm
in lib/Tie/Scalar.pm
in ext/VMS-Stdio/Stdio.pm
in lib/diagnostics.pm
in lib/overload/numbers.pm
in ext/XS-APItest/t/BHK.pm
in ext/XS-APItest/t/Markers.pm