---
name: "Method::Signatures::Modifiers"
section: "3pm"
platform: "linux"
package: "libmethod-signatures-perl"
version: "20170211-4"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Method::Signatures::Modifiers"
---

# Method::Signatures::Modifiers(3pm)

use Method::Signatures from within MooseX::Declare

## 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.
