У меня есть подпрограмма с прототипом, как это:подпрограммы с хэш и дополнительным скалярным аргументом
sub printFoo(%) {
my (%hashFoo)[email protected]_;
# do stuff with the hash
}
Но я хотел бы дополнительно пройти во втором скалярном аргументе, как это:
sub printFoo(%;$) {
my (%hashFoo,$optionalArg)[email protected]_;
# do stuff with the hash and the optional arg
}
I понять, что в режиме предупреждения это не-нет, но я не уверен, почему.
Я полагаю, что могу использовать глобальный флаг переменной, но любые советы о том, как элегантно выполнить этот тип сигнатуры функции?
Вы можете передать ссылку на хеш вместо самого хэша –
Прототипы не предназначены для создания сигнатур функций, а для того, чтобы функции функционировали как встроенные функции. Общие рекомендации, когда дело доходит до прототипов, не должны их использовать. Функция будет зачерпывать все @_ в% hashFoo. Вы можете проверить длину @_ и удалить необязательный аргумент перед распаковкой в% hashFoo. – xxfelixxx
Самое чистое решение состояло бы в том, чтобы необязательный аргумент просто включался в остальные (foo => bar, baz => 123, special => 3) params и просто обрабатывал специальный параметр (по умолчанию, если он не прошел) – xxfelixxx