Sub::Meta::Parameters - meta information about parameters
use Sub::Meta::Parameters; my $p1 = Sub::Meta::Parameters->new( args => ['Str'] ); $p1->invocant; # => undef; $p1->invocants; # => []; $p1->positional; # => [Sub::Meta::Param->new('Str')] $p1->positional_required; # => [Sub::Meta::Param->new('Str')] $p1->positional_optional; # => [] $p1->named; # => [] $p1->named_required; # => [] $p1->named_optional; # => [] $p1->nshift; # => 0 $p1->slurpy; # => 0 $p1->args_min; # => 1 $p1->args_max; # => 1 my $x = Sub::Meta::Param->new({ type => 'Int', name => '$x', named => 1 }); my $y = Sub::Meta::Param->new({ type => 'Int', name => '$y', named => 1 }); my $p2 = Sub::Meta::Parameters->new( nshift => 1, args => [ 'ClassName', $x, $y ] ); $p2->invocant; # => Sub::Meta::Param->new('ClassName'); $p2->invocants; # => [Sub::Meta::Param->new('ClassName')]; $p2->positional; # => [] $p2->positional_required; # => [] $p2->positional_optional; # => [] $p2->named; # => [$x, $y] $p2->named_required; # => [$x, $y] $p2->named_optional; # => [] $p2->nshift; # => 1 $p2->slurpy; # => 0 $p2->args_min; # => 5 $p2->args_max; # => 0+'Inf'
Constructor of Sub::Meta::Parameters.
Sub::Meta::Parameters
my $p = Sub::Meta::Parameters->new( args => ['Str'], # required. arguments nshift => 0, # optional. number of shift arguments slurpy => 0, # optional. whether get all rest arguments );
method args() => ArrayRef[InstanceOf[Sub::Meta::Param]]
Subroutine arguments arrayref.
method has_args() => Bool
Whether Sub::Meta::Parameters has args or not.
method set_args(ArrayRef[InstanceOf[Sub::Meta::Param]]) => $self method set_args(ArrayRef[$sub_meta_param_args]) => $self method set_args(Dict[Str, $sub_meta_param_args]) => $self method set_args(Ref $type) => $self
Setter for subroutine arguments. An element can be an argument of Sub::Meta::Param.
Sub::Meta::Param
use Types::Standard -types; my $p = Sub::Meta::Parameters->new(args => []); $p->set_args([Int,Int]); $p->set_args([{ type => Int, name => 'num' }]); # named case: $p->set_args({ a => Str, b => Str }); $p->set_args({ a => { isa => Str, default => 123 }, b => { isa => Str, optional => 1 } }); # single ref: $p->set_args(Str); # => $p->set_args([Str])
method all_args() => ArrayRef[InstanceOf[Sub::Meta::Param]]
Subroutine invocants and arguments arrayref.
method nshift() => Enum[0,1]
Number of shift arguments.
method nshift(Enum[0,1] $nshift) => $self
Setter for nshift. For example, it is assumed that 1 is specified in the case of methods, and 0 is specified in the case of normal functions.
method slurpy() => Maybe[InstanceOf[Sub::Meta::Param]]
Subroutine all rest arguments.
method has_slurpy() => Bool
Whether Sub::Meta::Parameters has slurpy or not.
method set_slurpy(InstanceOf[Sub::Meta::Param]) => $self> or method set_slurpy($sub_meta_param_args)> or
Setter for slurpy:
my $p = Sub::Meta::Parameters->new(args => [{ isa => 'Int', name => '$a'}]); $p->set_slurpy({ name => '@numbers', isa => 'Int' }); # => (Int $a, Int @numbers)
method positional() => ArrayRef[InstanceOf[Sub::Meta::Param]]
Returns an arrayref of parameter objects for the positional arguments.
method positional_required() => ArrayRef[InstanceOf[Sub::Meta::Param]]
Returns an arrayref of parameter objects for the required positional arguments.
method positional_optional() => ArrayRef[InstanceOf[Sub::Meta::Param]]
Returns an arrayref of parameter objects for the optional positional arguments.
method named() => ArrayRef[InstanceOf[Sub::Meta::Param]]
Returns an arrayref of parameter objects for the named arguments.
method named_required() => ArrayRef[InstanceOf[Sub::Meta::Param]]
Returns an arrayref of parameter objects for the required named arguments.
method named_optional() => ArrayRef[InstanceOf[Sub::Meta::Param]]
Returns an arrayref of parameter objects for the optional named arguments.
method invocant() => Maybe[InstanceOf[Sub::Meta::Param]]
First element of invocants.
method invocants() => ArrayRef[InstanceOf[Sub::Meta::Param]]
Returns an arrayref of parameter objects for the variables into which initial arguments are shifted automatically. This will usually return () for normal functions and ('$self') for methods.
method has_invocant() => Bool
Whether Sub::Meta::Parameters has invocant or not.
method set_invocant(InstanceOf[Sub::Meta::Param]) => $self method set_invocant($sub_meta_param_args) => $self
Setter for invocant:
my $invocant = Sub::Meta::Param->new(name => '$self'); my $p = Sub::Meta::Parameters->new(args => []); $p->set_invocant($invocant); $p->invocant; # => Sub::Meta::Param->new(name => '$self', invocant => 1); $p->nshift; # => 1
method args_min() => NonNegativeInt
Returns the minimum number of required arguments.
This is computed as follows: Invocants and required positional parameters count 1 each. Optional parameters don't count. Required named parameters count 2 each (key + value). Slurpy parameters don't count either because they accept empty lists.
method args_max() => NonNegativeInt
Returns the maximum number of arguments.
This is computed as follows: If there are any named or slurpy parameters, the result is Inf. Otherwise the result is the number of all invocants and positional parameters.
method is_same_interface(InstanceOf[Sub::Meta::Parameters] $other_meta) => Bool
A boolean value indicating whether Sub::Meta::Parameters object is same or not. Specifically, check whether args, nshift and slurpy are equal.
args
nshift
slurpy
method is_relaxed_same_interface(InstanceOf[Sub::Meta::Parameters] $other_meta) => Bool
A boolean value indicating whether Sub::Meta::Parameters object is same or not. Specifically, check whether args, nshift and slurpy are satisfy the condition of $self side:
$self
my $meta = Sub::Meta::Parameters->new(args => []); my $other = Sub::Meta::Parameters->new(args => ["Str"]); $meta->is_same_interface($other); # NG $meta->is_relaxed_same_interface($other); # OK. The reason is that $meta does not specify the elements of args.
method is_same_interface_inlined(InstanceOf[Sub::Meta::Parameters] $other_meta) => Str
Returns inlined is_same_interface string.
is_same_interface
method is_relaxed_same_interface_inlined(InstanceOf[Sub::Meta::Parameters] $other_meta) => Str
Returns inlined is_relaxed_same_interface string.
is_relaxed_same_interface
method error_message(InstanceOf[Sub::Meta::Parameters] $other_meta) => Str
Return the error message when the interface is not same. If same, then return empty string.
method relaxed_error_message(InstanceOf[Sub::Meta::Parameters] $other_meta) => Str
Return the error message when the interface does not satisfy the $self meta. If match, then return empty string.
method display() => Str
Returns the display of Sub::Meta::Parameters:
use Sub::Meta::Parameters; use Types::Standard qw(Num); my $meta = Sub::Meta::Parameters->new( args => [ { name => '$lat', type => Num, named => 1 }, { name => '$lng', type => Num, named => 1 }, ], ); $meta->display; # 'Num :$lat, Num :$lng'
method param_class() => Str
Returns class name of param. default: Sub::Meta::Param Please override for customization.
Function::Parameters::Info.
The methods in this module are almost copied from the Function::Parameters::Info methods.
Function::Parameters::Info
Copyright (C) kfly8.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
kfly8 <kfly@cpan.org>
To install Sub::Meta, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Sub::Meta
CPAN shell
perl -MCPAN -e shell install Sub::Meta
For more information on module installation, please visit the detailed CPAN module installation guide.