and Reporting Language, или, как иногда расшифровывают это название создатель Perl и другие его фанатичные приверженцы, - Pathologically Eclectic Rubbish Lister) является одним из наиболее мощных и популярных языков программирования.

История Perl началась в 1987 г., когда человек по имени Ларри Уолл занялся разработкой языка, необходимого ему для решения проблем системного программирования, с которыми он сталкивался как администратор Unix-систем. Несмотря на такое скромное начало, Perl вырос в полнофункциональный сложный язык. Он привлекателен тем, что заполняет разрыв между методами программирования командного процессора Unix и С-приложениями, обладая простотой первых и функциональностью последних.

Уолл характеризует его так: "Perl - это интерпретируемый язык, оптимизированный для сканирования произвольных текстовых файлов, извлечения информации из этих файлов и печати отчетов на основе этой информации. С его помощью также можно решать многие задачи системного управления. При разработке этого языка целью была не столько красота (небольшой объем, элегантность и оптимальность), сколько практичность (простота в использовании, эффективность и полнота)". Уолл указывает также, что синтаксис выражений Perl находится в полном соответствии с синтаксисом выражений языка С; Perl не ограничивает произвольно объем ваших данных - "если вы располагаете памятью, Perl может загрузить в нее весь ваш файл как одну строку"; рекурсия может быть неограниченной глубины, а, кроме того, язык применяет изощренные методы сопоставления с образцом для быстрого сканирования больших объемов данных.

Язык Perl, использующий простые синтаксис, типы данных и структуры, довольно прост в изучении; хорошо написанные Perl-программы легки для чтения и понимания. Однако за этой простотой скрывается относительно богатый набор функций Perl, который включает в себя встроенный символьный отладчик и поддержку объектно-ориентированного программирования. С помощью сложного механизма трассировки потока данных Perl может определить, поступают ли данные из небезопасного источника, и вовремя предотвратить потенциально опасные операции.

Perl легко переносим, он работает на всех основных и многих менее значимых платформах, может получать доступ к соединениям TCP/IP и интегрироваться с языком С. Он обладает также многими специализированными расширениями для доступа к базам данных и каталогам Х.500. Однако первое место в списке его достоинств занимает изобилие посвященных ему групп новостей и Web-узлов, что обеспечивает программистам на Perl поддержку и ресурсы. Для администратора интрасети этот язык - просто подарок: накладываемые им ограничения немногочисленны, он исключительно гибок и обладает широкими возможностями поддержки. Если вам этого недостаточно, имейте в виду, что Perl распространяется бесплатно, - по лицензии GNU Copyleft (www.gnu.org).

Сценарии или программы на языке Perl представляют собой чисто текстовые файлы, преобразуемые на этапе выполнения в байт-кодовые версии, что позволяет выявлять ошибки и выполнять трассировку потоков данных. Перед исполнением интерпретатор Perl конвертирует байт-кодовые представления в машинные коды.

Как отмечалось выше, Perl довольно прост для обучения. Большинство операторов Perl оканчиваются точкой с запятой, многие операторы похожи на код BASIC или С. Например,

# Моя первая программа.
print "Hello Word. 
"; 

представляет собой, конечно, первую типовую программу. Она выводит на экран сообщение "Hello Word.". Приведенный выше код, который мы сохраним в файле с названием hello.pl, фактически является полным сценарием на языке Perl. Чтобы исполнить его, необходимо инициировать интерпретатор Perl следующим образом:

Perl hello.pl

Можно получить тот же результат, набрав такую командную строку:

Perl -e 'print "Hello Word. 
";'

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

Язык Perl наиболее часто используется для создания серверных приложений для Web-серверов. В следующем примере вы можете увидеть некоторые из атрибутов языка Perl в простом приложении. Это приложение будет принимать данные из формы HTML и возвращать их браузеру в виде HTML-страницы. (Нумерация строк не является частью языка Perl, она приводится только для справки.)

1 # Очень простой сценарий для Web-сервера
2 #
3 #!/usr/local/bin/Perl
4 if ($ENV{'REQUEST_METHOD'} eq "GET") {
5 $FORM_DATA = $ENV{'QUERY_STRING'};
6 } else {
7 $LENGTH = $ENV {'CONTENT_LENGTH'};
8 while ($LENGTH) {
9    $FORM_DATA .= getc(STDIN);
10    $LENGTH-;
11    }
12   }
13 print "Content-type: text/html

";
14 print "REQUEST_METHOD:
$ENV{'REQUEST_METHOD'}
"; 15 print "CONTENT_LENGTH: $ENV{'CONTENT_LENGTH'}
"; 16 print "QUERY_STRING: $ENV{'QUERY_STRING'}
"; 17 print "
"; 18 print "FORM_DATA: $FORM_DATA ";

Первые две строки являются комментариями, что обозначается символами "#". Третья строка характерна для сред Unix, в которых сценарий запускается только по имени - командному процессору Unix необходимо сообщить, где искать интерпретатор Perl. Конструкция #! говорит операционной системе, где найти исполняемые файлы для обработки этого сценария.

Четвертая строка указывает на одну из внутренних переменных языка Perl. Выражение $ENV позволяет возвращать значения переменных среды. Язык Perl содержит множество специальных переменных. $FORM_DATA (впервые использована в строке 5) - это переменная, определяемая пользователем. Если методом, используемым для передачи данных в Web-приложение, является GET, то аргумент возвращается из переменной среды с именем QUERY_STRING (составленным "на лету" Web-сервером) и хранится в $FORM_DATA (снова в строке 5). Если же используется другой метод (не GET), то предполагается, что им является POST, и данные берутся со стандартного входа Web-приложения. Прежде всего, количество символов для считывания возвращается из CONTENT_LENGTH, другой переменной среды, созданной Web-сервером (строка 7).

Затем мы используем цикл с проверкой условия для этого количества символов и функцию getc языка Perl, чтобы считать данные со стандартного входа в переменную $FORM_DATA (строки с 8 по 11). Perl поддерживает также все внешние управляющие структуры, такие как until, do-while, do-until и unless. Для простоты мы не проверяем в данном примере, не длиннее ли переменная CONTENT_LENGTH какого-то ожидаемого максимального числа символов, однако в реальной программе это нужно делать. Непохоже, чтобы какое-то нелепое количество символов привело к неожиданностям в поведении Perl, но нагрузка на сервер при попытках чтения, скажем, одного миллиарда символов может привести к проблемам с производительностью. Результат, включая частный заголовок HTTP (строка 13), выводится на экран через стандартный выход.

Хотя эта программа является тривиальным приложением Web-сервера, она полностью функциональна и ее можно использовать в качестве основы для решения более сложных задач, например для обработки форм HTML. В этом прелесть языка Perl: он может решать самые незначительные задачи и в то же время эффективно решать крупные.

Язык Perl непрерывно совершенствуется. Имеются его реализации для огромного числа платформ, (в том числе - Application System/400, Macintosh, MS DOS, MVS, NetWare, OS/2, Unix, VMS, Windows 3.1, 95 и NT), а также поддержка интерфейсов Internet Server API корпорации Microsoft. Компилятор Perl пока существует лишь в альфа-версии (users.ox.ac.uk/ttie/perl.html). Perl - уникальное богатое возможностями средство программирования, которое имеет много приверженцев и поддерживает различные ПО. Язык Perl является одним из основных средств для интрасетей.


"Перлы" мудрости

Где получить дополнительную информацию по Perl

Ресурс
URL
Домашняя страница языка Perl
www.Perl.com/Perl/
Архив по языку Perl Университета штата Флорида
www.cis.ufl.edu/Perl
Язык Perl - информация, сценарии, источник и приемы
www.metronet.com/1h/Perlinfo
Справочные материалы по языку Perl
www.eecs.nwu.edu/Perl/Perl.html
Руководство по решению проблем взаимодействия Perl и CGI
www.Perl.com/Perl/faq/idiots-guide.html