# 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 `$0` rewrites, 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.