perl5270cdelta - what is new for cperl v5.27.0


This document describes the differences between the cperl 5.26.0 and the cperl 5.27.0 releases.

If you are upgrading from an earlier release such as v5.24.2c, first read the perl525*cdelta documentation, which describes differences between v5.25.1c and v5.26.0c

Core Enhancements


study does not stringify hashes anymore, it rather calls the new hv_study function on hashes, which optimizes the internal structure of a hash. Currently clears all placeholders, and optionally shrinks its size if the new size falls below a power of two. On code, regex and arrays it does nothing yet, but might add type optimizations on the current dynamic status.

New strict hashpairs

Added use strict 'hashpairs' to allow only pairs for hash assignments, within a map even only an empty or single pair. See [cperl #281.

Honor the BOM

With any of three supported BOMs set use utf8 and use feature 'unicode_strings' at compile-time as documented until perl 5.26.

With 5.26 perl5 decided to change the documentation to match the broken implementation. With cperl 5.27.0c the implementation was fixed instead. See [cperl #269] and [perl #121292].

Safer perl -c:s cmdline flag

Avoid undoable and unsafe sideeffects (io, ...) in the CHECK mode, esp. for editor syntax checks. See [cperl #263]

Essentially prepend -Mops=:browse,:load,print with -c:s.

Incompatible Changes

use strict hashpairs

With use strict this will now fail:

  my %xsc = map { /(.*)\.xs$/ ? ("$1.c" => 1, "$" => 1) : () } @files;

Two pairs being added in a map block violates strict hashpairs. Add the second pair in a second loop or no strict 'hashpairs'.

  my %xsc = map { /(.*)\.xs$/ && ("$1.c" => 1) } @files;
  /^(.*)\.xs$/) && $xsc{"$"} = 1 for @files;

Performance Enhancements

Modules and Pragmata

Updated Modules and Pragmata

Archive::Tar 0.26

'0' is a valid name for an archive, change 'iter' to check definedness. See


Support pgcc, seperate it from gcc

B::Concise 0.9991c

Support the new strict hints flags and abbrevate all strict flags as strict.


Support pgcc, seperate it from gcc


Support pgcc, seperate it from gcc

Cpanel::JSON::XS 3.0233

MSVC 14.0 support and higher, changed nan in the runtime.


Support pgcc, seperate it from gcc

Devel::PPPort 3.36_01

Support strict hashpairs, fix for . in @INC. Merged with 3.36

Encode 2.89

no strict hashpairs in encoding. fixed some -Wsign-compare See

ExtUtils::Install 2.08

Optimisations: use our instead of vars lazy load modules make OS variables into constants move some calculations out of a loop

Keep our make -s support

IPC::Cmd 0.98

Enhancements: Added wait_loop_callback for run_forked()

Bug fixes: Only search in curdir in can_run() when on Win32 RT#105601

PathTools 4.68c

getcwd, getdcwd and abs_path have now long path support. getdcwd (Windows only) also supports unicode paths, using the wide API.


no strict hashpairs

POSIX 1.76_03

getcwd has now long path support. Added realpath, with long path support, if the libc supports NULL as 2nd argument.


fix cygwin stack probing

strict 1.12c

Added use strict 'hashpairs' to allow only pairs for hash assignments, within a map even only an empty or single pair. See [cperl #281.

Also reserved use strict 'names', which is not yet implemented.


Changes to Existing Documentation


perldata, perlfunc


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


Configuration and Compilation

Platform Support

New Platforms


Preliminary support for the Portland pgcc compiler (Linux, Darwin, Win32 only) has been added.

Platform-Specific Notes

Support for long paths have been added to all platforms, for cwd longer than 4096. Many kernels have limited support for it, but filesystems do. See [cperl #270].


Fixed hints for pgcc.

Use for getcwd(NULL) or get_current_dir_name(), which can return paths longer than 4096.


Fixed hints for pgcc


More mingw build improvements, but the smoker still not pass the tests, and my local vm seems to be broken.

Fixed invalid check_type_and_open macro on mingw miniperl.

Cygwin and the MSVC versions 10,12,14 smoke now ok with 32-bit and 64-bit.

Fixed upstream mkstemp API changes.

getcwd is deprecated on Windows. use _getcwd() instead.

PathTools: Support overlong paths for getdcwd(), using the wide API for overlong paths.


Fixed Storable stacksize probing. Fixed a lot of admin-specific file-permission tests

Internal Changes

Selected Bug Fixes


cperl 5.27.0c represents approximately 3 weeks of development since cperl 5.26.0c and contains approximately 21,000 lines of changes across 180 files from 4 authors.

Excluding auto-generated files, documentation and release tools, there were approximately 2,300 lines of changes to 81 .pm, .t, .c and .h files.

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

Reini Urban, François Perrad, Yves Orton, vendethiel.

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.

Generated with:

    cperl Porting/ cperl-5.26.0..HEAD

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


Hey! The above document had some coding errors, which are explained below:

Around line 248:

alternative text 'do "%s" failed, '.' is no longer in @INC; did you mean do "./%s"? ' contains non-escaped | or /