---
name: "perl5i::Signature"
section: "3pm"
platform: "linux"
package: "libperl5i-perl"
version: "2.13.2-1"
release: "Debian 10 (Buster)"
platforms: ["linux"]
url: "https://new.carta.tech/perl5i::Signature"
---

# perl5i::Signature(3pm)

Representing what parameters a subroutine accepts

## NAME

perl5i::Signature - Representing what parameters a subroutine accepts

## SYNOPSIS

```
    func hello( $greeting, $place ) { say "$greeting, $place" }
    my $code = \&hello;
    my $signature = $code->signature;
    say $signature->num_positional_params;  # 2
    say $signature->is_method;   # false
```

## DESCRIPTION

A Signature is a representation of what parameters a subroutine accepts.  Each subroutine defined with `"func"` or `"method"` will have a signature associated with it.  You can get at it by calling the `"signature"` method on the code reference.  See "Signature Introspection" in perl5i for more details.

Subroutines declared with Perl's built in `"sub"` will have no signature.

## METHODS

*params*

```
    my $params = $sig->params;
```

An array ref of the parameters a subroutine takes in the order it takes them.  Currently they are just strings.  In the future they will be string overloaded objects.

*positional\_params*

```
    my $params = $sig->positional_params;
```

Like `"$sig->params"` but it is just the positional parameters.

In the future there will be named parameters.

*num\_positional\_params*

```
    my $num_positional_params = $sig->num_positional_params;
```

The number of named parameters the subroutine takes.

In the future there will be named parameters.  For the purposes of determining how many arguments a function takes, it is most useful to look just at the positional ones.

This is mostly an optimization for `"$sig->positional_params->size"`.

*as\_string*

```
    my $params = $sig->as_string;
```

The original signature string.

*invocant*

```
    my $invocant = $sig->invocant;
```

The invocant is the object or class a method is called on. `"invocant"` will return the parameter which contains this, by default it is `$self` on a method, and nothing a regular subroutine.

*is\_method*

```
    my $is_method = $sig->is_method;
```

Returns if the subroutine was declared as a method.

## OVERLOADING

Signature objects are string overloaded to return `"as_string"`.  They are also *always true* to avoid objects taking no parameters from being confused with subroutines with no signatures.
