Что не входит в отчет о проведении стратегического аудита |
Парадигмы программирования
3.6.2.2. Модули Perl
Дальнейшим развитием понятия библиотеки явилось понятие модуля. Модуль представляет собой библиотеку подпрограмм, организованную в виде отдельного пакета и обладающими дополнительными свойствами.
Модуль - это пакет. Пакет представляет собственное пространство имен, в котором для обозначения полного имени используется нотация вида "Родитель" :: "Сын" :: "Внук" :: "имя переменной". Модуль позволяет управлять экспортом своих имен в другие программы, объявляя, какие из них экспортируются по-умолчанию, а какие должны быть явно указаны при экспорте.
Под экспортом понимается предоставление возможности другим модулям использовать символы из пространства имен данного модуля. Соответственно под импортом понимается включение в собственное пространство имен символов из других модулей.
В целях управления экспортом каждый модуль должен иметь в себе метод import и специальные массивы @EXPORT и @EXPORT_OK.
- Вызывающая программа обращается для импорта имен метод import() ;
- Специальный массив @EXPORT содержит идентификаторы, экспортируемые по-умолчанию;
- Специальный массив @EXPORT_OK содержит идентификаторы, экспортируемые из модуля только в случае их явного указания;
- С появлением модулей появилась новая директива для подключения к основной программе: use().
3.6.2.2.1. Создание модуля
Для создания собственного модуля следует выполнить перечисленные ниже шаги:
- Создать каталог для хранения модулей. Правила именования каталогов см. [59];
- Создать пакет с нужным именем (например, "MyModule"), сохранить его в файле "MyModule.pm" и поместить их в этот каталог;
- Включить в файл имя встроенного модуля Exporter функцией require ;
- Включить в файл с модулем определение массива @ISA, содержащее название пакета Exporter;
- Определить имена функций для массивов: @EXPORT и @EXPORT_OK;
- Записать встроенные функции пакета.
Пример файла модуля: MyModule.pm
package MyModule; require Exporter; @ISA = qw( Exporter ); @EXPORT = qw(MyArgs); @EXPORT_OK = qw( $MyArgs @MyArgs %MyArgs ) sub MyArgs { "тело функции" } # Примечание: вместо имени MyArgs в пакете могут быть определены другие имена переменных и функций "тело не экспортируемых функций"
3.6.2.2.2. Подключение модуля
К основной программе модуль MyModule подключается при помощи директивы use. Эта директива содержит список импорта.
Обычно список импорта содержит имена переменных и функций. Кроме того, список импорта может содержать некоторые управляющие им спецификации. Спецификация :DEFAULT означает включение в список импорта всех элементов специального массива @EXPORT.
Пример файла основной вызывающей программы MyMain.pl
#!/usr/bin/perl use MyModule qw( :DEFAULT $MyArgs, @MyArgs %MyArgs ); "операторы вызывающей программы" …
3.6.2.3. Специальные функции-директивы Perl
3.6.2.3.1. Функция require
Функция загружает внешние функции из библиотеки Perl во время выполнения. Она используется для того, чтобы сделать библиотеку подпрограмм доступной для любого из макросов Perl.
СИНТАКСИС:
require [EXPR] require VERSION
Если параметр EXPR отсутствует, вместо нее используется специальная переменная $_.
Если параметр является числом, то он означает, что требуется версия интерпретатора Perl не ниже, чем указанная.
Если параметр является строкой, функция require включает в основную программу библиотечный файл, заданный параметром EXPR. При этом функция использует две встроенные переменные Perl: @INC и %INC.
Обычно имена библиотечных файлов имеют расширение: "*.pl". Поэтому для избегания неправильного толкования специальных знаков имена файлов следует заключать в кавычки, например:
require "myfile.pl"
Если аргумент является словом без расширения, не заключенным в кавычки, то ему добавляется расширение: "*.pm".
3.6.2.3.2. Переменные @INC и %INC
Специальный встроенный массив @INC содержит имена каталогов, в которых надо искать макросы языка Perl, в том числе и библиотеки, подлежащие в выполнению в конструкциях do, require и use. Первоначально он содержит:
- имена каталогов, переданные при запуске интерпретатору Perl в качестве параметра ключа -I;
- имена библиотечных каталогов по-умолчанию (зависит от операционной системы);
- символическое обозначение текущего каталога ".".
Специальный встроенный хэш-массив %INC содержит по одному элементу для каждого файла, включенного с помощью функций do и require. Ключом при этом будет имя файла в том виде, в каком она встретилась в функциях do и require, а значением - его полное путевое имя.
Встретив директиву require, интерпретатор Perl просматривает специальный хэш-массив %INC на присутствие в массиве имени файла. Если да, то выполнение функции завершается. Таким образом, файл может быть включен в список только один раз. Если же этого файла нет, то просматриваются все каталоги из массива @INC в поисках нужного файла. Если файл найден, то он выполняется, иначе генерируется ошибка.
3.6.2.3.3. Функция use
СИНТАКСИС:
use Module [LIST] use VERSION
Эта встроенная функция служит для загрузки модуля в момент его компиляции. Директива use автоматически экспортирует имена функций и переменных в основное пространство имен текущего пакета. Для этого оно вызывает метод: import() импортируемого модуля. Механизм экспорта имен рассчитан таким образом, что каждый экспортируемый модуль должен иметь свой модуль import(). Метод import() должен быть определен в самом экспортирующем модуле, или должен быть наследован у модуля Exporter.
Если первый аргумент директивы use является числом, он обозначает номер версии интерпретатора Perl. Если версия интерпретатора Perl меньше, чем указанная в директиве use, то интерпретатор завершает работу, выдавая сообщение об ошибке.
Если список импорта LIST отсутствует, из модуля Module будут импортированы те имена, которые перечислены в специальном массиве @EXPORT, определяемом в самом модуле Module.
Если список импорта задан, то вызывающую программу из модуля Module будут импортированы только те имена, которые содержатся в списке LIST.
3.6.3. Приложение III Тексты командных файлов Windows и Linux, с помощью которых можно облегчить выполнение сценариев на Perl.
01. Файл perlbat.bat
@echo off rem Диску Y: (он должен быть свободен) rem назначается имя текущего каталога rem командой subst Y: . subst Y: . rem Вызываем интерпретатор Perl rem Скрипт-файл на языке Perl должен rem находиться на C:\Perl\user\PerlScripts perl C:\Perl\user\PerlScripts\%1 Y:\%2 Y:\%3 Y:\%4 Y:\%5 Y:\%6 Y:\%7 Y:\%8 Y:\%9 REM Удаляем диск Y: subst Y: /D
С помощью данного файла можно запустить макрос, находящийся в директории: C:\Perl\user\PerlScripts (она должна быть сначала создана, и в нее скопированы файлы со скриптами), в качестве параметров к которому используются файлы из текущей директории.
В именах файлов не допускается использование кавычек.
Букве "Y:" не должно быть назначено имя сетевого или логического диска;
Данный файл используется в среде Microsoft Windows для интерпретатора ActiveState Perl 5.x.x.
02. Файл perlexe.bat
@echo off rem Диску Y: (он должен быть свободен) rem назначается имя текущего каталога rem командой subst Y: . subst Y: . rem Вызываем интерпретатор Perl rem Скрипт-файл на языке Perl должен rem находиться в той же директории, что и параметры: perl Y:\%1 Y:\%2 Y:\%3 Y:\%4 Y:\%5 Y:\%6 Y:\%7 Y:\%8 Y:\%9 REM Удаляем диск Y: subst Y: /D
С помощью данного файла можно запустить скрипт, находящийся в текущей директории (первый параметр, файл с расширением "*.pl"), в качестве параметров к которому используются файлы из текущей директории.
В именах файлов не допускается использование кавычек.
Букве "Y:" не должно быть назначено имя сетевого или логического диска;
Данный файл используется в среде Microsoft Windows для интерпретатора ActiveState Perl 5.x.x.
03. Файл perlbt.bat
@echo off rem Диску Y: (он должен быть свободен) rem назначается имя текущего каталога rem командой subst Y: . subst Y: . rem Вызываем интерпретатор Perl rem Скрипт-файл на языке Perl должен rem находиться на C:\Perl\user\PerlScripts perl C:\Perl\user\PerlScripts\%1 %2 %3 %4 %5 %6 %7 %8 %9 REM Удаляем диск Y: subst Y: /D
С помощью данного файла можно запустить скрипт, находящийся в директории: C:\Perl\user\PerlScripts (она должна быть сначала создана, и в нее скопированы файлы со скриптами), в качестве параметров к которому используются файлы из текущей директории.
Этот командный файл может запускаться только внутри других командных файлов.
В именах файлов допускаются кавычки, кроме имени файла с макросом (с расширением *.pl, первый параметр).
Букве "Y:" не должно быть назначено имя сетевого или логического диска;
Данный файл используется в среде Microsoft Windows для интерпретатора ActiveState Perl 5.x.x.
04. Файл perlex.bat
@echo off rem Диску Y: (он должен быть свободен) rem назначается имя текущего каталога rem командой subst Y: . subst Y: . rem Вызываем интерпретатор Perl rem Скрипт-файл на языке Perl должен rem находиться в той же директории, что и параметры: perl Y:\%1 %2 %3 %4 %5 %6 %7 %8 %9 REM Удаляем диск Y: subst Y: /D
С помощью данного файла можно запустить скрипт, находящийся в текущей директории (первый параметр, файл с расширением "*.pl"), в качестве параметров к которому используются файлы из текущей директории.
Этот командный файл может запускаться только внутри других командных файлов.
В именах файлов допускаются кавычки, кроме имени файла с макросом (с расширением *.pl, первый параметр).
Букве "Y:" не должно быть назначено имя сетевого или логического диска;
Данный файл используется в среде Microsoft Windows для интерпретатора ActiveState Perl 5.x.x.
05. Файл perlbat.sh
#/bin/sh # # @echo off # echo Вызываем интерпретатор Perl # echo Скрипт-файл на языке Perl должен # echo находиться на /home/имя_пользователя/bin/Perl/user/PerlScripts perl /home/имя_пользователя/bin/Perl/user/PerlScripts/$1 ./$2 ./$3 ./$4 ./$5 ./$6 ./$7 ./$8 ./$9
С помощью данного файла можно запустить скрипт, находящийся в директории: /home/имя_пользователя/bin/Perl/user/PerlScripts (она должна быть сначала создана, и в нее скопированы файлы со скриптами), в качестве параметров к которому используются файлы из текущей директории.
В именах файлов не допускается использование кавычек.
Данный файл используется в среде ALT Linux для интерпретатора Perl версии 5.x.x.
06. Файл perlexe.sh
#/bin/sh # # @echo off # echo Вызываем интерпретатор Perl # echo Скрипт-файл на языке Perl должен # echo находиться в той же директории, что и параметры: perl ./$1 ./$2 ./$3 ./$4 ./$5 ./$6 ./$7 ./$8 ./$9
С помощью данного файла можно запустить скрипт, находящийся в текущей директории (первый параметр, файл с расширением "*.pl"), в качестве параметров к которому используются файлы из текущей директории.
В именах файлов не допускается использование кавычек.
Данный файл используется в среде ALT Linux для интерпретатора Perl версии 5.x.x.