Telegram Keyboard Button Encoding

I wrote a blog entry about it, also introducing a new module to handle this. Enjoy!

Perl 5 Porters Mailing List Summary: February 20th-26th

Hey everyone,

Following is the p5p (Perl 5 Porters) mailing list summary for the past week.


Perl 6 IO TPF Grant: Monthly Report (February, 2017)

This document is the February, 2017 progress report for TPF Standardization, Test Coverage, and Documentation of Perl 6 I/O Routines grant


I'm currently running slightly behind the schedule outlined in the grant. I expect to complete the Action Plan and have it ratified by other core members by March 18th, which is the date of the 2017.03 compiler release. Then, I'll implement all of the Action Plan (and complete the grant) by the 2017.04 compiler release on April 15th. This is also the release the next Rakudo Star distribution will be based on, and so the regular end users will receive better IO there and then.

Your own template engine in 4 flavors. With Benchmarks!

This time on blog I'll show you how to write your own template engine - with syntax and behavior tailored for your needs. And we'll do it in four different ways to analyze pros and cons of each approach as well as code speed and complexity. Our sample task for today is to compose password reminder text for user, which can then be sent by email.

use v6;

my $template = q{
    Hi [VARIABLE person]!

    You can change your password by visiting [VARIABLE link] .
    Best regards.

my %fields = (
    'person' => 'John',
    'link' => ''

So we decided how our template syntax should look like and for starter we'll do trivial variables (although that's not very precise name because variables in templates are almost always immutable).
We also have data to populate template fields. Let's get started!

1. Substitutions

sub substitutions ( $template is copy, %fields ) {
    for %fields.kv -> $key, $value {
        $template ~~ s:g/'[VARIABLE ' $key ']'/$value/;
    return $template;

say substitutions($template, %fields);

Yay, works:

    Hi John!

    You can change your password by visiting .

    Best regards.

Configuring NGINX for SSL with Let's Encrypt

The Mojolicious Core Team has decided to try group blogging on Tumblr. As such I’m trying out posting there. I recently posted on how I configure NGINX, read more at

Machine learning in Perl

Hello everybody, this is my first post, so please go easy on me. I work with Perl for last 19 years and it always treated me extremely well in regards of interesting work or material compensation. Past December my company decided that it's time to finally join in the fashion of the day and start experimenting with ML.

I started researching and found out that's my lovely Perl is stuck in the past in regards to ML support and there's no any recent developments in this area (like full last decade).

Now look at Python! Tensorflow, MXNet, Keras, Theano, Caffe, and many, many more. Java has it's deeplearning4j, Lua has Torch and what had Perl ?

We had AI::FANN, the interface (good one, I used it, it's good) to the C lib that has not seen any real development since 2007, only feed-forward neural networks, no convolutional networks, no recurrent networks, all advances in last 10 years just were happening outside of Perl.

Perl 5 Core Hackathon (p5hack) Report

perl5-hack-logo-03.jpg (Graphics credit to Leonardo Maia.)

Thanks to The Perl Foundation and our beloved sponsors, a large portion of the critical contributors to the Perl 5 Porters (p5p), the core group of Perl 5 developers, were able to get together on November 11th, 2016 at the headquarters in Amsterdam, The Netherlands, for our very first Perl 5 Core hackathon, nicknamed Perl 5 Hack.

This is our report.

Rakudo.js update - we passed a first roast test

After spending a long time chasing a bunch of bugs (a lot of ones that boiled to a few lines of code had really weird consequences that needed to be painstakingly chased down) and implementing some missing parts I finally got Test.pm6 to compile and load.
This allowed rakudo to pass few roast tests (like S03-operators/not.t) for the first time. Once some remaining issues with the Test.pm6 get solved hopefully a whole bunch of others will pass.
Currently the coroutine ops needed for Test (for gather/take type stuff) to load are implemented in a node.js specific manner using the fibres. I previously had an pure js implementation of them using a CPS transform but it carried a large cost in terms of generated code and compile time so it got disabled as it was slowing down development. Some careful thought will be needed later on how to re-nable it with only paying for it for use.
Now that rakudo.js is starting to run actual Perl 6 code my current focus is to make rakudo.js easier for others to play it.
That includes means making the way it builds (at least remotely) sane and cutting down the horrible (10+ second locally) startup cost of loading the setting. A lot of the startup cost seems to be caused by the way lexical scopes are setup in rakudo.js which also needs a cleanup as it's currently to influenced by how nqp does things.

About is a common blogging platform for the Perl community. Written in Perl and offering the modern features you’ve come to expect in blog platforms, the site is hosted by Dave Cross and Aaron Crane, with a design donated by Six Apart, Ltd.