Use subroutine signatures with anonymous subroutines

While working on my excellent number project, I created a subroutine that took a callback as an argument. When I dereferenced the callback I wanted to supply arguments. Since I was using Perl v5.22, I tried using a subroutine signature with it. Continue reading “Use subroutine signatures with anonymous subroutines”

Use the :prototype attribute

Perl 5.20 introduced experimental subroutine signatures. Now two features vie for the parentheses that come after the name in a subroutine definition. To get around that, v5.20 introduced the :prototype attribute.

There’s not much to this. Here’s a prototype for a subroutine that takes two arguments:

sub add ($$) { ... }

Change that to the attribute form:

use v5.20;
sub add :prototype($$) { ... }

But, you probably don’t need prototypes in the first place. You might consider simply getting rid of them altogether.

Subroutine signatures are experimental and have to go through at least two maintenance releases before they can graduate out of an experimental feature, so be ready for that. I expect that most people will have problems with module code they don’t control, so you might be at the mercy of the module maintainers.