如何在签名中声明可选参数?

时间:2019-02-03 21:12:30

标签: perl subroutine optional-parameters function-signature

假设我有

use v5.026;
use feature 'signatures';

sub foo ($opt1, $opt2) {
  say $opt1 if $opt2;
}

main::foo(1,2);
main::foo(1);

现在我想在有和没有opt2的情况下致电foo

foo(1);    # not currently accepted
foo(1,2);  # works fine

2 个答案:

答案 0 :(得分:5)

带有子例程签名的可选参数需要使用= default_value_expression完成的已定义默认值。您可以将其硬设置为undef

sub foo ($opt1, $opt2 = undef) {
  say $opt1 if $opt2;
}

答案 1 :(得分:3)

您还可以通过以数组结尾的签名来允许任意数量的可选参数,这将使所有剩余的参数变得残酷,并且也不允许使用任何值,例如正常的数组分配。

sub foo ($opt1, @opts) {