假设我有
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
答案 0 :(得分:5)
带有子例程签名的可选参数需要使用= default_value_expression
完成的已定义默认值。您可以将其硬设置为undef
:
sub foo ($opt1, $opt2 = undef) {
say $opt1 if $opt2;
}
答案 1 :(得分:3)
您还可以通过以数组结尾的签名来允许任意数量的可选参数,这将使所有剩余的参数变得残酷,并且也不允许使用任何值,例如正常的数组分配。
sub foo ($opt1, @opts) {