Provided by: libmethod-signatures-perl_20170211-3_all bug

NAME

       Method::Signatures::Modifiers - use Method::Signatures from within MooseX::Declare

SYNOPSIS

           use MooseX::Declare;
           use Method::Signatures::Modifiers;

           class Foo
           {
               method bar (Int $thing) {
                   # this method is declared with Method::Signatures instead of MooseX::Method::Signatures
               }
           }

           # -- OR --

           use MooseX::Declare;

           class My::Declare extends MooseX::Declare
           {
               use Method::Signatures::Modifiers;
           }

           # ... later ...

           use My::Declare;

           class Fizz
           {
               method baz (Int $thing) {
                   # this method also declared with Method::Signatures instead of MooseX::Method::Signatures
               }
           }

DESCRIPTION

       Allows you to use Method::Signatures from within MooseX::Declare, both for the "method"
       keyword and also for any method modifiers ("before", "after", "around", "override", and
       "augment").  Typically method signatures within MooseX::Declare are provided by
       MooseX::Method::Signatures.  Using Method::Signatures instead provides several advantages:

       •   MooseX::Method::Signatures has a known bug with Perl 5.12.x which does not plague
           Method::Signatures.

       •   Method::Signatures may provide substantially better performance when calling methods,
           depending on your circumstances.

       •   Method::Signatures error messages are somewhat easier to read (and can be overridden
           more easily).

       However, Method::Signatures cannot be considered a drop-in replacement for
       MooseX::Method::Signatures.  Specifically, the following features of
       MooseX::Method::Signatures are not available to you (or work differently) if you
       substitute Method::Signatures:

       Types for Invocants

       MooseX::Method::Signatures allows code such as this:

           method foo (ClassName $class: Int $bar) {
           }

       Method::Signatures does not allow you to specify a type for the invocant, so your code
       would change to:

           method foo ($class: Int $bar) {
           }

       Parameter Aliasing (Labels)

       MooseX::Method::Signatures allows code like this:

           # call this as $obj->foo(bar => $baz)
           method foo (Int :bar($baz)) {
           }

       This feature is not currently planned for Method::Signatures.

       Placeholders

       MooseX::Method::Signatures allows code like this:

           method foo (Int $bar, $, Int $baz) {
               # second parameter not available as a variable here
           }

       This feature is not currently planned for Method::Signatures.

       Note that, if the parameter you want to ignore is at the end:

           method foo (Int $bar, Int $baz, $) {
               # third parameter not available as a variable here
           }

       then you could write that in Method::Signatures using the "yada yada" pseudo-parameter:

           method foo (Int $bar, Int $baz, ...) {
               # third (or greater) parameter(s) not available here
           }

       Traits

       In MooseX::Method::Signatures, "does" is a synonym for "is".  Method::Signatures does not
       honor this.

       Method::Signatures supports several traits that MooseX::Method::Signatures does not.

       MooseX::Method::Signatures supports the "coerce" trait.  Method::Signatures does not
       currently support this, although it is a planned feature for a future release, potentially
       using the "does coerce" syntax.

BUGS, CAVEATS and NOTES

       Note that although this module causes all calls to MooseX::Method::Signatures from within
       MooseX::Declare to be completely replaced by calls to Method::Signatures (or calls to
       Method::Signatures::Modifiers), MooseX::Method::Signatures is still loaded by
       MooseX::Declare.  It's just never used.

       The "compile_at_BEGIN" flag to Method::Signatures is ignored by
       Method::Signatures::Modifiers.  This is because parsing at compile-time can cause method
       modifiers to be added before the methods they are modifying are composed into the Moose
       classes.  Parsing of methods at run-time is compatible with MooseX::Method::Signatures.

THANKS

       This code was written by Buddy Burden (barefootcoder).

       The import code for replacing MooseX::Method::Signatures is based on a suggestion from
       Nick Perez.

LICENSE

       Copyright 2011 by Michael G Schwern <schwern@pobox.com>.

       This program is free software; you can redistribute it and/or modify it under the same
       terms as Perl itself.

       See http://www.perl.com/perl/misc/Artistic.html

SEE ALSO

       MooseX::Declare, Method::Signatures, MooseX::Method::Signatures.