Должен ли шаблон Perl идти до или после объявления пакета?

#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. «Порядок не имеет значения с технической точки зрения» … за исключением случаев, когда это имеет значение. Это будет иметь значение для экспорта и при других обстоятельствах.