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.