pperl 0.6.25 - Childhood's End

pperl 0.6.25 is released; the changelog has the complete record: https://perl.petamem.com/docs/eng/changelog/index.html. Until now pperl showed what it could do: a feature here, a module there, a benchmark won. This release is measured against what others need. The internal libraries and software suites of PetaMem and PetaJoule run on pperl in full, and of the 500 distributions the rest of CPAN stands on, all but three pass - 99.9% of the CPAN River by weight.

This week in PSC (240) | 2026-10-26

This week we invited Stig to discuss some general policy matters around security announcements and related development work.

We also talked about improvements to the way we handle maintenance releases and backporting bugfixes (in general, not just security-related ones) with the aim to make the process smoother and hope to do it a little more often.

[P5P posting of this summary]

Minion: The Silent Engine That Turns Perl Into a Modern Architecture Platform


By GoPerl — Architecture, Perl, Go & Node.js for companies that need reliable and scalable systems.

In today’s modern systems, especially in web development, new stacks and new developers grow up with the idea of async/await—in other words, asynchronous systems. Many adopt the concept without fully understanding what lies behind it. The simplest goal is clear: make your application feel fast and responsive, without leaving users waiting.

Let’s take this into the enterprise world, where speed, scalability and resilience define technological competitiveness. One concept that immediately enters the conversation is job queues. Behind every high‑performance system, there is always a subsystem responsible for processing heavy tasks without blocking the user experience.

Within the Perl ecosystem, that subsystem has a name: Minion.

Minion provides a modern job queue with SQL persistence, real asynchronous execution and a simple distributed model. This makes it a more robust and easier‑to‑operate alternative compared to Redis‑based solutions like Sidekiq or BullMQ.

Perl documentation (including POD) with Markdown and Docbook

Introduction

I have uploaded to CPAN some tooling modules which allow Perl documentation to be authored as Markdown files - or Docbook XML articles - then merged into source files as POD. They can also then be published as HTML to static sites such as Github pages or Cloudflare Workers.

TL;DR here is an example of the end result - documention for the Cloudflare::API module created from the doc/ directory in the GitHub repository and POD for the command-line tool created from a Markdown file in the same repository.

Perl Documentation

Documentation can be tedious - despite knowing how important good documentation is, and that it can make or break open-source software. Nothing is worse than trying to run "man Some::Module" (or "perldoc Some::Manual") and getting nothing back.

POD is the "linga franca" of the Perl world for a good reason - it has stood the test of time, is completely integrated into the Perl ecosystem and is an excellent format for creating manual pages for Perl modules and scripts.

pperl 0.6.23 - RANT, REPL and SPEED

pperl 0.6.23 is released. As announced in the addendum to the last release post, the complete record of what changed is no longer this post's job: it is in the changelog, one page per version, at https://perl.petamem.com/docs/eng/changelog/index.html. That leaves the post free for three things. One is a rant, about licences and how pperl came to have its own line editor. One is a prompt: pperl has an interactive mode now, a REPL for Perl that keeps your variables from line to line and tells you whether your loop was compiled. And one is speed: MIME::Base64, Digest::SHA and Encode, three modules whose perl5 versions are C, now run significantly faster in pperl than in perl with that C.

Still saving CPU cycles 32 years later: Rediscovering the Schwartzian Transform in Flutter

A few days ago, an article by Flutter developer Hammad Tariq caught my eye: "Rendering 10,000 Machine State Changes on a Timeline Without Freezing Flutter".

It was a solid piece of profiling detective work. Hammad was building a high-density timeline view in Flutter representing 10,000 machine state transitions. But every time the dataset loaded, the mobile UI stuttered and dropped dozens of frames.

Under a section aptly titled "The Original Sin", the author identified the culprit:

sorted.sort((a, b) => DateTime.parse(a.start).compareTo(DateTime.parse(b.start)));

Because sorting makes O(N log N) comparisons, sorting 10,000 items was triggering over 215,000 redundant calls to DateTime.parse() right inside the comparison callback, blowing past the 16ms frame budget and freezing the screen.

To fix the frame freeze, Hammad introduced a clever optimization: map each item to a temporary helper object holding the pre-computed timestamp, sort the list using that cached value, and unwrap it:

Dancer2 2.2.2 Released

(yes, that's a lot of twos!)

Dancer2 2.2.2 is now headed to CPAN. This is a small bug fix release.

Bug Fixes

  • Fixed a crash when using class-method serializers (GH #1837)
  • Fixed test failures in gen.t affecting CPAN Testers and Debian builds (GH #1843)

Documentation

  • Updated a contributor's name in the documentation (PR #1844)

There are no security fixes, enhancements, or deprecations in this release.

Thanks to David Precious and Nova Patch for their contributions.

As always, bug reports and pull requests are welcome on GitHub.

Jason, on behalf of the Dancer Core Team

This week in PSC (237) | 2026-09-28

All three of us (plus Graham’s cat) met as usual.

  • Discussions about some case-matching syntax ideas continue on the mailing list. PSC is following along but for now there does not seem to be a need to come to an official response.
  • From this it sounds like finding a better solution to controlling Perl’s autovivification (especially in deep hash accesses) is a useful goal and can be pursued independently. Potentially addressed by optional chaining (PPC0021).
  • Adding a builtin::rand_bytes function as per [PR24722](https://github.com/Perl/perl5/pull/24722 ) sounds worthwhile. There are portability concerns that still need to be addressed on the subject of platform-dependent entropy sources (such as on VMS).

[P5P posting of this summary]

Peta::NN - Surface Detail

Peta::NN is a neural network library written in Perl: models are defined, trained, measured and shipped from a Perl script, with no dependency beyond perl 5.36. It is not a binding to somebody else's framework and it does not try to be PyTorch. It trains micro models - a few thousand to a few hundred thousand weights, each answering one narrow question about a string - and composes them: in a pipeline, or fused into one model that runs a whole batch on the graphics card without coming back to Perl in between. It runs on perl5 and on pperl, on three backends, and under pperl one of them is the GPU. Two models of 18,761 and 10,002 weights form the plural of 98.3% of German nouns they were never shown, and of every single noun of the core vocabulary.

ANNOUNCE: Perl.Wiki V 1.54, Mojo.Wiki V 1.26

From my Wiki Haven you can now download:
  • Perl.Wiki V 1.55
  • cpan.metacurator.tree.html V 1.32
  • Mojo.Wiki V 1.26
The basic purpose of these is to deal with the upgrade of TiddlyWiki from V 4 to V5.
Up to V 4, CamelCase words were treated as links to be clicked.
From V 5. all links to be clicked must be in double brackets: [[...]].
I have updated Perl.Wiki & Mojo.Wiki to use [[...]] and will progressively upload updated versions of the other wikis to match.

Simultaneous Solutions (GLAM part 1)

New York

Last week I went to visit my teen nephew and niece in New York. A wonderful city of contrasts, where opulence blends with poverty, with shops selling a margherita for 2 bucks a slice next to a place offering margaritas at 20 bucks a sip, and streets full of people either with pots of cash, or those blowing cash on pot. Likewise my nephew, (let’s call him Nathan) and my niece (pseudonymised here to Norma), present equally contrasting mindsets and approaches to life, yet manage to live semi-harmoniously in this subtly harsh environment.

This week in PSC (238) | 2026-10-05

The three of us discussed:

  • There is overall agreement that @INC handling should be improved, but there are still outstanding questions and issues that overlap with build modules, installer tools, and so on. Plan is to publish a partial document so far as a draft PR and get others to comment further.
  • The recent change to improve the accuracy of caller reported line numbers in expressions involving anonymous subroutines (Pull #24396) has caused more BBC fallout than might have been expected. So far it doesn’t need any immediate response from PSC but we continue to keep an eye on it.

[P5P posting of this summary]

pperl 0.6.21 - addendum

This blog entry has no release attached to it. 0.6.21 is an internal version, not for release. In the four days since 0.6.20 a few things happened, but this post is not about new things. It is about old things the 0.6.20 post forgot, about how a project moving at this pace should announce anything at all, and about a question that deserves an answer in public: who pperl is for, at a time when you can ask an AI to port your Perl script to the language of your choice and be done.

A NetAddr::IP Trial Release

Dancer2 2.2.1 released (security)

Dancer2 2.2.1 is now on CPAN. This is a security release; upgrading is recommended.

Dancer2::Serializer::YAML handed request bodies straight to YAML::Load. A body tagged !!perl/hash:Some::Class could therefore instantiate an arbitrary blessed object, and !!perl/code could ask for a string eval. Both are now refused explicitly rather than left to YAML.pm's defaults.

Note that you can be exposed without having configured YAML yourself: Serializer::Mutable maps both text/x-yaml and text/html to this serializer.

Two packaging notes for this release: the minimum YAML version is now 1.30, and Dancer2 now declares the minimum CLI::Osprey it needs (0.09).

Thanks to David Precious for the YAML work.

ANNOUNCE: Perl.Wiki V 1.54, etc

From my Wiki Haven you can now download:
  • Perl.Wiki.html V 1.54
  • cpan.metacurator.tree.html V 1.31
  • Mojo Wiki V 1.25

pperl 0.6.20 - The Player of Games

pperl 0.6.20 is released, and readers of the two previous posts - Shall we play a game? and Doing a REJIT - know what that means. This post carries the Benchmarks Game scoreboard. It also covers a native Memoize whose cache hit is compiled into the caller, a GPU binding on the wgpu crate for the other kind of games, and a few smaller items.

This week in PSC (236) | 2026-09-22

All three of us met.

  • Talked about the two “match case” proposals. The two seem to cover different intents, so it’s not clear that either just replaces the other. The destructuring concept is nice in principle but needs further discussion. We will let discussions continue on the mailing list for now.
  • The PrePPC about @INC dirs seems good enough to progress to a full PPC document for further discussion of details; in particular specifics about non-UNIX operating systems.
  • We want to find a more coherent concept for “hooking core functionality” and possibly the %{^HOOKS} hash in particular, before considering such possibilities as a replacable random number generator. E.g. do $SIG{__WARN__} and $SIG{__DIE__} belong in here?
  • Specifically on providing a hook for generating random data, it feels like the rand() (and srand()) function interface provided by Perl is itself a limitation for getting good behaviour. This might need looking into before simply replacing a better source of randomness.

[P5P posting of this summary]

Dancer2 2.2.0 released; security updates PLEASE READ

We have just released Dancer2 2.2.0. It is a maintenance release containing a number of bug fixes, several important security updates, and one breaking change (see below).

First and foremost, please read the following security announcements; if you are running affected versions of Dancer2, you should plan to update immediately:

A recap of all changes follows.

Security fixes

  • Path traversal in static file serving. Dancer2::Handler::File could serve files from outside public_dir. (GHSA-6xw8-v24c-m783)
  • Hook exception handling. If an on_hook_exception handler halted, the route that the hook refused could still run. (GHSA-v527-r4px-7vx7)
  • Header injection. CR and LF are now stripped from response header names, as they already were from header values.
  • AutoPage no longer serves a layout as a page on case-insensitive filesystems.
  • Session IDs are now always generated with Crypt::URandom, and validate_id rejects invalid session IDs more strictly.

Two Optimisation Tasks in the Weekly Challenge 391

Array Median

We are given two sorted arrays, our task is to merge them and return the median. Let’s start with the naive approach: just let Perl sort the list and select the median.

#!/usr/bin/perl
use warnings;
use strict;
use experimental qw( signatures );

sub array_median_naive($arr1, $arr2) {
    my @m = sort { $a <=> $b } @$arr1, @$arr2;
    return unless @m;

    return @m % 2 ? $m[ $#m / 2 ]
                  : ($m[ $#m / 2 ] + $m[ @m / 2 ]) / 2
}

About blogs.perl.org

blogs.perl.org is a common blogging platform for the Perl community. Written in Perl with a graphic design donated by Six Apart, Ltd.