Прагма-библиотеки
Многие языки программирования позволяют управлять процессом компиляции посредством директив компилятора. В языке 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, не опасаясь возникновения ошибки компиляции |