Допустим, у меня есть
use v5.026; use feature 'signatures'; sub foo ($opt1, $opt2) { say $opt1 if $opt2; } main::foo(1,2); main::foo(1);
Теперь я хочу позвонить foo с и без opt2:
foo
foo(1); # not currently accepted foo(1,2); # works fine
Можно также разрешить любое количество необязательных параметров, заканчивая подпись массивом, который отбрасывает все оставшиеся аргументы, а также не допускает значений, как при обычном присвоении массива.
sub foo ($opt1, @opts) {
Необязательные параметры с подписями подпрограммы требуют определенного значения по умолчанию, которое выполняется с = default_value_expression.Вы можете установить это значение на undef:
= default_value_expression
undef
sub foo ($opt1, $opt2 = undef) { say $opt1 if $opt2; }