| Perl’овка в домашнем
хозяйстве 16.09.2003 Илья Щуров Voyager
Все началось в далеком 1987 году, когда программисту Ларри Уоллу надоело вручную делать то, что можно автоматизировать. Так и появился язык Perl, предназначенный для обработки всевозможных log-файлов, извлечения из них полезной информации и прочих нужд сисадмина юниксовой машины. В дальнейшем он развился в нечто большее, а с приходом Интернета завоевал огромную популярность как язык написания cgi-скриптов — форумов, гостевых книг, голосований и прочих элементов интерактивности веб-сайтов. Для рядового программиста слова «Perl» и «cgi» стали практически синонимами, и большинство статей на эту тему посвящено именно веб-разработке. Многие пользователи Windows даже не догадываются, что Perl можно использовать как-то иначе. А зря! Это очень удобный инструмент, способный упростить жизнь во многих областях, даже далеких от сайтостроительства. Главное — творческий подход. Философия Perl — язык со странностями. Это отмечает и его автор, расшифровывая название как «Patologically Eclectic Rubbish Lister» (дословно: Патологически Эклектичный Мусорный Листер) вместо официального «Practical Extraction and Report Language» (Практичный язык для извлечения информации и составления отчетов). Если знакомиться с Perl’ом после освоения С/C++, станет немного не по себе, если же учить его в самом начале программистского пути, будет еще хуже — приобретете кучу дурных привычек, ибо, объединив в себе элементы множества других языков, Perl немного противоречив и не похож ни на что другое. Однако в этом есть и своя прелесть.
Особый разговор о регулярных выражениях. Повергающие в ужас участки кода, вроде $str=~s/(\S{70})(\S+)/$1 $2/g; оказывается, являются не только нечитаемым набором символов, но и весьма удобным инструментом, позволяющим делать с текстом все, что только поддается формализации, и даже чуть больше. Если коротко, то регулярные выражения — просто средство поиска и замены участков строк, удовлетворяющих определенным шаблонам. Однако шаблоны эти могут иметь довольно сложную структуру и определять весьма нетривиальные подмножества строк. Скажем, регулярному выражению /(http:\/\/|www.)([a-zA-Z0-9-] +\.)+[a-zA-Z0-9-]{2,4}/ будут соответствовать адреса сайтов, начинающиеся с http:// или www., содержащие в себе только разрешенные символы и заканчивающиеся двух-, трех- или четырехбуквенной доменной зоной. Более того, при замене можно ссылаться на найденный текст или его участки — так, команда s/(\w+) (\w+)/$2 $1/ меняет местами пару слов, разделенных пробелом. Однако хватит о регулярных выражениях — о них написаны целые книги (например, [2]), и углубляться в подробности я не могу — места в журнале не хватит.
Еще одна вещь в Perl’е, от которой у программиста с опытом работы на «обычных» языках может случиться удар — это реализация объектно-ориентированного подхода. Как такового понятия «объект» здесь вообще нет, но есть хитрым образом сконструированная его замена1. Наследование, конструкторы, деструкторы, методы и прочие атрибуты ООП — в наличии, хотя и в не совсем обычном виде. Гораздо хуже с такими вещами, как защищенные (private или protected) методы и поля данных. Они просто отсутствуют. Существуют некие соглашения о том, какие методы вызывать можно, а какие — лучше не надо, но ничего похожего на строгие правила C++ и других языков нет. Также нет никаких средств контроля типов данных. Ужас, одним словом. Но — к этому можно привыкнуть и даже полюбить. Увы, я уже не успеваю рассказать о списках и связанных с ними контекстах, интерполяции, «умолчальных» переменных ($_ и @_), символических ссылках и многом другом. Perl — язык богатый и необычный, у него есть сотни или даже тысячи нюансов, которые можно почувствовать, только имея достаточный опыт работы. Впрочем, для применения в «домашних условиях» знать их совсем не обязательно. 1 (назад)Речь идет о Perl 5. Готовящийся к выходу Perl 6 будет полностью объектно-ориентированным языком, но это уже другая история.
|