Dancer2 2.3.0 Released

Dancer2 2.3.0 is on its way to CPAN. It adds support for the HTTP QUERY method, fixes a pair of JSON serializer bugs, and closes a small information leak in error responses.

If your app speaks JSON, you want this one.

Why 2.3.0 and not 2.2.3? QUERY support adds a new keyword, and a new keyword can collide with code you already have. Details below.

New: HTTP QUERY support

QUERY is a newer HTTP method that's safe and idempotent like GET, but carries a request body like POST. It's meant for searches and lookups that are too big or too complicated to cram into a query string. (Yes, it's the thing a lot of us have been faking with POST for years.)

Benchmarking Finishing Order

Two Approaches

This blog post was inspired by the Task 1 of Weekly Challenge 396. Let’s start with the actual wording of the task:

You are given two arrays of integers, @order and @friends.
The @order (size n) contains every integer from 1 to n exactly once. The @friends contains IDs sorted in strictly increasing order.
Write a script to return the array containing IDs in finishing order.

Not clear? Let’s look at an example:

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]

Save the Date - Winter PCC CFP, Details Coming Soon!

The Perl Community is busily preparing for the Winter 2026 PCC, December 17 & 18 in Austin, TX, and remote—including Perl’s birthday! We’re planning on yet another great lineup of in-person and remote presentations.

Join our announcements-only email list for conference news and video releases.

In the meantime, thanks to a few generous souls, we’ve hired a video editor to help us release the conference recordings. The first two videos from Winter 2025 PCC are up:

More recordings are coming over the next couple of weeks, including:

  • sealed.pm: Compile-Time Method Lookups — Dr. Joe Schaefer
  • Bits & Pieces: Perl Library for CPU & GPU Architectures — Dr. Christos Argyropoulos
  • Matplotlib::Simple: Plotting Quickly in Perl and SimpleFlow: Automating & Reliabilizing Computational Workflows — Dr. David Condon
  • PAGI: The Perl Asynchronous Gateway Interface AKA PSGI 2.0 and AI Perl Committee: Introduction to Perl MCP — John Napiorkowski

News: Perl.Wiki V 1.57, Mojo.Wiki V 1.27 etc now available

Now available from my Wiki Haven:
  • Perl.Wiki V 1.57
  • cpan.metacurator.tree.html
  • cpan.metacurator.help.html (New!)
  • Mojo.WIki V 1.27

And available from MetaCPAN:
  • CPAN::MetaCurator V 1.34
  • CPAN::MetaPackager V 1.05

PetaApps - Perl's rightful place

Since 2012 I have been saying in public that Perl needs applications, and that CPAN by itself is not the killer application. These apps never arrived, and the usual answer was "use the right tool for the job". In a time when AI reimplements whole software suites, the question is worth asking again. Our answer is PetaApps: a NAS, a hypervisor, a software-defined network, a mail server and a backup server, on one platform, built on Rust and Perl. None of it is finished. All of it is under way.

URI::PackageURL 2.26 released: PURL and VERS for Perl

URI::PackageURL 2.26 is on CPAN.

URI-PackageURL implements two specifications that are becoming central to software supply-chain security:

  • PURL (Package URL, standardized as ECMA-427): a uniform way to identify a software package across ecosystems (pkg:cpan/URI-PackageURL@2.26)
  • VERS (Version Range): a universal notation for version ranges (vers:cpan/>=2.00|<2.26)

It ships with two CLI tools, purl-tool and vers-tool, and depends only on core modules.

What's new

The new cpan PURL type

The main change is support for the updated cpan type definition in purl-spec.

NetAddr::IP 4.080_05: Please Smoke Test

NetAddr::IP 4.079 was released in 2016 and has sat there since. I have started working on it recently, and 4.080_05 is the fifth trial release since. It is on CPAN now, and the tarball is ready for you to install!

Most of what changed is a matter of course: about a hundred fixes to bugs and to documentation that had drifted from the code, and a set of three breaking changes that fix behaviour the documentation said should not happen. NetAddr::IP is now MIT licensed, was dual licensed under GPL v2 or the Artistic License, and deprecations collected under one heading are going in version 5.

The XS build

ANNOUNCE: Perl.Wiki V 1.56, CPAN::MetaCurator V 1.33

Get them at my Home Page's Wiki Haven.

This is the first version where ChangeLog[12] are included in the JSTree, so there are still some tiny cleanups to do...

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.

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.

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]

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.

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

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.

A NetAddr::IP Trial Release

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
}

The Lightning Talks of the German Perl Workshop 2026 are online

Thanks to some crafty editing by Lee, the lightning talks are also online on Youtube.

Thanks again to all the past speakers!

Many conference speakers got their start with a lightning talk - maybe on your next conference you want to give a lightning talk too?

These presentations are up to 5 minutes long - the ideal way to introduce your favorite module, TV series, or really just about any topic.

Adventures with Fortran

If you do scientific and/or numerical computing, you probably use or at least know about BLAS, and LAPACK. If you've done much programming with them, you may have passed in data that it cannot handle, and then you'll probably know about xerbla_.

xerbla_ is the error-handler in those two libraries, and by default it terminates the whole process. To do otherwise you have to provide a replacement routine, and have the linker for your program insert that replacement, which the library will then use instead. This is increasingly hard or impossible to do, including on macOS, Windows, and static libraries. There is now an open pull-request in the reference versions of those libraries that will permanently solve this, by allowing client programs to just pass in a new handler, which will then be used. No linker stuff involved.

Implementing this involved figuring out how to achieve this in Fortran. As a test-bed, I made a directory with this simple, no-nonsense Makefile:

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.