Опубликован: 23.10.2009 | Доступ: свободный | Студентов: 2689 / 80 | Оценка: 4.28 / 4.22 | Длительность: 17:27:00
Специальности: Программист
Лекция 3:

Парадигмы программирования

< Лекция 2 || Лекция 3: 1234 || Лекция 4 >
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.

3.6.4. Приложение IV. Описание языков командных оболочек MS-DOS Command Shell и bash shell Linux

Примечание: В данной версии лекций приложение № IV не включено. Его предварительный текст смотри по адресу Интернета http://simple-clerk.narod.ru/LEARNING/PROG_WRI/files/03app004.hjt
< Лекция 2 || Лекция 3: 1234 || Лекция 4 >
Олег Посысаев
Олег Посысаев
Россия, Санкт-Петербург
Владислав Щепалин
Владислав Щепалин
Россия, Изобильный