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

Eva*_*oll 3 perl optional-parameters subroutine function-signature

让我说我有

use v5.026;
use feature 'signatures';

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

main::foo(1,2);
main::foo(1);
Run Code Online (Sandbox Code Playgroud)

现在我想foo使用和不使用opt2 进行呼叫:

foo(1);    # not currently accepted
foo(1,2);  # works fine
Run Code Online (Sandbox Code Playgroud)

Eva*_*oll 6

带子程序签名的可选参数需要使用定义的默认值= default_value_expression.您可以将其设置为undef:

sub foo ($opt1, $opt2 = undef) {
  say $opt1 if $opt2;
}
Run Code Online (Sandbox Code Playgroud)