Иллюстрированный самоучитель по Perl

Прагма-библиотеки


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

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

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

#!/usr/bin/perl

print "Арифметика с плавающей точкой: 2/3= ", 2/3, "\n";

use integer;

print "Целочисленная арифметика: 2/3= ",2/3, "\n";

no integer;

print "Возврат к арифметике с плавающей точкой: 2/3= ", 2/3, "\n";

В результате выполнения данного примера будет получен вывод

Арифметика с плавающей точкой: 2/3= 0.666666666666667

Целочисленная арифметика: 2/3=0

Возврат к арифметике с плавающей точкой: 2/3= 0.666666666666667



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

Таблица 12.1. Некоторые прагма-библиотеки

Прагма-библиотека

Назначение

diagnostics

Включает режим диагностики с выдачей подробных сообщений

integer

Применение целочисленной арифметики вместо арифметики с плавающей точкой

lib

Позволяет добавлять элементы в специальный массив @INC во время компиляции

overload

Режим переопределения операций Perl, например, директива

package Number; use overload "+" => \&add;

определяет функцию Number : : add ( ) в качестве операции сложения

sigtrap

Директива, позволяющая управлять обработкой сигналов в UNIX

strict

Режим ограниченного использования "опасных" конструкций Perl

use strict "refs";

генерирует ошибку выполнения при использовании символических ссылок

use strict "vars";

генерирует ошибку компиляции при попытке обращения к переменной, которая не была объявлена при помощи директивы use vars, локализована при помощи функции ту() или не является квалифицированным именем

use strict "subs";

генерирует ошибку компиляции при попытке использовать идентификатор, который не заключен в кавычки, не имеет префикса типа и не является именем подпрограммы, за исключением тех случаев, когда он заключен в фигурные скобки, или стоит слева от символа =>

use strict;

эквивалентно заданию всех трех рассмотренных выше ограничений

subs

Служит для предварительного объявления подпрограмм, указанных в списке:

use subs qw(subl sub2 sub3);

vars

Служит для предварительного объявления переменных, указанных в списке

use vars qw($scal @list %hash) ;

после чего их можно использовать при включенной директиве use strict, не опасаясь возникновения ошибки компиляции



Содержание раздела