Я и Perl

camel Технология Perl мне показалась привлекательной еще в начале 2000-ых. Тогда это был некий прорыв и язык начал приобретать стремительный оборот у специалистов в разных областях применения. Я пошел по пути использования языка в качестве инструмента для написания web-сценариев. Сначала это были CGI скрипты, позже mod_perl а последнее время – mod_perl2. Многие меня спрашивают – «почему Perl, а не PHP». Я всегда затрудняюсь ответить на этот вопрос, но считаю что Perl это мощнейший язык который я когда-то встречал! Он проще в использовании относительно языка C, но в тоже время богаче по функциональным возможностям, чем PHP. Возьмем, например, регулярные выражения – это очень сильный аргумент в пользу Perl.

Мою точку зрения могут разделять, а могут не разделять многие – но я свой выбор сделал! Что касается PHP – я не считаю, что это плохой язык, с его помощью можно много что сделать, большинство разработчиков выбрало именно PHP.

Здесь уместно привести маленький простой кусочек кода, который я когда-то написал для одного из своих прошлых проектов и который может продемонстрировать как в лаконичном куске кода можно уложить богатый функционал Perl:

my @apts;
my %aptsh = getApartmentsAsHash();
my $rooms = calcRooms();
foreach (0..$rooms) { $apts[$_] = [0,[]] }
foreach (keys %aptsh) {
    $apts[$aptsh{$_}->{r}][0] = $aptsh{$_}->{cnt};
    push @{$apts[$aptsh{$_}->{r}][1]}, {
        id  => $aptsh{$_}->{id},
        r   => $aptsh{$_}->{r},
        g   => $aptsh{$_}->{g},
    };
}

Комментарий:
Выполняется типовой запрос в БД Oracle, из конфигурации принимается динамическое значение – количество комнат, устанавливается значение по умолчанию в ожидаемом диапазоне количества комнат до 300, о заранее установленным значениям из результата работы запроса SQL корректировка только выбранных значений – результатом всего этого появляется массив значений который в дальнейшем (по ходу кода) отображается на сайте в виде таблицы.

По этому примеру трудно сказать что Perl лучше или хуже PHP, я вообще не хочу их сравнивать, так как это совершенно разные языки хоть и родственны. Некоторые конструкции PHP будут выглядеть лучше чем конструкции на Perl.

CPAN

Одно из достойных отличительных особенностей является CPAN! Это громадное преимущество, которое используют все профессиональные разработчики работающие с Perl. Обилие библиотек, качество исполнения, полнейшая документация, система bag-трекинга и многое другое заключается в одном лишь CPAN. У меня на памяти несколько решений, которые решались всего 3-мя строчками кода когда как на том-же PHP это целая программа! Мне удалось найти такой кусок кода, я его тут приведу:

#!/usr/bin/perl -w
use CGI;
my $q = new CGI;
my $log = $q->param('log') || 'debug.log';
print $q->header(-type=>'text/plain', -charset=>'windows-1251');
if ($log=~/^([a-z0-1_]+\.log)$/i) { $log = $1 } else { print "Это что за шутки?" and exit 0 }
open FIN, "| cat $log | tail -n 200" or do { print "Файл не найден" and exit 0 };
print <FIN>

Комментарий:
Этот скрипт принимает от пользователя через браузер параметр log (имя файла лога), валидирует имя файла лога и отображает 200 последних строк лога на экран пользователю в виде текстового файла. Обновляя страничку можно видеть динамику наполнения лога записями результата работы того или иного скрипта.

System

Все о чем я рассказывал до этого места касается очень маленькой части спектра применения языка – CGI. Попмимо CGI существует еще масса всего, например системы управления целыми серверными площадками, такими как широко известной ISPmanager. WEB интерфейс выполнен с использованием PHP, системы работы с серверными службами и сервисами управляются с помощью связки Perl+C.

В части применения Perl для администраторов имеется хороший, всем известный пример как выполнить команду system "rm -rf /" используя строчку запускаемую через консоль с рутовыми правами (разумеется тем кто работает с языком):

echo "test... test... test..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'

Внимание: не выполняйте этот код – это опасно для Вашей системы!

Комментарий:
Более подробно о команде можно прочитать тут: https://ru.wikipedia.org/wiki/Perl

mod_perl2

По ходу получения навыков работы с CGI скриптами любой Perl разработчик рано или поздно переступит грань между CGI и mod_perl. Интеграция интерпретатора в компонент (модуль) Apache совершила настоящий прорыв в области web-программирования! Такой подход не только ускорил разработку и сделал ее более качественной, но и изменил сознание большинства разработчиков. Те, кто когда-то сделал шаг от CGI к mod_perl однозначно столкнулись с проблемой «многопользовательских интерфейсов с большой нагрузкой». Я не хотел бы тут пропагандировать технологию mod_perl, так как посвящу отдельную статью по этому вопросу. Здесь бы мне хотелось привести часть кода написанном под mod_perl2

sub CLEANUP_CGI_REGISTERS {
    my $r = shift;
    if (CGI->can("VERSION") && CGI->VERSION() < 3.00) {
        if ($r->can("cleanup_register")) {
            $r->pool->cleanup_register(\&CGI::_reset_globals);
        } else {
            eval "use APR::Pool(); 1;";
            if (APR::Pool->can("cleanup_register")) {
                $r->pool->cleanup_register(\&CGI::_reset_globals);
            }
        }
    }
}

Комментарий:
Этот участок кода выполняется для принудительной очистки регистров при использовании старой версии модуля CGI (< 3.00) на фазе выполнения хэндлера InitHandler.

CVS/SVN/GIT

С системами управления версиями мне пришлось познакомиться (как и многим) методом «из-под палки». Но освоив системы я понял, что это отличное средство для того чтобы вести большое количество командных проектов

CVS

Более ранний продукт относительно SVN, но более низкоуровневый.

SVN (subversion)

Это более поздний продукт, рассчитан на программистов современности. В нем учтено большинство уязвимых мест CVS и сделан акцент на многопользовательские системы разработок. Инструмент более высокого уровня чем CVS, а потому заслуживает применения его на проектах, таких как web-сайты, web-интерфейсы, модули программ и др.

GIT

Всего пара слов: cейчас все используют GIT!

OS

Операционная система для работы сервера – однозначно Linux или Unix! Мой выпор пал на Centos, ранее использовал FreeBSD. Почему так категорично? – спросите Вы. Ответ пришел не быстро и связан со временем, затраченном на поддержку и установку необходимого программного обеспечения, а также от легкости настройки и совмещения того или иного программного обеспечения.

У меня есть немаленький опыт работы с OS Centos, SLES, FreeBSD и Ubuntu! Развернув сервер для своих сайтов на FreeBSD, я неоднократно подтверждал уверенность в правильном выборе (для себя)! FreeBSD, помимо этого, дала мне отличный опыт в работе с:

И это в моей работе и хобби - только начало!