Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Andrey Sapozhnikov                   2:5020/400     31 Jul 2002  18:49:26
 To : Artem Chuprina
 Subject : Re: export
 -------------------------------------------------------------------------------- 
 
 Artem Chuprina wrote:
 
 > Здравствуй, Vitaly Gonchar.
 > 
 > VG> хочу сделать файлик, где описать все мои константы, а потом из остальных
 > VG> программ к ним обращаться (типа файлов .h в С)
 > 
 > VG> в вызывающей программе пишу
 > VG> use myheader;
 > 
 > VG> $vvv = myheader::vvv;
 > 
 > Hу, для начала $vvv = $myheader::vvv;
 > 
 > Для потом, а зачем? Это все-таки не C, а злоупотребление глобальными
 > переменными не рулез.
  > ...
 
 Приведенный человеком пример не есть "злоупотребление глобальными
 переменными", а как раз-таки использование констант. И вызов
 
 $vvv = myheader::vvv;
 
 он написал правильно. Осталось только подсказать ему, что константы
 описывают как функции с пустым списком прототипов, возвращающие
 константные значения. Такие функции - потенциальные кандидаты на
 inline. Можно, (а если не закладываться на поддержку старых
 версий perl, то и, наверное, уже нужно) использовать модуль
 constant.pm (см. perldoc constant). Пример:
 
 package MyAppErrors;
 use strict;
 
 sub ERR_BADPASSWORD() { -1; }
 sub ERR_CLOSEDACCOUNT() { -2; }
 ...
 1;
 
 либо:
 
 package MyAppErrors;
 use strict;
 
 use constant ERR_BADPASSWORD => -1;
 use constant ERR_CLOSEDACCOUNT => -2;
 ...
 1;
 
 Модуль Exporter нужен только в случае, если Вы собрались
 экспортировать данные функции в пространство имен вызывающего
 контекста. Простейший пример:
 
 package MyAppErrors;
 use strict;
 use base qw(Exporter);
 our @EXPORT = qw(ERR_BADPASSWORD ERR_CLOSEDACCOUNT);
 our @EXPORT_OK = qw(ERR_UNKNOWN ERR_FATALCORRUPTION);
 
 use constant ERR_BADPASSWORD => -1;
 use constant ERR_CLOSEDACCOUNT => -2;
 use constant ERR_UNKNOWN => -3;
 use constant ERR_FATALCORRUPTION => -4;
 use constant MAXERRNUM => -4;
 
 1;
 
 ---------- и в вызывающем контексте ------------
 use MyAppErrors qw(ERR_UNKNOWN);
 
 ...
 if ($pass ne $user->pass) {
      log("damn...");
      return ERR_BADPASSWORD; # Может быть использовано без указания package,
                              # поскольку импортировано по умолчанию
 } else {
      return ERR_UNKNOWN;     # Может быть использовано без указания package,
                              # поскольку импортировано по требованию
 }
 ...
 return MyAppErrors::ERR_FATALCORRUPTION; # не импортирована, указываем package
 
 ------------
 
 Андрей
 
 P.S. чуть не забыл! см. perldoc Exporter ;-)
 
 --- ifmail v.2.15dev5
  * Origin: Demos online service (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 export   Vitaly Gonchar   30 Jul 2002 16:23:18 
 Re: export   Artem Chuprina   30 Jul 2002 18:11:44 
 Re: export   Andrey Sapozhnikov   31 Jul 2002 18:49:26 
Архивное /ru.perl/52846d15966a.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional