Perl

Категория:Виртуальный хостинг -> Сервисы и средства разработки

Содержание


Что такое Perl?

Perl – интерпретируемый язык, приспособленный для обработки произвольных текстовых файлов, извлечения из них необходимой информации и выдачи отчетов. Регулярные выражения Perl – мощнейший инструмент обработки текстовой информации. Perl также удобен для написания различных системных программ. Архив CPAN (cpan.org) содержит огромное количество модулей, реализующих практически все задачи, которые могут возникнуть в процессе работы.

Какие инструменты нужны для работы с Perl?

Для создания и тестирования Perl-программ необходимы:

  • Любой текстовый редактор, позволяющий сохранять файлы в ASCII-коде. Примером такого редактора является обычный Блокнот, имеющийся в каждой Windows.
  • Программа конвертации ASCII-файлов в формат Unix-систем. В частности, таким конвертером может служить FAR Manager.
  • Интерпретатор Perl. Для отладки на локальной машине может быть использована версия Perl для Windows.
  • FTP-клиент для загрузки файлов на сервер. Лучше всего для этого подходит FAR Manager, позволяющий, кроме всего прочего, устанавливать права доступа к файлам.

Какие приложения работают на Perl?

Perl приложения

Путь к интерпретатору perl

/usr/local/bin/perl

Как организована поддержка Perl на хостинге?

Perl – приложения могут выполняться 2 способами.

  • CGI – стандартный способ взаимодействия Web-сервера и любых прикладных программ ( в том числе Perl – скриптов). Web-сервер вызывает внешнюю программу и получает её вывод.
  • mod_perl – внутри Web-сервера размещается интерпретатор Perl, выполняющий код приложения.

Что дает использование mod_perl?

Не секрет, что основной проблемой запуска скриптов с использованием CGI, является большой объем накладных расходов. Для выполнения CGI-скрипта нужно:

  • Создать дочерний процесс.
  • Запустить внутри него Perl – интерпретатор.
  • Загрузить в память все необходимые для работы модули.
  • Выполнить код приложения.

Накладные расходы при выполнения простых скриптов могут в десятки раз превышать затраты на полезную работу.
Естественно желание разработчиков, повысить производительность работы приложения и устойчивость к высоким нагрузкам. Для достижения поставленных целей и разработан mod_perl.

Официальный сайт http://perl.apache.org/

Схема работы mod_perl.

Итак. Основная цель, ускорение работы Perl – приложений, за счет минимизации накладных расходов.
Как это сделать?

  • Не создавать дочерний процесс, код выполняется прямо внутри Web-сервера.
  • Запускать Perl-интерпретатор при старте Web-сервера.
  • Загружать модули при первом запросе к приложению, при выполнении последующих запросов используется загруженный код модулей.
  • Не выгружать из памяти данные, оставшиеся после выполнения запроса.

Проблемы с mod_perl?

  • Утечки памяти.
    Для достижения высокой скорости работы, код и данные, оставшиеся после выполнения приложения остаются в памяти. В результате, при выполнении серии запросов, мы имеем большое количество никому не нужных данных в памяти, это и называется утечкой памяти. Если не принять мер, память в системе просто закончится.
  • Безопасность. Поскольку код выполняется внутри Web-сервера, то имеют место следующие проблемы:
    • Доступ к данным в памяти – следствие схемы работы, очистки не происходит и данные могут быть доступны посторонним.
    • Доступ к объектам файловой системы – специфичная для виртуального хостинга проблема.

Решение проблем – особенности реализации на хостинге.

Для решения описанных проблем используется простая схема. Код приложения выполняется внутри дочернего процесса.

  • Основной процесс Web-сервера. Получен запрос -> Определен сайт -> Создан дочерний процесс -> Ждем завершения дочернего процесса -> Новый запрос.
  • Дочерний процесс. Понижены привилегии -> Выполнен запрос -> Результат послан обратно клиенту -> Завершение.

Таким образом.

  • Все созданные в процессе выполнения запроса данные уничтожаются.
  • Все запросы выполняются с привилегиями владельца сайта.

Как включить поддержку mod_perl для сайта?

Необходимо выбрать тип сайта Apache 2.2 + mod_perl2.
После этого в файл .htaccess в корне вашего сайта автоматически будет добавлены строки:

PerlResponseHandler ModPerl::Registry

Расширения файлов:

Perl – скрипты, работающий в режиме CGI, должны иметь расширения .cgi.
Perl – скрипты, работающий под управлением mod_perl, должны иметь расширения .pl.

Иерархия директорий сайта

  • www/site1/public_html – Для статических файлов и perl – скриптов.

Часто возникающие проблемы:

Закачал свои Perl-скрипты по FTP-протоколу, однако, забыл выбрать ASCII режим, все закачалось с переводами строки в Windows-формате.

Можно как-то исправить ситуацию, не перезакачивая все скрипты?

Скрипты, написанные на языке Perl, в операционных системах Unix должны иметь правильный перенос строки. В операционной системе Windows в конце каждой строки ставится символ переноса строки и символ возврата каретки. В системах Unix используется только символ переноса строки. В результате скрипты, написанные под системой Windows и закаченные по FTP не в ASCII режиме, не работают.
Самый простой способ решить данную проблему – это перезакачать все Perl-скрипты в ASCII режиме. В этом режиме FTP клиент автоматически заменит все Windows-окончания строка на Unix-окончания. Если у Вас нет желания перезакачивать все скрипты то можно использовать решение, описанное ниже.

Необходимо создать файл (например fix.sh) со следующим содержанием:

#!/usr/local/bin/bash
find . > FILELIST.$$
grep -sv FILELIST FILELIST.$$ > FILELIST2.$$
grep -sv $(basename $0) FILELIST2.$$ > FILELIST.$$
grep -sv «^\.$» FILELIST.$$ > FILELIST2.$$
file -f FILELIST2.$$ |grep text | sed -e ‘s/^\([^\:]*\)\:.*$/\1/’ > FILELIST
file -f FILELIST2.$$ |grep -sv text | sed -e ‘s/^\([^\:]*\)\:.*$/Not Modifying file: \1/’
rm FILELIST2.$$
rm FILELIST.$$
for i in $(cat FILELIST); do
    if [ -f $i ]; then
/^M/g $i > $i.tmp sed -e s/
    mv $i.tmp $i
    fi
done
rm FILELIST

После чего сменить ему права командой chmod +x fix.sh Выполнение команды ./fix.sh приведет к замене всех windows-символов перевода строки во всех текстовых файлах в текущей директории и во всех субдиректориях.


Категории:

загрузка…