CGI::Tiny - Perl CGI, but modern

Originally published at dev.to

In a previous blog post, I explored the modern way to write CGI scripts using frameworks like Mojolicious. But as pointed out in comments, despite the many benefits, there is one critical problem: when you actually need to deploy to a regular CGI server, where the scripts will be loaded each time and not persisted, frameworks designed for persistent applications add lots of overhead to each request.

CGI scripts have historically been written using the CGI module (or even more ancient libraries). But this module is bulky, crufty, and has serious design issues that led to it being removed from Perl core.

When Laziness Isn't

I just needed a few rows of UUIDs in a column of a spreadsheet, more for esthetics than anything else. uuidgen to the rescue.

At the time I didn't realize that uuidgen natively supports outputting multiple ids like so
uuidgen -C 8


The truly lazy path would have been to read the fine uuidgen manual.

Alas, supposing I needed to make multiple calls to uuidgen, I went with a Perl one-liner with a loop, as I couldn't recall the Bash loop syntax.

Here comes the laziness... I I didn't want to write something like this:

perl -e 'print `uuidgen` for @{[1..5]}';


I'm not so found of of perl's de-reference syntax these days, also that array reference/range was giving "the ick" as my kids would say. I needed something lazier, cleaner. I wondered if there were any default/exported arrays available to me that don't have too many elements to them.... Ah, I know!

nicsell supports the German Perl Workshop

Sie bieten, wir catchen!
nicsell ist ein Domain-Backorder-Dienst, auch Dropcatcher genannt, der es Ihnen ermöglicht, auf eine Vielzahl freiwerdender Domains zu bieten, die sich aktuell in der Löschungsphase befinden.
Schon ab einem geringen Startgebot von 10 € können Sie an unseren Auktionen teilnehmen und haben die Chance an Ihre Wunschdomain zu gelangen.
Übrigens: Zur Verstärkung unseres Teams in Osnabrück suchen wir engagierte Perl-Entwickler (m/w/d). Bei Interesse freuen wir uns auf Ihre Bewerbung!

Nicsell

Premium XS Integration, Pt 2

This is a continuation of a series of articles about how to write XS libraries that are more convenient and foolproof for the Perl users, while not blocking them from using the actual C API.

If you spot anything wrong, or want to contribute suggestions, open an issue at the GitHub repo

Wrapping Transient Objects

One frequent and difficult problem you will encounter when writing XS wrappers around a C library is what to do when the C library exposes a struct which the user needs to see, but the lifespan of that struct is controlled by something other than the reference the user is holding onto.

Announce Perl.Wiki.html V 1.23

Available now: Perl.Wiki.html V 1.23.

As from today, when I announce a new version of one of my TiddlyWikis, I'll list the 2 most recent parts of the change log. These are just copies of the most recent parts of the para called VersionInfo.

And why 2 parts? To help those who missed the last announcement.

o Author:
- Ron Savage
- Melbourne, Victoria, Australia
- http://savage.net.au
- https://symboliciq.au
- https://quantumiq.au
- https://metacpan.org/author/RSAVAGE

o version:
- Perl extension for Version Objects
- https://metacpan.org/dist/versionhttps://metacpan.org/dist/version

Going to release TurboVision bindings sometime soon

Hi there!

Recently I tried this port of turbovision and was really impressed by it.

Now I want it to be available for Perl and in progress of coding it.
The progress is happening here

The progress is happening at a moderate pace.
Currently this runs okay on windows, and should also be okay everywhere else (not tested)

Lots of progress is done already.
Lots of work needs to be done.
I think I've crossed an imaginary equator recently and expect it to be finished in a month or two.
Please let me know here about your ideas, so I could add to the module.

PS.
This post is a slight misuse of the "blogs.perl.org" resource, because I want to create some small corner for developers discussion about it, so I am doing an attempt to invite interested people comment about development here.

Other possibilities include:
  • wiki
  • discord
  • please let me know what else

How to properly and immutably create a timestamp for a document (using Blockchain technology)

I had written a Math paper which was not good enough to be published in a journal, yet I wanted to have proof of the date I wrote it on so I could post the paper on the web without other people later being able to question who first came up with the idea.

The way I thought was more correct to do this was to publish the paper's sha256 checksum on the Bitcoin blockchain. Posting the SHA on social media (such as x.com) was not enough, as paid members can edit their old posts.

I got in touch with BBRTJ, the maintainer of Bitcoin::Crypto, who was very helpful in teaching me how to use his module and achieving my aim.

The goal, he told me, was to include the SHA256 checksum as the comment (technically the 'NULLDATA') of a small bitcoin transaction.

Resigning from the TPF and TPRF board

I'm resigning from the board position at TPF (The Perl Foundation) also known as TPRF (The Perl and Raku Foundation).

tl;dr

After eight years with the foundation board, the time has come for me to step down. While I'm leaving the board, I intend to remain an active member of the Perl community and continue contributing in meaningful ways for Perl users and developers. You'll still see me at various Perl events; and perhaps Raku ones, too.

Over the years, I've learned a great deal, (hopefully) made a positive impact, and had a lot of fun.

Why I'm stepping down #1. The board needs a refresh

As I've noted before, having long-term board members at a nonprofit has advantages and disadvantages. My resignation opens the door for new perspectives and ideas. The foundation's board has started searching for backfill, which is good for the board's long-term success.

A deep dive into the Perl type systems

People usually don't think about Perl's type system. Some would even mistakenly claim it doesn't have one. It is, however, a most unusual one that doesn't really look like anything else.

What is a type anyway? And what is a type system? I'm not going to precisely define it here, that's for academics, but generally speaking a type is a fundamental property of a variable or value that determines what operations can and can not be done with it and what invariants it must hold. In a strong type system it is a stable trait: it can't change over the lifetime of the value/variable.

In some type systems containers are typed (such as C) and values really don't exist separate from containers. In other typed systems containers are typeless but values are typed (e.g. Python, Javascript, …). There are languages where both values and containers are typed (e.g. Java, C#), typically this means that the container constrains the values in it.

Contrary to what you might expect, Perl has the latter sort of typesystem, but with a twist.

🍽️ Join the TPRF-Sponsored Perl & Raku Community Dinner at FOSDEM 2025! 🎉

FOSDEM 2025 is just around the corner, and you know what that means—great talks, amazing people, and of course… fantastic food! 🥂

The Perl and Raku Foundation (TPRF) is once again bringing the community together for a special dinner during the FOSDEM weekend. If you’re an active member of the Perl and Raku ecosystem, this is your chance to relax, connect, and celebrate with fellow developers, contributors, and enthusiasts.

📅 When? Saturday Evening, during FOSDEM weekend
📍 Where? A great venue in Brussels (details will be shared with registered attendees)
💬 Who? Active community members, contributors, and Perl/Raku enthusiasts

Why You Should Join 🍻

  • Meet fellow Perl and Raku hackers in a relaxed, social atmosphere.
  • Celebrate our open-source wins with great conversations and laughter.
  • Enjoy a delicious meal, because good food makes great coding even better!
  • Forge new collaborations and chat about everything from regex wizardry to the future of Perl and Raku.

Secure Your Spot! 📝

OTOBO supports the German Perl Workshop

We are very happy to announce that OTOBO supports the German Perl Workshop!

Die Rother OSS GmbH ist Source Code Owner und Maintainer der Service Management-Plattform OTOBO.


Gemeinsam mit der Community entwickeln wir OTOBO kontinuierlich weiter und sorgen dafür, dass das Tool zu 100 % Open Source bleibt.


Unsere Kunden unterstützen wir mit partnerschaftlicher Beratung, Training, Entwicklung, Support und Managed Services.

This week in PSC (177) | 2025-01-23

Back to the full roster.

  • We talked again about Perl 42. We think it may already be too late for it in this cycle, so we want to make a thorough case for it by releasing a side tarball for the end of this cycle, and if no technical blocker is found, actually do the jump to 44 in the next cycle.
  • We listed out next steps for the next point release.
  • Aristotle summarized the suggested simplification of our plan for TLS in core, but a fuller discussion next week is necessary.
  • PPC 0014 (English names) has no implementer.
  • There was a branch for PPC 0021 (Optional chaining) but the implementer hit a wall and got stuck.
  • Regarding the dual PPCs 0030 (equ) and 0031 (eq:u), we lean towards the former. Options would be cleaner if we had a big and regular set of them across operators, but neither is the case, and they constitute an extra concept.
  • Many thanks to Dave Cross for providing an initial implementation of a PPC index page. We decided to merge it as is, then iterate on the PPC process afterwards, instead of doing it the other way around.

[P5P posting of this summary]

Announce Perl.Wiki.html V 1.22

Perl Wiki V 1.22

Premium XS Integration, Pt 1

Intro

There are several competing philosophies for wrapping external C libraries. One is that the XS module should hide all the details of the library and provide a clean “Perlish interface”. The opposite extreme is that the external C functions should be exposed to Perl using an extremely minimal XS layer, or the Foreign Function Interface (FFI) and all the logic for working with the library should be written in Perl.

I advocate something in the middle. I think that a good interface should expose as much of the low-level as possible (to make the most usage of that library possible by other Perl modules) while “padding the sharp edges” so that it is difficult for Perl-side usage to crash the program. Higher level features can be provided in addition to the low level API via XS, Perl modules, or both.

Add a security policy to your distributions

Adding a SECURITY or SECURITY.md file to your Perl distributions will let people know:

  1. How to contact the maintainers if they find a security issue with your software
  2. What software will be supported for security issues

The contact point is very important for modules that have been around for a long time and have had several authors over the years. When there is a long list of maintainers, it's not clear who to contact.

You don't want people reporting security vulnerabilities in public on the RT or GitHub issues for your project, nor do you want a post on IRC, Reddit or social media about it.

If your software is on GitHub, you can set up private vulnerability reporting. GitLab has a similar system.

Otherwise, a single email address is acceptable. An alias that forwards to all of the maintainers or at the very least, a single maintainer who has agreed to that role will work.

This week in PSC (176) | 2025-01-16

Just Graham and Philippe this time.

  • We talked a bit about PPC 0025 (Perl version), but didn’t say anything new
  • Regarding PPC 0030 (new operators) vs PPC 0031 (flags on operators), we continue to think that flags on operators bring more confusion than value (PSC #168). Perl is an operator-rich language, so adding new operators when needed sounds right.
  • As for the discussion on implicit stringification of references, we think that adding more runtime effects to strict doesn’t really fit. The issue would likely be better addressed with a new warning (and is very similar to the uninitialized warning when dealing with undef).

[P5P posting of this summary]

Good File Structure

I know, thinking about where to put what in a code file sounds lame to most artisan hero's that fly by intuition, but I find it actually helpful. Here my article about it on dev.to and you can tell its written with Perl in mind. I just wanted to publish outside to reach more people and maybe even bring some in.

Cool new Perl-based web apps

Having reached a certain level of proficiency with Mojolicious and Vue.js, I made the decision to dedicate some of my free time every week to develop "cool and somewhat useful" (according to some) open-source web apps in Perl.

The goal is to practice and learn, and maybe also help make Perl a bit more popular.

My first such project is Gandalf Links, a link-aggregator website (inspired by pinboard.in) that's pretty much complete and can be installed and run very easily with Docker.

At the front page's footer you can find a link to the source code. A full list of current and future features can be found here.

If interested to contribute in ANY way (ideas, know-how, coding) please do get in touch with me via e-mail, through the form that's on gandalf.gr, or maybe use the project's issue tracker. I've done almost all I can on this project, now I'm looking for other people's expertise.

I'd also be looking for ideas on what other self-hosted web app to work on next (with you if you're interested).

Regards,

- Gandalf (first cousin of the copyrighted one)

Please keep your information up-to-date

Some end of year reminders for CPAN Authors:

Do all of your modules have up-to-date contact information? If not, please release new versions with an updated email address in the AUTHOR section.

(And while you're at it, why not add a security policy to your distribution, so that people know how and where to report a security issue with your module.)

If you have a cpan.org email alias, does it forward to the correct email address?

And most importantly, if you are taking time away from maintaining Perl modules, please add ADOPTME or NEEDHELP as co-maintainers to mark your modules as available.

Thanks, and best wishes for 2025.

Foswiki 2.1.9 is released

We are delighted to announce the new release, which includes 57 significant bug fixes compared to the previous 2.1.8 version. This update addresses a range of important issues and enhances the overall stability and performance.

FoswikisLatest_8.png

More details at https://blog.foswiki.org/Blog/Foswiki219IsReleased

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.