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

Perl 如何在签名中声明可选参数?,perl,subroutine,optional-parameters,function-signature,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); 现在我想调用foo,使用和不使用opt2: foo(1); # not currently accepted foo(1,2); # works fine 带有子例程签名的可选参数需要定义的默认值,该默认值是通过=default\u val

假设我有

use v5.026;
use feature 'signatures';

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

main::foo(1,2);
main::foo(1);
现在我想调用
foo
,使用和不使用opt2:

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

带有子例程签名的可选参数需要定义的默认值,该默认值是通过
=default\u value\u expression
完成的。您可以将其硬设置为
unde

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

您还可以通过使用数组结束签名来允许任意数量的可选参数,这将使任何剩余的参数都变得模糊,并且与普通数组赋值一样,不允许任何值

sub foo ($opt1, @opts) {
查阅特别是,“通过提供默认值,位置参数成为可选参数”。(但还有其他各种关于签名的有用信息)