The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

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.