Это старая версия документа.


Общие вопросы

Форматирование кода

  • В форматирование кода не использовать табов только двойные пробелы
  • Форматирование 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;
}

Рекомендации:

  1. Отделение шапки функции звёздочками (58 штук).
  2. Не игнорируйте создание комментариев перед началом функции.
  3. Называйте функции строчными буквами (маленькими) с разделением нижним подчёркиванием.
  4. По умолчанию, в случае успешного выполнения функция должна возвращать 1, в случае ошибки - 0.
  5. Минимизируйте использование глобальных переменных в функциях.

Дополнительные модули

загрузка дополнительных модулей 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

Запуск тестов для модуля или папки

[[abills:docs:development:tester|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;
}