NAME
Method::Signatures::PP - EXPERIMENTAL pure perl method keyword
SYNOPSIS
use strict;
use warnings;
use Test::More;
use Method::Signatures::PP;
package Wat;
use Moo;
method foo {
"FOO from ".ref($self);
}
method bar ($arg) {
"WOOO $arg";
}
package main;
my $wat = Wat->new;
is($wat->foo, 'FOO from Wat', 'Parenless method');
is($wat->bar('BAR'), 'WOOO BAR', 'Method w/argument');
done_testing;
DESCRIPTION
It's ... a method keyword.
method foo { ... }
is equivalent to
sub foo { my $self = shift; ... }
and
method bar ($arg) { ... }
is equivalent to
method bar ($arg) { my $self = shift; my ($arg) = @_; ... }
In fact, it isn't just equivalent, this module literally rewrites the source code in the way shown in the examples above. It does so by using a source filter (boo, hiss, yes I know) to slurp the entire file, then Damian's wonderfully insane PPR module to parse the code to find the keywords, and then rewrites the source before returning the file to perl to compile.
The wonderful part of this is that it's 100% pure perl and therefore unlike every other method implementation is amenable to App::FatPacker use. The terrible part of this is that if the parse phase doesn't work, the code has no idea at all what it's doing and ends up not touching the source code at all, at which point the compilation failures from the keyword rewriting not having happened will almost certainly hide the actual problem.
So, for the moment, you are strongly advised to not use this module while developing code, and instead use Function::Parameters if you have a not completely ancient perl and Method::Signatures::Simple if you're still back in the stone age banging rocks together, and to then switch your 'use' line to this module for fatpacking/shipping/etc. - and since this code now uses Babble, to create a .pmc you can run:
perl -MBabble::Filter=Method::Signatures::PP -0777 -pe babble \
lib/MyFile.pm >lib/MyFile.pmc
(or even use -pi -e on a built distdir)
AUTHOR
mst - Matt S. Trout (cpan:MSTROUT) <mst@shadowcat.co.uk>
CONTRIBUTORS
None yet - maybe this software is perfect! (ahahahahahahahahaha)
COPYRIGHT
Copyright (c) 2017 the Method::Signatures::PP "AUTHOR" and "CONTRIBUTORS" as listed above.
LICENSE
This library is free software and may be distributed under the same terms as perl itself.