Сигнатуры методов были добавлены в Perl еще в версии 5.20(2014), но они носили экспериментальный характер и требовали специальную прагму use feature 'signatures';. И только в версии 5.36(2022) они стали включаться при указании версии прагмой use v5.36; . Таким образом для любого нового кода, который использует perl не ниже этой версии, можно использовать синтаксис для указания параметров методов.
Как было раньше:
sub foo {
die "Too many arguments for subroutine" unless @_ <= 2;
die "Too few arguments for subroutine" unless @_ >= 2;
my $left = $_[0];
my $right = $_[1];
return $left + $right;
}
Как можно теперь:
sub foo ($left, $right) {
return $left + $right;
}
Если нужно переменное число аргументов или именованые аргументы:
sub foo ($filter, @inputs)
sub foo ($filter, %inputs)
Можно задавать значения по-умолчанию:
sub get_gid ($left, $right = 1000) {
return $left + $right;
}
Начиная с версии 5.38 можно явно задавать дефолтные значения для пропущенных аргументов:
sub print2 ($string //= 'debug')
и для переданных аргументов со значением false:
sub print2 ($string ||= 'none')