НАЗВАНИЕ

perlmod - модули Perl (пакеты и таблицы симолов)

ОПИСАНИЕ

Is this the document you were after?

Существуют другие документы, которые могут содержать нужную вам иинформацию: There are other documents which might contain the information that you're looking for:

В этом документе

Пакеты, пространства имен и некоторая информация о классах в Perl.

perlnewmod

Руководство по созданию современных модулей.

perlmodstyle

Лучшие практики по созданию современных модулей.

Пакеты

Perl предоставляет механизм изменения пространства имен для защиты пакетов от засорения друг друга всеми своими переменными. Фактически, в Perl нет такой вещи, как глобальные переменные. Инструкция package объявляет единицу компиляции, находящуюся в данном пространстве имен. Область действия объявления пакета начинается от самого объявления и простирается дол конца окружающего блока, eval или файла, взависимости от того, что будет первым (такую же область имеют операторы my() и local()). Неквалифицированные динамические идентификаторы будут находится в этом пространстве имен, за исключением тех немногих идентификаторов, которые, будучи неквалифицированными, по умолчанию находятся в пакете main, как будет описано ниже. Инструкция package затрагивает только на динамические переменные--включая те, к которым применили local()--но не на лексические переменные, создаваемые при помощи my(). Обычно package будет первым объявлением в файле, который вы подключаете используя операторы do, require или use. Вы можете перключится в пакет в различных местах; это переключение влият только на то, какая таблица сиволов будет использоваться компилятором до конца этого блока. На переменные и файловые указатели в пакете можно ссылаться из других пакетов, предваряя имя переменной именем пакета и двойным двоеточием: Package::Variable. Если имя пакета отсутствует, подразумевается пакет main. То есть $::sail эквивалентно $main::seil.

В старину разделителем пакета служила одинарная кавычка, но сейчас предпочтительно использовать двойное двоеточие, оно более человекочитаемо, и также лучше читается в макросах emacs. Также два двоеточия позволяют С++ программистам чувствовать, что они понимают, что происходит--в отличии от разделителя одинарная кавычка, позволявшей испытывать похожее чувство Ada программистам. Поскольку старомодный синтаксис все еще поддерживается для обеспечения обратной совместимости, если вы попытаетесь использовать подобную строку "This is $owner's house", вы обратитесь к $owner::s; то есть, к переменной $s в пакете owner, что вероятно не то, что вы хотели. Используйте фигурные скобки для устранения неоднозначности, как здесь "This is ${owner}'s house".

Пакеты сами могут содержать разделители пакетов, например $OUTER::INNER::var. Однако это ничего не подразумевает о порядке поиска имен. Нет относительных пакетов: все символы либо локальны в текущем пакете, либо должны быть полностью квалифицированы от внешнего пакета. Например, в пакете OUTER ничто не позволит $INNER::var относиться к $OUTER::INNER::var. INNER относится к полностью отдельному глоьбальному пакету.

В таблице символов пакета хранятся только идентификаторы, начинающиеся с буквы или знака подчеркивания. Все другие символы, включая пунктуационные переменные подобно $_, хранятся в пакете main. В добавок, идентификаторы STDIN, STDOUT, STDERR, ARGV, ARGVOUT, ENV, INC и SIG, если они не квалифицированы, принудительно помещаются в main, даже когда они используются для других целей, нежели предназначены изначально. Если вы назовете свои пакеты m, s или y, вы не сможете использовать квалифицированую форму идентификатора, поскольку она будет интерпретирована как поиск по шаблону, замена или транслитерация, соответственно.

Переменные, начинающиеся с нижнего подчеркивания, ранее использовались для принудительного помещения в пакет main, но мы решили, что они более полезны разработчикам пакетов для индикации имен приватных переменных и методов. Однако, имена переменных и функций, состоящие из едиственного _, такие как $_ или sub _, по прежнему принудительно находятся в пакете main. Смотрите также "The Syntax of Variable Names" in perlvar.

Обрабатываемые eval-м строки компилируются в том же пакете, в котором компилируется eval(). (Однако, при присваивании $SIG{} полагается, что обработчик сигнала определен в пакете main. Квалифицируйте имя обработчика сигнала, если хотите использовать обработчик сигнала из пакета.) Для примера взгляните на perldb.pl из библиотеки Perl. В начале работы он переключается на пакет DB, что бы отладчик не мешал работать с переменными в отлаживаемой программе.