是否有约定要求函数的必需参数列表?我希望能够调用一个子程序,告诉我在调用@repeat时需要提供$ phrase和$ times.
use strict;
use warnings;
sub repeat {
my $phrase = shift;
my $times = shift;
return $phrase x $times;
}
Run Code Online (Sandbox Code Playgroud)
看来你是在要求反省。有很多 OO 框架提供了它(例如Moose)。但是,如果您希望能够声明一个函数,然后在程序中检查它,那么Function::Parameters是一个合理的方法。
来自Function::Parameters::Info概要:
use Function::Parameters;
fun foo($x, $y, :$hello, :$world = undef) {}
my $info = Function::Parameters::info \&foo;
my $p0 = $info->invocant; # undef
my @p1 = $info->positional_required; # ('$x', '$y')
my @p2 = $info->positional_optional; # ()
my @p3 = $info->named_required; # ('$hello')
my @p4 = $info->named_optional; # ('$world')
my $p5 = $info->slurpy; # undef
my $min = $info->args_min; # 4
my $max = $info->args_max; # inf
my $invocant = Function::Parameters::info(method () { 42 })->invocant; # '$self'
my $slurpy = Function::Parameters::info(fun {})->slurpy; # '@_'
Run Code Online (Sandbox Code Playgroud)
::Info 模块中的自省功能实际上是使用 Moose 实现的。