Анимация
JavaScript
|
Главная Библионтека большинство модулей. Но некоторые задачи - и некоторые программисты - связываются с хитроумными модулями, содержащими объекты. Объектно-ориентированный модуль редко использует механизм импортирования/экспортирования. Вместо этого он предоставляет объектно-ориентированный интерфейс с конструкторами, деструкторами, методами, наследованием и перегрузкой операторов. Данная тема рассматривается в главе 13. Пользуйтесь готовыми решениями CPAN (Comprehensive Perl Archive Network) представляет собой гигантское хранилище практически всех ресурсов, относящихся к Perl, - исходные тексты, документацию, версии для альтернативных платформ и, что самое главное, модули. Перед.тем как браться за новый модуль, загляните на CPAN и поищите там готовое решение. Даже если его не существует, может найтись что-нибудь похожее, полезное в вашей работе. На CPAN можно обратиться по адресу http: www.perl.com/CPAN/CPAN.html (или ftp: www.perl.com/pub/perl/CPAN/CPAN.htmr). В этом файле кратко описан каждый модуль, входящий в CPAN. Поскольку файл редактируется вручную, в нем могут отсутствовать описания последних модулей. Необходимую информацию можно получить по адресу CPAN/RECENTили CPAN/RECENT.html. Каталог модулей находится по адресу CPAN/modules. В нем содержатся индексы всех зарегистрированных модулей, а также имеются три удобных подкаталога: byjnodule (сортировка по модулям), byjauthor (сортировка по авторам) и by category (сортировка по категориям). В каждом подкаталоге перечислены одни и те же модули, но подкаталог by category, вероятно, наиболее удобен. Находящиеся в нем подкаталоги соответствуют конкретным прикладным областям, среди которых - интерфейсы операционной системы, сетевые взаимодействия, модемы и межпроцессные коммуникации, интерфейсы баз данных, пользовательские интерфейсы, интерфейсы к другим языкам программирования, аутентификация, безопасность и шифрование. World Wide Web, HTML, HTTP, CGI и MIME, графика, операции с растровыми изображениями, построение графиков - и это лишь малая часть. > Смотри также- Разделы «Packages» и «Modules» Bperlmod(l). 12.1. Определение интерфейса модуля Проблема Требуется определить внешний интерфейс модуля с помощью стандартного модуля Exporter. Решение Включите в файл модуля (например, YourModule.pm) приведенный ниже фрагмент. Многоточия заполняются в соответствии с инструкциями, приведенными в разделе «Комментарий». 12.1. Определение интерфейса модуля 411 package YourModule; use strict; use vars qw(@ISA ©EXPORT @EXP0RT 0K %EXPORT TAGS SVERSION); use Exporter; SVERSION = 1.00; ©ISA = qw(Exporter); ©EXPORT = qw(...); @EXP0RT 0K = qw(...); %EXPORT TAGS = ( TAG1 => [...], TAG2 => [...], ######################## # Ваш программный код ##«##################### # Или выше # Автоматически экспортируемые имена # (набор ;DEFAULT) # Имена, экспортируемые по запросу # Определение имен для наборов 1; й Так должна выглядеть последняя строка Чтобы воспользоваться модулем YourModule в другом файле, выберите один из следующих вариантов: use YourModule; use YourModule qw(,,.); use YourModule (); use YourModule qw(:TAG1); Й Импортировать в пакет имена по умолчанию # Импортировать в пакет перечисленные имена й Не импортировать никаких имен й Импортировать набор имен Комментарий Внещний интерфейс модуля определяется с помощью стандартного модуля Exporter. Хотя в пакете можно определить собственный метод import, почти никто этого не делает. Когда в программе встречается команда use YourModule, в действительности выполняется команда require "YourModule. pm", за которой вызывается метод YourModule->import(). Это происходит во время компиляции. Метод import, унаследованный из пакета Exporter, ищет в ващем пакете глобальные переменные, управляющие его работой. Поскольку они должны быть пакетными, мы используем директиву use vars, чтобы избежать проблем с use strict. Это следующие переменные. $VERSION При загрузке модуля можно указать минимальный допустимый номер версии. Если версия окажется ниже, use инициирует исключение. use YourModule 1.86 й Если $VERSION < 1.86, происходит исключение $EXPORT Массив содержит список функций и переменных, экспортируемых в пространство имен вызывающей стороны, чтобы в дальнейшем к ним можно было обращаться без уточнения имени пакета. Обычно используется список в форме qw(): laEXPORT = qw(&F1 &F2 @Llst) ©EXPORT = qw( Fl F2 @List) # To же После выполиения простой команды use YourModule вы сможете вызывать функцию &F1 в виде F10 вместо YourModule F1() и обращаться к массиву @List вместо laYourModule List. Амперсанд (&) перед спецификацией экспортированной функции необязателен. Чтобы загрузить модуль во время компиляции, но при этом запретить экспортирование каких-либо имен, воспользуйтесь специальной формой с пустым списком use Exporter(). (a)EXPORT OK Массив содержит имена, которые могут импортироваться по конкретному запросу. Если массив заполнен следующим образом: @EXP0RT 0K = qw(0p Func %ТаЫе), то пользователь сможет загрузить модуль командой: use YourModule qw(Op Func %ТаЫе Fl) И импортировать только функцию Op Func, хэш %ТаЫе и функцию F1. Функция F1 присутствует в массиве @EXPORT. Обратите внимание: команда не выполняет автоматического импортирования F2 или @List, хотя эти имена присутствуют в (ЭЕХРОЯТ. Чтобы получить все содержимое @EXPORT и плюс к тому все дополнительное содержимое @EXPORT OK, воспользуйтесь специальным тегом DEFAULT: use YourModule qw( DEFAULT %ТаЫе) %EXPORT TAGS Хэш используется большими модулями (типа CGI или POSIX) для высокоуровневой группировки взаимосвязанных импортируемых имен Его значения представляют собой ссылки на массивы символических имен, каждое из которых должно присутствовать либо в @EXPORT, либо в @EXPORT OK. Приведем пример инициализации: %EXP0RT TAGS = ( Functions => [ qw(F1 F2 Op Func) ] Variables => [ qw(@List %Table) ], Импортируемое имя с начальным двоеточием означает импортирование группы имен. Например, команда: use YourModule qw( Functions %Table) импортирует все имена из @{ SYourModule EXPORT TAGS{Functions) ), то есть функции F1, F2 и Op Func, а затем - хэш %ТаЬ1е. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 [ 131 ] 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 |