Это старая версия документа.
Общие вопросы
Форматирование кода
- В форматирование кода не использовать табов только двойные пробелы
- Форматирование if else
if (expr) { ... } else { ... }
- для удобства форматирования кода можно воспользоваться утилитой perltidy
https://support.abills.net.ua/perltidy.cgi
Общий шаблон функций
#********************************************************** =head2 test_function($attr) - Test function Arguments: $attr - Extra attributes TEXT - Some text Returns: TRUE or FALSE Example: test_function({ TEXT => 'Some text' }); =cut #********************************************************** sub test_function { my ($attr) = @_; print "Hello world!"; return 1; }
Рекомендации:
- Отделение шапки функции звёздочками (58 штук).
- Не игнорируйте создание комментариев перед началом функции.
- Называйте функции строчными буквами (маленькими) с разделением нижним подчёркиванием.
- По умолчанию, в случае успешного выполнения функция должна возвращать 1, в случае ошибки - 0.
- Минимизируйте использование глобальных переменных в функциях.
Дополнительные модули
загрузка дополнительных модулей Perl осуществляется командой
load_pmodule('Simple::XML');
(Библиотека Misc.pm)
Поиск в полях
Для удобства поиска было разработано несколько разделителей
Для цифровых полей
разделитель запятая (,) обозначает AND
пример: искать значения поля 56 и 66
56,66
разделитель запятая (;) обозначает OR
пример: искать значения поля 56 или 66
56;66
Тестирование
Для тестирования системы существует каталог с тестами abills/t
perl web.t
тестирование синтаксиса и стрес тест веб приложений
НЕ ИСПОЛЬЗОВАТЬ НА ПРОДАКШН СИСТЕМЕ
Тест проверки авторизации и аккаунтинга
t/Aaa.t
проверка DHCP авторизации используя преготовленный RAD PAIRS пакет dhcp.discover
perl Aaa.t dhcp_test dhcp.discovery
Запуск тестов для модуля или папки Tester
Создание демона
use Abills::Base; use Abills::Server; my $ARGV = parse_arguments(\@ARGV); # демонизация и ведение лога if (defined($ARGV->{'-d'})) { my $pid_file = daemonize(); # ведение лога #$Log->log_print('LOG_EMERG', '', "$prog_name Daemonize... $pid_file"); } #Стоп процесса elsif (defined($ARGV->{stop})) { stop_server(); exit; } #проверка не запущен ли уже elsif (make_pid() == 1) { exit; } #Таймаут между запусками 100 секунд my $UPDATE_TIME=100 while (1) { check_activity({ ALL => ($ARGV->{RECONFIG_PERIOD}) ? undef : $all }); sleep $UPDATE_TIME; }