Поскольку механизм передачи аргументов подпрограммам в Perl представляет собой единый список, аргументы являются позиционными.Это затрудняет предоставление значений по умолчанию.Некоторые встроенные модули (например, substr
) обрабатывают это, упорядочивая аргументы в соответствии с вероятностью их использования - менее часто используемые аргументы появляются в конце и имеют полезные значения по умолчанию.
Более чистый способ сделатьэто с помощью именованных аргументов.Perl не поддерживает именованные аргументы как таковые , но вы можете эмулировать их с помощью хэшей:
use 5.010; # for //
sub hello {
my %arg = @_;
my $say = delete $arg{say} // 'Hello';
my $to = delete $arg{to} // 'World!';
print "$say $to\n";
}
hello(say => 'Hi', to => 'everyone'); # Hi everyone
hello(say => 'Hi'); # Hi world!
hello(to => 'neighbor Bob'); # Hello neighbor Bob
hello(); # Hello world!
Примечание: определенный оператор или //
был добавлен в Perl v5.10,Это более надежно, чем использование логического или (||
), так как оно не будет иметь значения по умолчанию для логически ложных значений ''
и 0
.