Шаг 136.
Модули. Прагма-библиотеки

    На этом шаге мы рассмотрим понятие и назначение прагма-библиотеки.

    Многие языки программирования позволяют управлять процессом компиляции посредством директив компилятора. В языке Perl эта возможность реализована при помощи так называемых прагма-библиотек. В современной терминологии, связанной с программированием, слово "pragma" используется для обозначения понятия, смысл которого в русском языке выражается сочетанием "директива компилятора". В языке Perl термин "pragma" обозначает модуль, содержащий коллекцию подпрограмм, используемых на этапе компиляции. Его назначение - передать компилятору информацию о том, как модифицировать процесс компиляции. Поскольку сочетание "библиотека директив компилятора" звучит несколько тяжеловато, мы используем для обозначения таких модулей название "прагма-библиотека".

    Как и остальные модули, прагма-библиотека подключается к основной программе при помощи директивы use и выполняет функцию директивы компилятора. Область действия большинства таких директив ограничена, как правило, блоком, в котором они встречаются. Для отмены соответствующей директивы используется функция no.

    Например, для ускорения выполнения некоторых отрезков программы можно заставить компилятор использовать целочисленную арифметику вместо принятой по умолчанию арифметики с плавающей точкой, а затем снова вернуться к последней.

#! perl -w
print "Арифметика с плавающей точкой: 2/3= ", 2/3, "\n";
use integer;
print "Целочисленная арифметика: 2/3= ",2/3, "\n";
no integer;
print "Возврат к арифметике с плавающей точкой: 2/3= ", 2/3, "\n";
Текст этого примера можно взять здесь.

    В результате выполнения данного примера будет получен вывод, приведенный на рисунке 1:


Рис.1. Результат работы скрипта

    В дистрибутивный комплект Perl входит стандартный набор прагма-библиотек. Некоторые из них представлены в таблице 1.

Таблица 1. Некоторые прагма-библиотеки
Прагма-библиотека Назначение
diagnostics Включает режим диагностики с выдачей подробных сообщений
integer Применение целочисленной арифметики вместо арифметики с плавающей точкой
overload Режим переопределения операций Perl, например, директива
package Number; 
use  overload
  "+"  => \&add;
определяет функцию Number::add () в качестве операции сложения
sigtrap Директива, позволяющая управлять обработкой сигналов в UNIX
strict Режим ограниченного использования "опасных" конструкций Perl
  use strict "refs";
генерирует ошибку выполнения при использовании символических ссылок
  use strict "vars";
генерирует ошибку компиляции при попытке обращения к переменной, которая не была объявлена при помощи директивы use vars, локализована при помощи функции my() или не является квалифицированным именем
  use strict "subs";
генерирует ошибку компиляции при попытке использовать идентификатор, который не заключен в кавычки, не имеет префикса типа и не является именем подпрограммы, за исключением тех случаев, когда он заключен в фигурные скобки, или стоит слева от символа =>
  use strict;
эквивалентно заданию всех трех рассмотренных выше ограничений
subs Служит для предварительного объявления подпрограмм, указанных в списке:
use subs qw(sub1 sub2 sub3);
vars Служит для предварительного объявления переменных, указанных в списке
  use vars qw($scal   @list   %hash);
после чего их можно использовать при включенной директиве use strict, не опасаясь возникновения ошибки компиляции

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




Предыдущий шаг Содержание Следующий шаг