Модули .pm (и, соответственно, файлы модулей) следует называть в стиле MyModuleName, т.е. слова склеиваются между собой, каждое слово записывается с заглавной буквы. В то время как исполняемые файлы ("скрипты"), следует именовать маленькими буквами, с применением знака подчёркивания, и использовать суффикс .pl: clear_cache.pl.
Вначале модуля должен быть комментарий или кусок POD, описывающий назначение модуля.
Последняя строка кода модуля обязательно заканчивается переносом строки.
Обязательное включение всех предупреждений и максимальное ужесточение автоматического контроля:
use Modern::Perl; ## Ранее использовали # use strict; # use warnings; |
Если требуется использовать "тяжёлую" библиотеку или модуль (скажем, отъедающую 5 Мб памяти и более), при этом, необходимость в этой библиотеке возникает очень редко, при определённых условиях — лучше загружать такой модуль динамически, когда в нём возникает необходимость:
if ($condition) { require Compress::Zlib; # import Compress::Zlib (); } |
Не стоит экспортировать функции направо и налево без серьёзной необходимости. Во-первых, в этом случае засоряется namespace модулей, а во-вторых голое название функции без квалификатора может ввести в заблуждение: не очевидно, в каком модуле функция определена — это увеличивает время на понимание чужого (да и своего) кода и время на отладку.
Используйте либо название функции с полным квалификатором:
if ($condition) { require Compress::Zlib; # import Compress::Zlib (); } |
либо используйте ОО-интерфейс в Ваших модулях:
my $obj = MyObject->new; $obj->method(); |
Если уж Вы экспортируете какие-либо функции, лучше делать их экспорт опциональным (EXPORT_OK вместо EXPORT).
При импорте модуля обязательно указывайте список используемых символов из него. Это упрощает определение списка зависимостей, и дальнейший рефакторинг кода. Кроме того, если модуль по умолчанию экспортирует много символов, скорость его импорта падает где-то на треть.
use POSIX qw( floor ceil ); # Правильно use POSIX; # НЕПРАВИЛЬНО |
Используйте оператор "стрелка" для обращения к объекту или классу.
Class->class_method; my $obj = Class->new(); $obj->method; |
Косвенное обращение к классу или объекту может привести к запутыванию инерпретатора Perl.
Такое написание нежелательно:
my $obj = new Class $value1, $value2; method $obj; |