pperl 0.6.20#
2026-09-27, 21 commits.
Static binaries start again. Every statically linked (musl) pperl stopped with a segmentation fault before running a line: the code that records the program’s arguments, which an assignment to
$0rewrites, received none from musl and read garbage. They also build again: POSIX’s six locale categories that only glibc defines (LC_ADDRESS,LC_IDENTIFICATION,LC_MEASUREMENT,LC_NAME,LC_PAPER,LC_TELEPHONE) are reported on musl as perl5 built on musl reports them, “Your vendor has not defined POSIX macro”.Peta::Dict no longer crashes in a compiled loop that counts numeric-string keys, such as
for my $k (@keys) { $h{$k}++ }. A key that grew the table during the loop left the compiled code reading the table’s freed memory.Regular expressions compiled by ReJIT search each string once instead of twice. Regex-redux runs 9% fewer instructions; scans for a long literal and for a pattern that starts with
.take about half and under a third of the cycles they took. No measured pattern got slower.Release archives: every binary of a release is built with profile-guided optimisation, and a release is one archive holding the binaries, their SHA-256 sums and a build record (commit, target, features). Before it is packed, each binary must print the locale and format numbers under four locale settings exactly as perl5 built against the same C library does.