perl获取所需参数的列表

nan*_*ndo 5 perl

是否有约定要求函数的必需参数列表?我希望能够调用一个子程序,告诉我在调用@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)

w.k*_*w.k 6

当然,您可以根据自己的需要自行构建一些控制机制.但是有一些模块可以帮助您完成子程序签名.我会提供3个:

  1. 签名,最简单的
  2. Kavorka,带型式检查
  3. 方法:: OO方法的签名


Ben*_*imm 4

看来你是在要求反省。有很多 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 实现的。