Золотое правило админа

Типичный Одмин
Если кто-то еще не знает, это правило звучит так:

Работает – не трожь!

Теперь собственно сама история. Когда-то у меня стояла OpenSUSE 10.3, в которой был Perl 5.8.8. С выходом OpenSUSE 11 я решил сделать апгрейд, который на первый взгляд прошел удачно. Все было хорошо, пока я не попробовал запустить несколько своих ботов.

Выяснилось, что в 11-й версии Perl проапгрейдился до версии 5.8.10, и основные модули по работе тоже подвергались апгрейду. Все товарищи, кто прямо или косвенно пользовался модулем HTTP::Message скорее всего в логах увидили нечто подобное:

HTTP::Message content not bytes

и после этого долго ломали голову над своим кодом. А на самом деле бага в коде была на стороне мантайнера HTTP::Message, версия libwww-perl-5.810 оказалась глючной до безобразия. И самое интересное, эта версия оказалась в дистрибутиве OpenSUSE 11, поэтому совсем безболезненно апгрейд не прошел.

Да, эта проблема решается апгрейдом libwww-perl до более свежей версии, что собственно я и сделал. Сейчас это libwww-perl-5.814, и пока багов в ней не заметил.

Вот и думай после этого, а нужен ли был апгрейд, если он принес столько геморроя?

PHP или Perl?

Инструмент нужен под задачу, и сравнение этих двух языков программирования сведется к обычной демагогии.

PHP более легкий, и изначально он заточен для того, чтобы отрисовывать динамически создаваемые веб-странички. Все остальное, что написано на php и запускается из командной строки или по крону, зачастую сделано нерационально.

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

Подход к программированию на этих языках отличается. Если проводить аналогии со строительством, то написание программ на Perl это в основном сборка уже готовых блоков (модулей) с последующей небольшой доработкой; разработка же на PHP – это как правило, разработка с нуля.

Благодаря Comprehensive Perl Archive Network (CPAN) каждый разработчик может пользоваться уже готовыми решениями для многих случаев жизни.

Например, я уже забыл, когда извлекал линки из HTML-страниц с помощью регулярных выражений; для этих целей есть модуль HTML::LinkExtor. Понадобилось вытащить настройки из конфигурационного файла в XML? Раз плюнуть, пользуйтесь XML::Simple. Надо написать поискового бота? Тоже несложно, LWP::RobotUA в помощь.

Зачастую задача программиста на Perl в сводится к тому, чтобы собрать в кучу все необходимые уже готовые модули и подружить их со своим кодом; он экономит кучу времени, пользуясь результатами труда других разработчиков.

Но надо отдать должное php, синтаксис там интуитивно понятный в основной своей массе. Одни только специальные переменные Perl могут вызвать отвращение с первого взгляда на них. Ну разве можно новичку самому догадаться о том, что хранится в переменных $`, $&, $_ или $/ ? Без стакана и чтения документации разобраться сложно. А вот с документацией у Perl все в порядке, команда perldoc позволит быстро найти все, что надо.