perlcdelta - what is new for cperl v5.30.0


This document describes differences between the cperl 5.28.2 and the cperl 5.30.0 release.

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

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" in perldiag, "Subroutine &%s masks new package %s" in perldiag and "Subroutine &%s masks new class %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.

Signature args are run-time type checked

Run-time type violations a throw a new type warning, which can be made fatal with use types 'strict' or use warnings 'FATAL' => 'types'; "Type of arg %s to %s should be %s (not %s)" in perldiag. The compile-time error uses the word "must" instead of "should". This might be a problem when typing an argument to str or Str, but the argument is stringified via overload from a class, e.g. File::Temp::Dir. This case, when the argument is not of str|Str, but a user-defined class with a stringify overload is not yet handled.

[cperl #389] and [cperl #387]. cperl-only

Better role composition

When roles are copied from a class to another, we can now handle XS methods and methods without internal lexical variables better, by simple GV aliasing.

The other methods are now properly cloned and the $self type is adjusted to the new class for the created new method, because v5.30 started argument type checking at run-time.

cperl can also now adjust field indices when composing roles, when the indices of the used lexical variables of the two methods do not match, by using the new internal experimental inliner. [cperl #311] The error "panic: cannot yet adjust field indices when composing role %s::%s into %s %s [cperl #311]" is gone in the general case.

Wildcards in Unicode property value specifications are now partially supported

You can now do something like this in a regular expression pattern

 qr! \p{nv= /(?x) \A [0-5] \z / }!

which matches all Unicode code points which have numeric value is between 0 and 5 inclusive.

This marks another step in implementing the regular expression features the Unicode Consortium suggests.

Most properties are supported, with the remainder planned for 5.32. Details are in "Wildcards in Property Values" in perlunicode.

qr'\N{name}' is now supported

Previously it was an error to evaluate a named character \N{...} within a single quoted regular expression pattern (whose evaluation is deferred from the normal place). This restriction is now removed.

Unicode 12.1 is supported

For details, see

The Word_Break property, as in past Perl releases, remains tailored to behave more in line with expectations of Perl users. This means that sequential runs of horizontal white space characters are not broken apart, but kept as a single run. Unicode 11 changed from past versions to be more in line with Perl, but it left several white space characters as causing breaks: TAB, NO BREAK SPACE, and FIGURE SPACE (U+2007). We have decided to continue to use the previous Perl tailoring with regards to these.

As of July 2018, another aspect of Unicode 11.0 is causing problems, and that is the changing the Georgian script to have both lower and uppercase letters. It turns out that many devices do not have fonts installed that can display the new uppercase letters, and people using Georgian are finding their text more or less illegible. It is being suggested that implementations delay their adoption of this portion of 11.0. But since the next stable release of Perl is almost a year away, this aspect of 11.0 is being left in, with the option to back it out if things haven't improved by that time, or if we get too many complaints about the development release being unusable for Georgian users.

Because of a change in Unicode release cycles, Perl jumps from Unicode 10.0 in Perl 5.28 to Unicode 12.0 in Perl 5.30.

There are few new scripts: Elymaic, Nandinagari, Nyiakeng_Puachue_Hmong (Hmnp), Wancho, all of them not available for identifiers.

Handle qr!\p{nv=6/8}!

Allow a rational number specified in looking up the Numeric Value Unicode property to not be in lowest possible terms.

The Numeric Value property allows one to find all code points that have a certain numeric value. An example would be to match against any character in any of the world's scripts which is effectively equivalent to the digit zero.

We accept either integers (like \p{nv=9}) or rationals (like \p{nv=1/2}). But we also accept floating point representations in case a conversion to numeric has happened, (like \p{nv=0.5}). The necessary precision is now automatically pre-calculated and the lookup normalized.

The upper limit "n" specifiable in a regular expression quantifier of the form "{m,n}" has been doubled to 65534

The upper limit "n" specifiable in a regular expression quantifier of the form "{m,n}" has also been doubled to 65534.

The meaning of an unbounded upper quantifier "{m,}" remains unchanged. It matches 2**31 - 1 times on most platforms, and more on ones where a C language short variable is more than 4 bytes long.

-Drv now means something on -DDEBUGGING builds

Now, adding the verbose flag (-Dv) to the -Dr flag turns on all possible regular expression debugging, as with use re 'debug';. See re.

Eliminated optree recursion

Eliminated recursion from internal finalize_op() and optimize_op(), avoiding segfaults with extremely nested ops. E.g. with

    perl -e 'my $line = "\$cond ? \$a : \n";
             my $code = ($line x 100000) . "\$b;\n";
             eval $code;'

Contrary to what is said in the relevant perldelta, your code is now slower. Before it crashed with a segfault, now it does much more. The regular case is also slower due to stack handling on the heap, similar to the regexp changes in 5.10. [perl #108276].

Turkic UTF-8 locales are now seamlessly supported

Turkic languages have different casing rules than other languages for the characters "i" and "I". The uppercase of "i" is LATIN CAPITAL LETTER I WITH DOT ABOVE (U+0130); and the lowercase of "I" is LATIN SMALL LETTER DOTLESS I (U+0131). Unicode furnishes alternate casing rules for use with Turkic languages. Previously, Perl ignored these, but now, it uses them when it detects that it is operating under a Turkic UTF-8 locale.

It is now possible to compile perl to always use thread-safe locale operations.

Previously, these calls were only used when the perl was compiled to be multi-threaded. To always enable them, add


to your Configure flags.

Check RUNNING_ON_VALGRIND, set destruct_level to 2

Detect if we are running under valgrind and set destruct_level to 2. If so, destruct all ops, leading to no valgrind leaks, even with --leak-check=full. cperl-only [cperl #400]


Variable length lookbehind in regular expression pattern matching is now experimentally supported

Using a lookbehind assertion (like (?<=foo) or (?<!bar) previously would generate an error and refuse to compile. Now it compiles (if the maximum lookbehind is at most 255 characters), but raises a warning in the new experimental::vlb warnings category. This is to caution you that the precise behavior is subject to change based on feedback from use in the field.

See "(?<=pattern)" in perlre and "(?<!pattern)" in perlre.

Disallowed Limited Use Scripts

The list of valid scripts for identifiers was purged from all Limited Use scripts from They fail now.

Unicode 10.0 started disallowing all Aspirational Use Scripts, but we didn't handle them at all. Table 4. Candidate Characters for Exclusion from Identifiers scripts are still allowed, and still need to be explicitly enabled as a use utf8 argument. cperl-only.

[CVE-2018-18311] Integer overflow leading to buffer overflow and segmentation fault

Integer arithmetic in Perl_my_setenv() could wrap when the combined length of the environment variable name and value exceeded around 0x7fffffff. This could lead to writing beyond the end of an allocated buffer with attacker supplied data.

[perl #133204]

Restrict my_setenv to ARG_MAX

perl5 fixed Perl_my_setenv() by allowing %ENV sizes larger than ARG_MAX (typically 128Kb), up to 2GB. This is considered a security risk. It writes onto the kernel stack, even if often caught by MAXEXECARGS "Argument list too long" kernel errors on the next exec call. cperl disallows %ENV larger than the sysconf(_SC_ARG_MAX)/MAX_ARG_STRLEN/ ARG_MAX/NCARGS size with a new "Environment size %d larger than the allowed %d" in perldiag error.

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.

Assigning non-zero to $[ is fatal

Setting $[ to a non-zero value has been deprecated since Perl 5.12 and now throws a fatal error. See "Assigning non-zero to $[ is fatal" in perldeprecation.

Previously deprecated sysread()/syswrite() on :utf8 handles now fatal

Calling sysread(), syswrite(), send() or recv() on a :utf8 handle, whether applied explicitly or implicitly, is now fatal. This was deprecated in perl 5.24.

There were two problems with calling these functions on :utf8 handles:

[perl #125760]

my() in false conditional prohibited

Declarations such as my $x if 0 are no longer permitted. This feature was deprecated in 5.10 (and replaced by two better constructs, one of it backwards compatible) and is now a fatal error. [perl #133543]

Note: cperl does not agree that this feature is a bug, but this ship sailed already over a decade ago.

Fatalize $* and $#

These special variables, long deprecated, now throw an error when used. See "$* is no longer supported as of Perl 5.30" in perldiag and "$# is no longer supported as of Perl 5.30" in perldiag. [perl #133583]

Fatalize unqualified use of dump()

The dump() function, long discouraged, may no longer be used unless it is fully qualified, i.e., CORE::dump().

[perl #133584]

Remove File::Glob::glob()

The File::Glob::glob() function, long deprecated, has been removed and now throws an exception which advises use of File::Glob::bsd_glob() instead.

[perl #133586]

pack() no longer can return malformed UTF-8

It croaks if it would otherwise return a UTF-8 string that contains malformed UTF-8. This protects agains potential security threats. This is considered a bug fix as well.

[perl #131642]

There are several sets of digits in the Common script. [0-9] is the most familiar. But there are also [\x{FF10}-\x{FF19}] (FULLWIDTH DIGIT ZERO - FULLWIDTH DIGIT NINE), and several sets for use in mathematical notation, such as the MATHEMATICAL DOUBLE-STRUCK DIGITs. Any of these sets should be able to appear in script runs of, say, Greek. But the design of 5.30 overlooked all but the ASCII digits [0-9], so the design was flawed. This has been fixed, so is both a bug fix and an incompatibility. [perl #133547] [perl #133547]

All digits in a run still have to come from the same set of ten digits.


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]

Remove support for qr/\p{_Case_Ignorable}

This property is no longer used in the core, nor in cpan, and is marked as for core use only, not necessarily stable. I have kept it around because it was work to remove it, but now the revamping of the property lookup scheme was causing failures with it, when compiling on early Unicode releases. That could be fixed with extra work, but simply removing it also fixes the problem and avoids future maintenance costs.

Remove support for qr/\p{_Comb_Above}

This property is no longer used in the core, nor in cpan, and is marked as for core use only, not necessarily stable. I have kept it around because it was work to remove it, but now the revamping of the property lookup scheme was causing failures with a similar property, and the previous commit removed that one.

Remove support for qr/\p{_CanonDCIJ}

The property is not used in cpan, and is being removed as part of the cleanup instigated because another of the 3 would require extra code to handle if we were to keep it around.

Performance Enhancements

Modules and Pragmata

The list of new and updated modules is modified automatically as part of preparing a Perl release, so the only reason to manually add entries here is if you're summarising the important changes in the module update. (Also, if the manually-added details don't match the automatically-generated ones, the release manager will have to investigate the situation carefully.)

New Modules and Pragmata

ffi 0.01c

ffi helpers and ffi types.

hashiter 0.02

pragma to allow hash iterators changing keys for back-compat. See "Protected hash iterators".

inline 0.01

Yet unused pragma to disable the internal function inlining optimizer, via no inline;

YAML::Safe 0.80

Our new YAML::Safe has been added to the Perl core, replacing our patched version of YAML::XS.

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.76_10

Fixed for -DPERL_GLOBAL_STRUCT. Add ffi support: CvXFFI, CvFFLIB. CVf_EXTERN flag

B::C 1.57_01

New major release, with dVAR support and experimental cross support and -m (module) support. Add $dynamic_copwarn needed for v5.29.7+ (not cperl). The new script buildcc for module support is not yet functional, only a placeholder.

B::Deparse 1.49_05c

Removed arybase support.

bignum 0.51c

Better way to catch warnings. [cpan #126900].

bytes 1.07

Typo in pod

Compress::Raw::Bzip2 2.086

Added transparent lzip and zstd delegation in tests. More meta.

Compress::Raw::Zlib 2.086
Config 6.23


Config::Extensions 0.03

Whitespace only

Config::Perl::V 0.31_01


CPAN 2.27_02

Update to 2.27-TRIAL 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. Added the cperl distroprefs.

Support YAML::Safe for distroprefs.

CPAN::Meta 2.150011c

Add YAML::Safe support.

Cpanel::JSON::XS 4.12

Make encoder independent on Math::BigInt version

Rethrow error from eval_sv and eval_pv(), e.g. when Math::BigInt/BigFloat fails.

Fix encoding Inf and NaN from PV and NV slots to JSON_TYPE_INT

Fix memory corruption in sv_to_ivuv() function

Add new method ->require_types

Fix typed json encoder conversion from scalar's PV and NV slot to JSON_TYPE_INT

Fix inconsistency with warnings in typed json encoder

Fix Perl 5.8.0 support

Fixed minor pod typo

Document invalid recursive callbacks or overloads

Fix unicode strings with BOM corrupt ->utf8 state The BOM encoding effects only its very own decode call, not its object.

Fix incr_text refcounts and add incr_rest testcase

Fix encode_stringify string-overload refcnt problem "Attempt to free unreferenced scalar" with convert_blessed and overload.

Cwd 4.78c

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

Don't translate ... to ..\.. on Win32. (an old limitation) [perl #123724]

Add and use Internals::getcwd().

Data::Dumper 2.173

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]

DB_File 1.852

ParseOpenInfo() leaks if it croaks

Added hints files, sourced from

deprecate 0.04_01

Expanded the documentation

Devel::Peek 1.28_03

Adjust Devel::Peek pod to cperl FLAGS

Devel::PPPort 3.53_04

PL_in_sub only with v5.29.0c

Merge 3.52 with cperl improvements:

     cperl croak_no_modify adds now the SV to the message.
     support make --silent.
     support devel VERSION with _
     fix deps
     sync embed.fnc with cperl core, with #ifdef USE_CPERL
     sync parts with 5.30 updates

Revert "Use latest blead embed.fnc"

     It changed the meaning of several flags (n=>T, s=>S,M=>x,...) just for
     some apidocs troubles which are easily solved otherwise.
     It breaks backcompat, and breaks the equality of core embed.fnc.
     perl5.30 also rejected it

make regen is now in two modes: cperl or perl5 (as in cperl-core embed_lib)

Add croak_no_modify_sv

Remove implemented TODOs

Fix for older EUMM <6.46 which has no META_MERGE

Fix 5.6.0 tests with early Test::Harness: add done_testing, support plan => no_plan, fallback => NN for 5.6.0 (Test::Harness < 2), avoid, skip git diff, as make regen is different there, skip 3 failing 5.6.0 tests in ppphtest

Devel::NYTProf 6.06_03

CVE-2019-11358 + CVE-2015-9251 jquery-1.12.4.js update to latest v3.4.1. Also update the two plugins to latest, and adjusted the tablesorter css.

Adjust the short %PL_DBsub keys (without main::) compatible to perl5.

Add all the tests, cleanup after the tests.

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.

Encode 3.01

Add Encode::ONLY_PRAGMA_WARNINGS by default to :encoding layer variable $PerlIO::encoding::fallback.

ONLY_PRAGMA_WARNINGS reports only those warnings which are currently enabled by pragma warnings. When ONLY_PRAGMA_WARNINGS is not set then Encode would report all warnings. ONLY_PRAGMA_WARNINGS would have no effect when flag ENCODE_WARN_ON_ERR is not set.

Errno 1.30_01

Make Errno_pm.PL compatible with /usr/include/<ARCH>/errno.h. Protect from including some avx512 intrinsics directly on mingw.

ExtUtils::Embed 1.36

Added optimize to ccopts, required for -flto. Fixed documentation of ccopts. Fixed test to use ccopts, include local -I.., indentation, remove wrong -O hack.

ExtUtils::Manifest 1.72

Minor internal changes only

ExtUtils::MakeMaker 8.35_08

Added -flto support for static libs (need the lto plugin) and D for deterministic builds, using arflags for AR_STATIC_ARGS, not just 'cr'.

fix FULLPERL for win32 cperl


(perl #133654) don't include OUTLIST parameters in the prototype: The generated prototype (with PROTOTYPES: ENABLE) would include OUTLIST parameters, but these aren't arguments to the perl function.

feature 1.54_01

array_base was removed.

File::Copy 2.34

Add note to close or flush filehandles before calling copy or move.

File::Find 1.36

$File::Find::dont_use_nlink now defaults to 1 on all platforms. Fixes [perl #133673], [perl #128894], and [perl #126144].

File::Glob 1.32

Fatalized File::Glob::glob(), which was deprecated since 5.8. However, no deprecation message was issued; only perl5.008delta.pod and a comment in the file mention its deprecation. The warnings was added with v5.25.10.

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].

File::Temp 0.2309
GDBM_File 1.18

Add SECURITY AND PORTABILITY warning paragraph to pod.

IO 1.40_02

Skip EINVAL on FreeBSD tests when binding a tcp listener on localhost.

IO::Compress::Base 2.086
IO::Socket::IP 0.39_03

Allow ETIMEDOUT on FreeBSD INET6 socket with V6Only true. [cpan #128986]

IO::Zlib 1.10_01

Fixed parallel testing [cpan #105700]

Probe for more external gzips, make t/external.t strict safe.

JSON::PP 4.04_01

Upstream + keep some of our cperl-specific docs and test improvements.

lib 0.65

Hint about $dir/$version is checked by and deleted from @INC

Math::BigInt 1.999816

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.

bnok() for Math::BigInt and Math::BigFloat now support the full Kronenburg extension. The behaviour is identical to the behaviour of the Maple and Mathematica function for negative integers n, k. Add tests. RT #95628.

Fix POD errors. RT #125141.

Move bitwise operators signed and, signed or, and signed xor from lib/Math/BigInt/ into lib/Math/BigInt/ The file lib/Math/BigInt/ is no longer needed and thus removed.

Math::BigInt::FastCalc 0.5008

No code nor test changes.

Module::Load 0.34

Added SEE ALSO section to documentation. RT#100575 Unreachable code cleanup

mro 1.22_02

Fix -Wmaybe-uninitialized warnings

NDBM_File 1.15

Add SECURITY AND PORTABILITY warning paragraph to pod.

Net::Ping 2.72


Allow data_size > 1024, up to 65535, i.e. fragmented packets. It is recommended to stay below 1472 though for the typical 1500 MTU. Many simple devices do not allow fragmented ICMP packets (> 1472). [cpan #17409]


Fix the max_datasize documentation

Test fixes

The 2 sudo tests on PERL_CORE with a shared perl lib. Skip failing freebsd localhost resolver tests.

ODBM_File 1.16

Add SECURITY AND PORTABILITY warning paragraph to pod.

Opcode 1.40_04c

Added the new setstate and keepstate ops for the new inliner, variants of nextstate.

Restrict the new op 'enterffi'.

Parse::CPAN::Meta 1.5002c

Replace YAML::XS by YAML::Safe.

perlfaq 5.20190126

Fixed many typos and pod markup. Added reference in perlfaq to new ~ syntax in indented here-docs.

PerlIO::encoding 0.27_01

Warnings enabled by setting the WARN_ON_ERR flag in $PerlIO::encoding::fallback are now only produced if warnings are enabled with use warnings "utf8"; or setting $^W. [perl #131683]

PerlIO::scalar 0.30

Allow Off_t smaller than size_t. (Win64 with USE_LARGE_FILES=undef) [perl #133422] 1.54_03c

Typos in pod.

podlators 4.12

Skip the man/no-encode.t test if Encode is already loaded while running the test suite, which seems to happen sometimes with CPAN Testers tests.

Pod::Simple 4.39c

Merge with updates from 3.39 Releaxed some str types, which could be Pod::Simple::LinkSection also.

POSIX 1.87_03

Use quadmath versions of log10, ldexp and signbit. [perl #133510]

stdio.h on Cygwin doesn't expose cuserid with _GNU_SOURCE

SDBM_File 1.15

Add SECURITY AND PORTABILITY warning paragraph to pod.

re 0.37_01

Document -Drv

Safe 2.40_03c

Fix a test for CORE::dump

sigtrap 1.09

Adapt for layers on STDERR, which failed if PERL_UNICODE was set and the current locale was a UTF-8 locale.

Socket 2.029_05

Re-order and comment deprecated IDN constants. Old MinGW lacks ADDRESS_FAMILY; use USHORT instead (RT128550). Add PF_LOCAL/AF_LOCAL constants (RT127089). Provide sockaddr_un on WIN32 (RT128550).

Storable 3.15_04

Fix and clarify handling of recurs_sv. [perl #133326]

Remove exploit code from the pod, which triggered virus scanners. Note that the perl5 release did that wrong. [perl #133706]

Keep Storable::Limit, in opposition to [perl #133708]. Not my idea, but removing it is even worse. The ticket goal is fine, but the implementation not.

Fix cxt->pseen leak

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]

Term::ReadKey 2.38_03

Merge with 2.38

threads::shared 1.60

Add extra lock tracing via -DSHARED_TRACE_LOCKS

Time::HiRes 1.9760_02

Make utime() available only if we have both fd and name setting [perl #133030]

Adjust Makefile.PL for windows: the DEFINE() in Makefile.PL can't be be in sub init() because that sub isn't called on windows

t/itimer.t: avoid race condition. don't truncate nanosec utime

fallback/ Avoid compiler warning showing up on darwin.

Unicode::Collate 1.27_01

UCET is updated (for Unicode 10.0.0) as Collate/allkeys.txt. The default UCA_Version is 36. Locale/*.pl and CJK/ are updated.

U::C::Locale newly supports locale: cu. tailoring Cyrillic YI as BYELORUSSIAN-UKRAINIAN I with DIAERESIS, affected locale: kk added loc_cu.t in t.

Skip redefinition warnings on cperl since 5.27.2 (Hangul in utf8.h)

Unicode::UCD 0.71_03

Preserve old-style casing for %SCRIPTS, i.e. Egyptian_hieroglyphs for Egyptian_Hieroglyphs.

vars 1.05_01c no longer disables non-vars strict when checking if strict vars is enabled. [perl #130674]

version 0.9924_02

More test fixes for 5.6

warnings 1.43

Add ffi

Win32 0.52_02

Fix various -Wunused warnings, added () usage croaks. Fixed a -Warray-bounds buffer overflow in LONGPATH, and two -Wmaybe-uninitialized.

XS::Typemap 0.17

Fixed internal leaks

Removed Modules and Pragmata


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

Additionally, the following selected changes have been made:

perlfaq 5.20180915




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

Utility Changes


Stabilized the CoreList updater.

Configuration and Compilation

Fixed make regen on cperl with a shared libperl. Need to set LD_LIBRARY_PATH for a fullperl with ext/Config.


Avoid bumping mtimes when adding valid libffi targets in configpm. This caused massive miniperl rebuilds, but is only needed for perl-dependent targets much later.


Added #ifdef USE_CPERL and #if PERL_VERSION <28 to the API declaration in embed.fnc, making clear the perl5 and cperl API differences in args, argtypes and API declarations.

regen/ was extended to handle regen-time branches, and ignore perl5 and older verion branches.

Devel-PPPort embed.fnc can now be the same as the core embed.fnc.


Without DEBUGGING the best -flto Link Time Optimization flag is now added to the default ccflags. See and [cperl #381].

The correct -flto= variant is then used for ldflags and lddlflags also. cldflags contains now also the optimize settings, needed for -flto.

ar is replaced by llvm-ar-$llvmsuffix if needed. See "llvmsuffix" below.


ccflags or cc containing -ULTO does not probe and add -flto flags. This is useful for faster B::C testing. E.g. ./Configure -des -Accflags=-ULTO

ccname clang

ccname is now set to "clang" for clang, not "gcc".

ccname icc

On linux "icc" is also set for ccname, and -O3 is preferred over -O2 in most non-DEBUGGING cases with newer compilers.


llvmversion string added to config, like "6.0.1-9.1 (tags/RELEASE_601/final)", analog to gccversion. With clang both variables are set.


Added llvmsuffix config, for bitcode-enabled ar, ranlib, llvm-profdata.

ar --plugin

Added ar --plugin path to the gcc lto_plugin, required for binutils ar with static libs with -flto. Esp. on cygwin. Ditto for ranlib.


Added clang and useshrplib support for the two .autofdo targets. See "AutoFDO" in perlhacktips.


Added two .pgo targets, analog to autofdo. See "PGO" in perlhacktips.


Set archname and the target triple myarchname earlier, right after osname.


With -Uinstallmandirs all four variables installman1dir, installman3dir, installsiteman1dir and installsiteman3dir are set to none, skipping installing all man pages.


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.


Detect valgrind/valgrind.h and check RUNNING_ON_VALGRIND for setting destruct_level to 2.


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
Mac OS X

Internal Changes


Selected Bug Fixes

Known Problems


cperl 5.30.0c represents approximately 10 months of development since cperl 5.28.0c and contains approximately 580,000 lines of changes across 2,400 files from 52 authors.

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

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

Karl Williamson, Reini Urban, David Mitchell, Tony Cook, James E Keenan, Sisyphus, Steve Hay, Tomasz Konojacki, H.Merijn Brand, Dagfinn Ilmari Mannsåker, Nicolas Rochelemagne, Aaron Crane, Daniel Dragan, Craig A. Berry, Sawyer X, Andy Dougherty, Karen Etheridge, Eugen Konkov, Richard Leach, Chris 'BinGOs' Williams, Unicode Consortium, Aristotle Pagaltzis, Abigail, Niko Tyni, Ryan Voots, Zak B. Elep, Pali, Hugo van der Sanden, Yves Orton, Slaven Rezic, Dan Dedrick, Dominic Hargreaves, François Perrad, Hauke D, Jakub Wilk, Matthias Bethke, Shlomi Fish, Andreas König, James Clarke, Jim Cromie, Brian Greenfield, E. Choroba, John SJ Anderson, Dan Book, Petr Písař, Ed J, Leon Timmermans, David Cantrell, Phil Pearl (Lobbes), Alexandr Savca, Tina Müller, Graham Knop.

The list above is almost certainly incomplete as it is automatically generated from version control history including the perl and cperl repos. In particular, it does not include the names of the (very much appreciated) contributors who reported issues to the Perl bug tracker and the cperl github issues.

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.