Нет, удаление ключевого слова sub
, безусловно, не решение. Если изменить это:
sub func([email protected]) {
# ...
}
к этому:
func([email protected]) {
# ...
}
perlcritic перестает жаловаться на прототипе, - но я думаю, что это просто глюк в perlcritic. Без ключевого слова sub
это уже не определение подпрограммы; это синтаксическая ошибка, так как вы увидите, пытаетесь ли вы ее запустить или проверьте ее с помощью perl -cw
. Это не проблема perlcritic, чтобы проверить, действительно ли ваш код Perl; он, по-видимому, предполагает, что это так, а затем предупреждает вас о проблемах стиля. Если вы подаете недействительный Perl, все ставки отключены.
Общая мудрость в наши дни заключается в том, что использование прототипов Perl обычно не является хорошей идеей.
Perlcritic основан на книге "Perl Best Practices", Дамиан Конвей. Раздел, начинающийся на стр. 194, называется «Не использовать прототипы подпрограмм».
Книга не является общедоступной, поэтому я не могу цитата или ссылка на раздел здесь, но хроматической имеет blog entry «Проблема с прототипами», который говорит, между прочим:
Главная проблема с прототипами заключается в том, что они ведут себя по-другому, чем большинство людей ожидают, когда они впервые столкнутся с ними. Прототипы могут изменять синтаксический анализ последующего кода, и они могут принуждать типы аргументов . Они не служат документацией для количества или типов аргументов аргументов , и они не сопоставляют аргументы с указанными параметрами .
Это легко предположить, что прототипы в Perl похожи на прототип Си, который объявляет количество и тип (ы) (и, необязательно, имена) аргументов, которые ожидают функция. На самом деле они совсем разные. Их основная цель - написать подпрограммы Perl, которые имитируют поведение встроенных функций, например, не сглаживая массивы в списки.
Смотрите также perldoc perlsub
:
Все это очень мощный, конечно, и должен использоваться только в умеренности, чтобы сделать мир лучше.
контекста, пожалуйста. Включите некоторый код, чтобы мы могли видеть, что происходит. –
Сначала вы можете сначала начать чтение учебника Perl или вводной книги. –