|
умолчанию имя main. На имя внутри модуля можно
ссылаться добавляя '::' после имени модуля.
Например:
$main::var1 - переменная в головном модуле.
::var1 - то же самое. Имя main можно опускать.
$модуль1::var1 - переменная в модуле 'модуль1'
$модуль1::модуль2::var1 - Модуль2 содержится в модуле 1.
Только идентификаторы начинающиеся с буквы или символа '_' хранятся
в пространтсве имен текущего модуля. Остальные хранятся в пространстве
головного модуля main.
Кроме этого имена STDIN, STDOUT, STDERR, ARGV, ARGVOUT, ENV, INC и SIG
так же хранятся в головном модуле.
Таблицы имен.
Все имена модуля хранятся в ассоциативном массиве (хеше) с именем
модуля к которому добавлены символы "::". Таким образом имена
головного модуля хранятся в %main:: , модуля 'mod1' в %mod1::
и т.д. Выражение вида *имя указывает значение элемента хеша 'имя'
это удобно для определения констант.
Например:
*pi = \3.14159;
Здесь переменная $pi - это константа пи которую уже нельзя изменить.
Конструкторы и деструкторы.
Конструктор - это подпрограмма которая выполняется в момент создания
объекта, а деструктор - удаления объекта. Для модуля это подпрограммы
с именами BEGIN и END. При определении этих подпрограмм слово
sub можно опускать.
Конструктор BEGIN выполняется сразу как только возможно т.е. как только
он определен даже не завершая дальнейший разбор программы. Можно указать
несколько блоков BEGIN. Они будут выполняться один за другим в порядке
определения.
Деструктор END выполняется последним как только возможно т.е. при
завершении работы интерпрератора. Можно указать несолько блоков END
при этом они будут выполняться в обратном определению порядке.
Классы.
В Пел нет специального синтаксиса для классов. Но функционально
полноценными классами могут быть модули. При этом подпрограммы модуля
становятся методами, а с помощью массива @ISA можно реализовать
механизм наследования в классах. Более подробно классы описаны отдельно.
Создание библиотеки.
Если вы хотоите создать модуль отдельным файлом и использовать
как библиотеку подпрограмм, при этом вызывать подпрограммы библиотеки
не указывая имени модуля, вам необходимо оформить модуль следующим
образом:
package имя_мод
|
|