Strawberry Perl and released

Strawberry Perl and are available at

More details in Release Notes:

I would like to thank our sponsor Enlightened Perl Organisation for resources provided to our project.

Call for Lightning Talks -- London Perl Workshop

The London Perl Workshop is on Saturday 25th November, and as is traditional, the day will end with Lightning Talks, compèred by the inimitable Léon Brocard. In previous years things have been pretty fluid, with talks being accepted on the day. This year the deadline for Lightning Talk submissions is Monday 6th November, and we'll let prospective speakers know by Friday 10th.

If you've something to say, but not enough for 20 minutes, why not submit a 5 minute lightning talk?

Not sure how? Read on...

Perl 5 Porters Mailing List Summary: September 25th - October 1st

Hey everyone,

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


Dancer Survey 2017

On behalf of the Dancer Core Team, I would like to announce the availability of the Perl Dancer 2017 Survey. As Dancer 2 has become stable and matured, the Core Team is sometimes left to wonder what our community wants from us next, as it is the greatest deciding factor in focusing our efforts. What better way to answer that question than to survey you, our users, for what you like, don’t like, and what you want to see?

And so we would like to ask you to share your thoughts and feelings about Dancer2, the infrastructure, and its community. Whether you are a new user or a former user, you have a lot to contribute to this survey and we would like to hear from you. What you liked about Dancer, what you do not, and what areas you feel that Dancer could improve upon. We encourage you to take the time to help us chart the roadmap for Dancer.

How to do Bit Operation Correctly in Perl? One Answer is SPVM.

How to do Bit Operation Correctly in Perl? One Answer is SPVM.

Perl don't have type system in Language because Perl is completly dynamic type language.

If you use SPVM, you can use byte, short, int, long, float, double type as same as Java.

my $num : int = 0x1234;

And you can do Bit Operation easily.

$num & 0x0F;

Perl Big Problem is numeric operation

Perl Big Problem is numeric and binary operation.

So Perl itself can't support latest technology, such as AI, Machine Learning, Big Data, statistics, IoT, Binary data operation, image, movie.

Python try and study this technology positively. But Perl is always late.

Problem is not language. Problem is Infrastructure and will and action to do it fast.

I try to create Infrastructure at first.

Not-Perl: Career Advice for Programmers

Quite a few of you will have picked up one of my Perl Careers booklets when I've seen you at conferences. I've started keeping a long-form blog of Career Advice for Programmers here: Code for More.

YAML::PP Grant Report August/September 2017

For the last two months I have been working over 100 hours on YAML::PP, a project I started in January.

It aims to parse YAML 1.2.

I got the confirmation for the TPF grant application at the end of August, but I already started to log my work in August, so I'll include this work here.

Some of the things listed here aren't yet in the latest release 0.004, so you might want to check out the code on github.

First I'd like to give a short introduction why there is a need for a new YAML framework.

6lang: The Naming Discussion Update

Read this article on 6lang.Party

When a couple months ago I rekindled the naming debate—the discussion on whether "Perl 6" should be renamed—I didn't expect anything more than a collective groan. That wasn't the case and today, I figured, I'd post a progress report and list the salient happenings, all the way to my currently being the proud owner of domain name.

The "Rakudo" Language

The "new" name I mentioned in my original post was Rakudo. As many quickly pointed out, it wasn't the greatest of names because it was the name of an implementation. Yes, I agree, but originally I thought few, if any, would be on board with a new name, or extended name, and Rakudo was basically the only name people already were using, so it stood out as something that could be "hijacked."

The Blog Post Fallout

Perl5 to Java compiler - symbol tables, typeglobs, and call stack

Perlito5 is an implementation of the Perl5 language that runs in the Java / JVM platform.

As part of the work for porting the core Perl modules, we had to implement better support for Perl symbol tables, typeglobs, and call stack.

The call stack (the caller() function) now works "natively", decoding the internal Java stack trace. This means that there is no logging overhead for calling Perl subs, and no additional work needs to be done to support Perl stack traces in JVM threads.

Symbol tables (like %::) and typeglobs also work like in Perl, even if the internal data structures are actually flattened into a java HashMap. The symbol table / typeglob / filehandle emulation doesn't add any overhead for normal hash variable access.

With these changes, the core module lib/ now works without modifications.

Perl 5 Porters Mailing List Summary: September 18th-24th

Hey everyone,

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


Easy C/C++ Binding using SPVM

I introduce Easy C/C++ Binding using SPVM . In Perl, C/C++ binding is very very hard work. If you use SPVM, the work become very easy.

If You don't yet know SPVM itself, See SPVM Document at first.

SPVM Module:

# lib/SPVM/MyMathNative.spvm
package MyMathNative {
  # Sub Declaration
  sub sum ($nums : int[]) : native int;

C Source File:

// lib/SPVM/MyMathNative.native/MyMathNative.c

int32_t SPVM__MyMathNative__sum(SPVM_API* api, SPVM_API_VALUE* args) {
  // First argument
  SPVM_API_OBJECT* sp_nums = args[0].object_value;
  // Array length
  int32_t length = api->get_array_length(api, sp_nums);
  // Elements pointer
  int32_t* nums = api->get_int_array_elements(api, sp_nums);
  // Culcurate total
  int32_t total = 0;
    int32_t i;
    for (i = 0; i < length; i++) {
      total += nums[i];
  return total;

Use Extension Module from Perl:

use FindBin;
use lib "$FindBin::Bin/lib";

# Use SPVM module
use SPVM 'MyMathNative';

# New SPVM int array
my $sp_nums = SPVM::new_int_array([3, 6, 8, 9]);

# Call SPVM subroutine
my $total = SPVM::MyMathNative::sum($sp_nums);

print $total . "\n";

You maybe use XS or Inline::C or FFI to bind C/C++ library from now.

Today addition, You can select SPMV to bind C/C++.

If you learn more, see the following.

Easy C/C++ Binding using SPVM

SPVM is before 1.0 under development! I will change implementation and specification without warnings.


The other day I ran across a pattern in our codebase at $work, and I was mightily impressed.  It solved a problem I had run into before, but the solution here was much more elegant than mine, so I’m officially stealing it.  And sharing it with you.

The problem that we’re looking at today is building Moose attributes.  Now, in and of itself, there’s nothing exciting going on there.  Perhaps we might have an attribute whose value comes out of a config file, so we might build it like so:

Opinions Wanted On Changing Vim Syntax Highlighting

Hello fellow Perl (and potentially Vim) users!

There's an open issue on the vim-perl issue tracker about how the current syntax highlighting is inconsistent in how it highlights chained method calls, which currently looks like this:

 1 use strict;
 2 use warnings;
 3 use feature qw(say);
 5 $foo->bar;
 7 $foo->bar();
 9 $foo->bar->baz;
11 $foo->bar()->baz;

My proposal is to remove method highlighting altogether, and per the user y's suggestion, I'm announcing it here to take the pulse of the community and see where others stand. Removing method highlighting would make the Perl syntax file easier to work with as well as potentially improve highlighting performance.

The resulting highlighting would look like this:

 1 use strict;
 2 use warnings;
 4 $foo->bar;
 6 $foo->bar();
 8 $foo->bar->baz;
10 $foo->bar()->baz;

Perl 5 Porters Mailing List Summary: September 11th-17th

Hey everyone,

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


The Rakudo Book Project

Read this article on Rakudo.Party

When I first joined the Rakudo project, we used to say "there are none right now; check back in a year" whenever someone asked for a book about the language. Today, there's a whole website for picking out a book, and the number of available books seems to multiply every time I look at it.

Still, I feel something is amiss, when I talk to folks on our support chat, when I read blog posts about the language, or when I look at our official language documentation. And it's due to that feeling that I wish to join the Rakudo book-writing club and write a few of my own. I dub it: The Rakudo Book Project.

The Books

The Rakudo Book Project involves 3 main books—The White Book, The Gray Book, and The Black Book—as well as 2 half-books—The Green Book and The Cracked Book.

graphql-perl - MooX::Thunking - Deferred computation attributes

As part of porting GraphQL to Perl (sponsored by Perl Careers), one of my goals is to use the best possible practice in making rigorous code. One way to use this is to imitate the style of the JavaScript reference implementation's use of immutable data structures.

One problem arising is creating objects that have a reference to themselves. If the objects created were mutable, then one would simply create the object, then set the relevant attribute to include the object reference. If the objects are immutable this is not possible. For example:

package GraphQLType;
use Moo;
use Types::Standard -all;
has [qw(children)] => (
  is => 'ro',
  isa => ArrayRef[InstanceOf['GraphQLType']],
  required => 1,

package main;
my $type;
$type = GraphQLType->new(children => [$type]);


As a proof-of-concept, Importer::Zim has been released to CPAN. For modules which export symbols and define @EXPORT, @EXPORT_OK and @EXPORT_TAGS, zim can be used as a pragma to import subroutines into the caller package with lexical scope for perl 5.18+.

use zim 'Scalar::Util' => qw(blessed);
use zim 'List::Util' => qw(first sum max any all);

use zim 'Fcntl' => ':flock';
use zim 'Carp';  # imports carp(), confess(), croak()

use zim 'Mango' => 'bson_time' => { -as => 'bson_dt' };

Some of the benefits are:

  • there is no need for Exporter-like code - only the declarations of the exported symbols are necessary.

  • the imported symbols are self-cleaning - which means they won't pollute the namespace like it happens when exporting / importing is done through the symbol tables. (No need for modules like namespace::clean or namespace::autoclean.)

Importers are on the side of the consumer code - which is the one that should care more about the effect of the imported symbols. On the other hand, exporters are on the side of the producer code which can hardly anticipate every possible way its subroutines will be used. There are more good points on importers vs exporters at

London Perl Workshop: give a talk

The London Perl Workshop (LPW) takes place this year on Saturday 25th Nov and you are encouraged to submit your talk proposals now (or if you have already, feel free to submit another!).

The informal theme this year is "Perl and friends". We welcome proposals relating to Perl 5, Perl 6, other languages, and supporting technologies.

The hugest feature of Perl 6

If there would be an election for the single greatest Perl 6 feature, many would select the box for grammars and others would root for concurrency/async (as expressed in several articles here and elsewhere). Roles and types might be also strong contenders. Here is why I would pick: none of the above, even I like all of them very much.

Perl 5 Porters Mailing List Summary: September 5th-10th

Hey everyone,

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


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.