Perl, строчка жемчуга

Настоящие программисты не пишут комментариев. Если программу было тяжело писать, почему она должна легко читаться?

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

Что поделаешь, раньше необходимость поставки перечисленных средств в составе системы была очевидна, теперь же нуждается в комментариях. Создание скриптов (сценариев) shell просто необходимо для выполнения многих рутинных задач - от администрирования системы до кодирования компакт-диска в MP3. Замечательно, у вас есть программа под Windows, которая сама загоняет компакт в MP3. А как быть, если нужно первые пять треков кодировать в стерео, а остальные - в моно? Гораздо проще написать скрипт в несколько строк, который вызывает CD-граббер и кодировщик MP3 с соответствующими параметрами нужное число раз, чем переписывать готовую программу. Кроме того, универсальная программа наверняка будет кодировать MP3 хуже, чем специализированный кодировщик.

Впрочем, преимущества командной строки над графическим интерфейсом - тема отдельного спора, начавшегося еще во времена Macintoy. Идем дальше. Для инсталляции программ в Windows создается программа, которая распаковывает нужные файлы и прописывает все, что надо, в Registry. В Unix используется другая схема - программа поставляется в исходном коде, который без проблем компилируется в стандартном компиляторе на любой системе, будь то Pentium или PA-RISC.

Программы, входящие в состав системы, могут для ускорения процесса поставляться в готовом виде и устанавливаться при помощи того же скрипта, который распихивает исполняемые и конфигурационные файлы по каталогам. Отличие от Windows в том, что параметры программ (число которых, кстати, в том же Debian GNU/Linux 1.3 составляет около 1200 вместо нескольких десятков в Windows 95) хранятся не в общесистемном файле Registry, формат которого и Питер Нортон без ста грамм не разберет, а в небольших текстовых файлах, которые модифицируются текстовым редактором и описываются в документации каждой программы. Гибкость и надежность налицо, и опять же можно обходиться скриптами вместо полноценных программ.

Именно эта ориентированность Unix на текстовые файлы с открытыми форматами и определила основные черты Perl - развитые возможности сканирования и обработки текстов и управления системой. Perl используется там, где возможностей shell становится недостаточно, но еще рано разрабатывать настоящую программу, и хотя Perl представляет собой полноценный язык программирования на уровне C++, программы на нем все же называются скриптами.

Первоначально разработанный Ларри Уоллом для управления системой и работы с базами данных, со временем Perl получил признание множества пользователей Unix, а с появлением World Wide Web Perl хорошо себя зарекомендовал в качестве средства CGI-программирования. WWW опирается на текстовый формат HTML (а в области обработки текста Perl нет равных), с помощью встроенного в него механизма регулярных выражений можно несколькими строками описать действия, реализация которых на Си займет несколько страниц и к тому же будет работать медленее, даром что программы на Perl интерпретируются.

Я не буду подробно излагать принципы программирования на Perl, ограничусь несколькими примерами, которые дают представление о том, как выглядят скрипты на Perl. Думаю, настоящие хакеры не откажут себе в удовольствии вонзить зубы в чужую программу на незнакомом языке. Тем же, кто серьезно интересуется программированием на Perl, рекомендую обратиться к замечательному изданию "Изучаем Perl" Рэндала Шварца (издательство O'Reilly/BHV), кстати, одобренному самим Ларри Уоллом.

Текущая версия Perl - 5.004. Версия 5.0 замечательна поддержкой ООП, а в 5.004 впервые был включен модуль CGI.pm, упрощающий работу с CGI. Ларри Уолл обещает этим летом выпустить Perl 5.005, который будет поддерживать многопоточные процессы и содержать компилятор. На самом деле программы на Perl и так компилируются в свой внутренний формат во время запуска, но теперь на выходе можно будет получить файл с байт-кодом Perl или исходником на Си, а в дальнейшем к этому набору добавятся байт-коды Java. Ларри Уолл считает, что Perl больше подходит для написания небольших программ, чем Java, и собирается всерьез конкурировать с детищем Sun Microsystems; уже сейчас Perl насчитывает не меньше пользователей, чем Java, а областей применения у него даже больше.

Дмитрий БОРОДАЕНКО

#!/usr/bin/perl -w
print "Сколько Вам лет? ";
$a = <STDIN>; chomp $a;
unless ($a <18) { $voters++; }
___________ 
# применяем переменную по умолчанию
while (<>) {
chomp;
if (s/\\$//) {
$_ .= <>;
redo unless eof();
}
# здесь обрабатываем $_
}
___________
# распознать время в формате чч:мм:сс
if (/Time: (..):(..):(..)/) {
$hours = $1;
$minutes = $2;
$seconds = $3;
}
___________
# поменять местами два первых слова в $_
s/^([^ ]*) *([^ ]*)/$2 $1/;
___________
# работаем с циклами
foreach $elem (@elements) { $elem *= 2; }
for (@ary) { s/foo/bar/ }
$on_a_tty = -t STDIN && -t STDOUT;
sub prompt { print "yes? " if $on_a_tty }
for ( prompt(); <STDIN>; prompt() ) {
# выводим результаты
}
Версия для печатиВерсия для печати

Номер: 

26 за 1998 год

Рубрика: 

Технологии программирования
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!