#perl
#perl
Вопрос:
Предполагая, что в файле есть только один package
, имеет ли значение порядок или следующий шаблон Perl? если нет технических причин, есть ли какие-либо эстетические?
use 5.006;
use strict;
use warnings;
package foo;
Ответ №1:
Порядок имеет значение, если какая-либо часть вашей boilerplate импортирует какие-либо подпрограммы или переменные или выполняет что-либо сложное с пространством имен вызывающей стороны.
Если у вас войдет в привычку размещать его перед именем пакета, то однажды, когда вы захотите добавить его use List::Util 'reduce';
в свою базовую таблицу, подпрограмма будет импортирована в main
вместо foo
. Таким образом, пакет foo
не будет reduce
импортирован, и вы можете некоторое время ломать голову, пытаясь выяснить, почему он не работает.
Причина, по которой это не имеет значения для трех импортов, которые вы показали, заключается в том, что все они являются прагматическими модулями (или утверждениями), и их эффект ограничен лексической областью, а не областью пакета. Размещенные в верхней части файла, эти программы будут действовать для всего файла.
Ответ №2:
Порядок не имеет значения с технической точки зрения.
Моей практикой (и, черт возьми, тем, что используется в Perl Best Practices) всегда было помещать объявление пакета в самом начале. Я бы предложил пустую строку перед объявлением пакета, если перед ним что-то есть, чтобы оно выделялось.
Комментарии:
1. «Порядок не имеет значения с технической точки зрения» … за исключением случаев, когда это имеет значение. Это будет иметь значение для экспорта и при других обстоятельствах.