Добрый день. Я сейчас прохожу курс повышения квалификации - "Профессиональное веб-программирование". Мне нужно получить диплом по этому курсу. Я так полагаю нужно его оплатить чтобы получить диплом о повышении квалификации. Как мне оплатить этот курс?
|
Библиотеки, пакеты и модули
Подключение программ при компиляции
Хотя есть немало случаев, когда нужно загружать внешние программы во время выполнения программы, гораздо чаще библиотеки модулей подключаются во время компиляции. Это делается с помощью команды use. Преимущество использования use по сравнению с require заключается в том, что все возможные ошибки выявляются до выполнения программы на этапе компиляции. Кроме того, команда use выполняет импорт имен, определенных в подключаемом модуле, после чего их можно удобно употреблять без имени пакета.
use Package::Subpackage::Module; # подключить модуль
С помощью команды use также подключаются многие стандартные модули Perl. Другие примеры использования команды use встретятся по ходу этой лекции при обсуждении работы с модулями.
Команды require и use также применяются для контроля версии Perl, требуемой для компиляции и выполнения программы. Для этого параметром каждой из этих команд должно быть число, интерпретируемое как минимальный номер версии, который нужен, чтобы программа корректно выполнялась. Например:
use 5.005; # использовать версию Perl не ниже указанной require 5.008007; # использовать Perl 5.8.7 и выше
Если не выполняется требование, заданное в use, то компиляция завершится аварийно. Невыполнение требования, указанного в require, приведет к ошибке во время выполнения программы.
Модули
Модуль - это специальным образом оформленная библиотека подпрограмм, предназначенных для многократного использования. Модули появились в Perl, начиная с версии 5, и с тех пор подавляющее большинство универсальных Perl-программ оформляются в виде модулей. В отличие от обычных библиотек, модули имеют внешний интерфейс - ограниченный набор переменных и функций, предназначенных для использования другими программами. Доступ к внешнему интерфейсу модуля в вызывающей программе организуется с помощью механизма импортирования имен, реализованному в стандартном модуле Exporter. Приведем пример оформления типичного модуля (сохраненного в файле Module.pm):
package Module; # пространство имен модуля use 5.006001; # использовать версию Perl не ниже указанной use strict; # включить дополнительные проверки use warnings; # и расширенную диагностику our $VERSION = '1.00'; # версия модуля require Exporter; # загрузить стандартный модуль Exporter our @ISA = qw(Exporter); # неизвестные имена искать в нем our @EXPORT = qw( subroutine ); # имена, экспортируемые по умолчанию our @EXPORT_OK = qw( $variable ); # имена, экспортируемые по запросу $Module::variable = 'переменная 1'; # скаляр из модуля Module sub subroutine { # подпрограмма из модуля Module return "'подпрограмма 1 $Module::variable'"; } 1; __END__
Автоматически сгенерировать скелет нового модуля (а также сопутствующие файлы, необходимые для подготовки модуля к распространению) можно с помощью утилиты h2xs, входящей в состав дистрибутива Perl. Например, создать модуль с именем 'Module::Name' версии 1.00 можно такой командой:
h2xs -AX -n Module::Name -v 1.00
Если программа, которая обращается к этому модулю, использует только экспортированные по умолчанию имена, то используется форма команды use только с именем модуля:
use Module; # подключить модуль и # импортировать из него имена по умолчанию subroutine(); # вызвать подпрограмму &Module::subroutine()
В программе, в которой нужно явно затребовать перечисленные имена (с помощью метода import ), применяется форма команды use со списком импортируемых имен:
use Module qw($variable); # затребовать импорт нужных имен print "$variable\n"; # скаляр $Module::variable
Антонимом команды use является команда no, которая неявно выполняет вызов метода unimport для отмены импортированных имен. В команде use также можно проверить, что версия подключаемого модуля соответствует требованиям. Для этого после имени модуля указывается минимальная требуемая версия:
use Module 1.00; # подключить модуль не ниже указанной версии
Помимо процедурного, модули могут иметь объектно-ориентированный интерфейс, который будет рассмотрен в следующей лекции.