Модули

1. Наименование модулей в стиле MyModuleName

Модули .pm (и, соответственно, файлы модулей) следует называть в стиле MyModuleName, т.е. слова склеиваются между собой, каждое слово записывается с заглавной буквы. В то время как исполняемые файлы ("скрипты"), следует именовать маленькими буквами, с применением знака подчёркивания, и использовать суффикс .pl: clear_cache.pl.

2. Комментарий или POD вначале модуля

Вначале модуля должен быть комментарий или кусок POD, описывающий назначение модуля.

3. После последней строки модуля обязателен перенос

Последняя строка кода модуля обязательно заканчивается переносом строки.

4. use Modern::Perl;

Обязательное включение всех предупреждений и максимальное ужесточение автоматического контроля:

use Modern::Perl;

## Ранее использовали
# use strict;
# use warnings;

5. Динамическая подгрузка тяжёлых опциональных модулей

Если требуется использовать "тяжёлую" библиотеку или модуль (скажем, отъедающую 5 Мб памяти и более), при этом, необходимость в этой библиотеке возникает очень редко, при определённых условиях — лучше загружать такой модуль динамически, когда в нём возникает необходимость:

if ($condition) {
    require Compress::Zlib;
    # import Compress::Zlib ();
}

6. Не стоит злоупотреблять экспортированием функций

Не стоит экспортировать функции направо и налево без серьёзной необходимости. Во-первых, в этом случае засоряется namespace модулей, а во-вторых голое название функции без квалификатора может ввести в заблуждение: не очевидно, в каком модуле функция определена — это увеличивает время на понимание чужого (да и своего) кода и время на отладку.

Используйте либо название функции с полным квалификатором:

MyModule::mysub()

либо используйте ОО-интерфейс в Ваших модулях:

my $obj = MyObject->new;
$obj->method();

Если уж Вы экспортируете какие-либо функции, лучше делать их экспорт опциональным (EXPORT_OK вместо EXPORT)

7. Не стоит злоупотреблять импортированием функций

При импорте модуля обязательно указывайте список используемых символов из него. Это упрощает определение списка зависимостей, и дальнейший рефакторинг кода. Кроме того, если модуль по умолчанию экспортирует много символов, скорость его импорта падает где-то на треть.

use POSIX qw( floor ceil ); # Правильно
use POSIX; # НЕПРАВИЛЬНО

8. Придерживайтесь синтаксиса прямого обращения к объектам

Используйте оператор "стрелка" для обращения к объекту или классу.

Class->class_method;
my $obj = Class->new();
$obj->method;

Косвенное обращение к классу или объекту может привести к запутыванию инерпретатора Perl.
Такое написание нежелательно:

my $obj = new Class $value1, $value2;
method $obj;

Вернуться к списку