В ответе связанный SO Эрик иллюстрирует способ вызова подпрограммы, которая принимает массивы по ссылке в качестве аргументов и использует прототипы, чтобы код вызывающей стороны мог передавать имена массивов без использования оператора ссылки\@
;как встроенные модули, такие как push @array, $value
do.
# Original code:
sub Hello { my ($x_ref, $y_ref) = @_; ...}
Hello(\@x, \@y);
# Same thing using array ref prototype:
sub Hello (\@\@$) {...}
Hello(@x, @y);
Мой вопрос: считается ли это наилучшей практикой?И каковы рекомендации по использованию шаблона?
Кажется, что этот шаблон должен использоваться ТОЛЬКО для встроенных функций или для 100% подпрограмм, которые принимают аргументы массива во всем вашем коде.
В противном случае обслуживание кода и использование его подпрограмм становится хрупким, поскольку разработчик никогда не знает, следует ли принудительно вызывать конкретную подпрограмму для ссылки на массив или нет.
Дополнительная точка хрупкостив том, что вы запутались между выполнением таких вызовов и законным использованием двух массивов, объединенных в один с помощью оператора запятой.
С другой стороны, использование шаблона предотвращает ошибки «забыл сослаться на массив» и делаеткод, вызывающий подпрограммы, несколько более читабельный.
PS Мне не нужна книга Конвея, и я не припоминаю, обсуждал ли он когда-либо эту тему, чтобы опередить ответы RTFB.