perlcdelta - what is new for cperl v5.29.0


This document describes differences between the cperl 5.29.0 and the cperl 5.28.0 release.

If you are upgrading from an earlier release such as v5.26.3c, first read perl5280cdelta, which describes differences between v5.26.3c and v5.28.0c.

Core Enhancements

Check bless name under use strict names

The second argument to bless, the new classname, is now checked to be a valid package name identifier when strict 'names' is in effect, and the name is now normalized. [cperl #376]

This is a bugfix, but a major compatibility change.

New warning shadow package

When a subroutine with the same name of a package exists, all package methods are rerouted through this subroutine, effectively eliminating all access to the package via methods. This is almost always an error, unless you want to override access to the package or want a data-only package, without any methods. cperl added the shadow warnings "Subroutine &%s::%s masks existing package %s::%s" in perldiag and "Subroutine &%s masks new package %s" in perldiag. Use no warnings 'shadow'; to silence these new warnings.

extern sub - libffi

A new ffi was added to core, with a syntax resembling perl6 NativeCall. Perl6 traits are cperl attributes, but attribute values may be deferred to run-time. Packagers need to add libffi to their library dependencies. Windows packages are provided, see appveyor.yml.

Not yet implemented are the :encoded() attribute for string arguments and return values, the various encoded string types Uni, wchar, c-struct helpers, native arrays and native classes (i.e. structs), callback helpers and support for variadic (varargs) functions.

Incompatible Changes

Protected hash iterators

Iterating over a hash may now by default not change any key. Allow the previous destructive behavior of changing a hash while iterating over it with use hashiter; See [cperl #117], cperl-only.


Undeprecate "Unescaped left brace in regex" warnings and errors

In cperl only the following special unicode groups within regexes are reserved:

   Name:     \N{
   Property: \p{ \P{
   Break:    \b{ \B{
   Code:     \x{ \o{
   Group:    \g{

All other /{}/ sequences are allowed in cperl and not deprecated anymore. There's no need to quote the literal \{ and \}, only if it's ambiguous and can be mixed up with those reserved unicode groups.

automake and more widespread utils does not need to be plagued by spurious "Unescaped left brace in regex" warnings, when they dont need to be quoted. We undeprecated those new warnings and errors, there's nothing more to reserve (yet). [cperl #362]

Performance Enhancements

Improve newSVpvn_share

Don't downgrade twice, the is_utf8 flags can be taken from the returned hek, which does the downgrading to bytes already.

Modules and Pragmata

New Modules and Pragmata

ffi 0.01c

ffi helpers and ffi types.


Allow hash iterators changing keys for back-compat. See "Protected hash iterators".

Updated Modules and Pragmata

Archive::Tar 2.32

Fix absolute path handling on VMS

attributes 1.15c

Add ffi support, :native(), :encoded(), :nativeconv(), :symbol().

B 1.71_09

Add ffi support: CvXFFI, CvFFLIB. CVf_EXTERN flag

bignum 0.51c

Better way to catch warnings (CPAN RT #126900).

CPAN 2.21_01

Update to 2.21 upstream with our cperl fixes. Some of our fixes were accepted upstream.

Fixed critical rmtree bug with a symlink crossing mountpoints previous directory ~/.cpan/build changed before entering tmp-32186, expected dev=47 ino=244719549, actual dev=47 ino=33303, aborting at CPAN/ line 591

Add many upstream tests and distroprefs. Still need to install them, and add the cperl distroprefs.

Cwd 4.75c

Fixed long pathnames test for getcwd() on older systems, like debian-7.11 i386, which still returns ENAMETOOLONG on large enough buffers.

Fix the HAS_GET_CURRENT_DIR_NAME check, and the is_ENAMETOOLONG macro. Note that get_current_dir_name() is now in effect, which returns the current PWD, i.e. fastcwd, and not the realpath() (i.e the abs_path) of it. This e.g. broke some DBD::File tests, when behind symlinks.

For getcwd with get_current_dir_name() - i.e. fastcwd - add abs_path. See also

Data::Dumper 2.172

Restore deparsing support in the XS dumper, on Perl 5.18 and earlier.

Fix bug when dumping globs with quoting (which now happens for all Unicode glob names)

Behavior change: $dumper-Useqq(undef)> is now treated as setting the "useqq" option, not getting it (and similarly for other options) [perl #113090]

Quote glob names better; notably, Unicode globs are now handled correctly. [perl #119831]

Devel::PPPort 3.43_04

Fix test with Visual Studio (space in paths) by quoting $0. Note: This fix is not in the public CPAN release.

DynaLoader 2.09c

Extend dl_find_symbol on dl_win32 to mimic the POSIX behaviour with an empty libhandle argument: Search the symbol in all loaded shared libraries. This is a convenience platform-compat feature for the ffi.

ExtUtils::Manifest 1.71

Only pod formatting

Errno 1.29_01

Protect from including some avx512 intrinsics directly on mingw.

File::Path 3.16_02c

Fix symlink abort crossing mountpoint with CPAN::Distribution previous directory ~/.cpan/build changed before entering tmp-32186, expected dev=47 ino=244719549, actual dev=47 ino=33303, aborting at CPAN/ line 591

Fix method of generating names for dummy users and groups during testing (i.e. under docker) [cpan #121967].

Math::BigInt 1.999814

Add to_base() and from_base() to Math::BigInt and corresponding library methods _to_base() and _from_base() to Math::BigInt::Lib. This was inspired by CPAN RT #122681.

In the documentation for each of the to_(bin|hex|oct|bytes) methods, add a reference to the corresponding from_(bin|hex|oct|bytes) method.

Math::BigInt::FastCalc 0.5008

No code nor test changes.

Opcode 1.40_03c

Restrict the new op 'enterffi'.

perlfaq 5.20180915
Storable 3.12_02

Enable >2GB AvFILL check on store_hook (64bit) Too many references returned by STORABLE_freeze. It wrapped around previously. Fixes Coverity CID #187854. Move into Storable_pm.PL [cperl #374]

version 0.9924_02

more test fixes for 5.6

warnings 1.43

Add ffi

Removed Modules and Pragmata


XXX Changes to files in pod/ go here. Consider grouping entries by file and be sure to link to the appropriate page, e.g. perlfunc.

Changes to Existing Documentation

We have attempted to update the documentation to reflect the changes listed in this document. If you find any we have missed, send email to

perlfaq 5.20180915

prepend "./" to local require calls. Mojolicious ands Dancer2 are not called young anymore.


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

New Warnings

Changes to Existing Diagnostics

No autovivification of hash slice anymore

Added note that this warning is only enabled with the lexical syntax warnings category, not -w anymore.

Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.32), passed through in regex; marked by <-- HERE in m/%s/

Added note that cperl allows more. In cperl only the combinations with \NpPbBxog{} are illegal.

Configuration and Compilation


Added if ffi.h is being found. If so the incpth, ccflags and libs is extended to include libffi.


With useffi this space-seperated string is filled with the valid and supported :nativeconv() ABI's, in uppercase. Matching HAVE_FFI_* defines in config.h. See "nativeconv(STRING)" in attributes.


Disable destructive hash key modifications during iteration by default. use hashiter; to allow it. [cperl #117]


Fixed the error cases when the double or long double probes returned undef.


Replace sha1sum with sha256sum, add gpg -a -b $pkg.


Tests were added and changed to reflect the other additions and changes in this release. Furthermore, these significant changes were made:

Platform Support

Platform-Specific Notes

Oracle Linux

Selected Bug Fixes

Known Problems


cperl 5.29.0 represents approximately 5 weeks of development since cperl 5.28.0c and contains approximately 63,000 lines of changes across 1,100 files from 2 authors.

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

The following people are known to have contributed the improvements that became cperl 5.29.0:

Reini Urban, Andreas König.

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.

Generated with:

    cperl Porting/ cperl-5.28.0..HEAD -c

Reporting Bugs

If you find what you think is a bug, you might check 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 cperlbug 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 you think it's a cperl specific bug or trust the cperl developers more please file an issue at

If the bug you are reporting has security implications which make it inappropriate to send to a publicly archived mailing list, then see "SECURITY VULNERABILITY CONTACT INFORMATION" in perlsec For details of how to report the issue.


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.