=encoding utf8
=head1 NAME
perl5i::Signature - Representing what parameters a subroutine accepts
=head1 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
=head1 DESCRIPTION
A Signature is a representation of what parameters a subroutine
accepts. Each subroutine defined with C<func> or C<method>
will have a signature associated with it. You can get at it by
calling the C<signature> method on the code reference. See
L<perl5i/Signature Introspection> for more details.
Subroutines declared with Perl's built in C<sub> will have no
signature.
=head1 METHODS
=head3 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.
=head3 positional_params
my $params = $sig->positional_params;
Like C<< $sig->params >> but it is just the positional parameters.
In the future there will be named parameters.
=head3 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 C<< $sig->positional_params->size >>.
=head3 as_string
my $params = $sig->as_string;
The original signature string.
=head3 invocant
my $invocant = $sig->invocant;
The invocant is the object or class a method is called on.
C<invocant> will return the parameter which contains this, by default
it is C<$self> on a method, and nothing a regular subroutine.
=head3 is_method
my $is_method = $sig->is_method;
Returns if the subroutine was declared as a method.
=head1 OVERLOADING
Signature objects are string overloaded to return C<as_string>. They
are also I<always true> to avoid objects taking no parameters from
being confused with subroutines with no signatures.