Perl
Категория:Виртуальный хостинг -> Сервисы и средства разработки
Содержание
Что такое Perl?
Perl – интерпретируемый язык, приспособленный для обработки произвольных текстовых файлов, извлечения из них необходимой информации и выдачи отчетов. Регулярные выражения Perl – мощнейший инструмент обработки текстовой информации. Perl также удобен для написания различных системных программ. Архив CPAN (cpan.org) содержит огромное количество модулей, реализующих практически все задачи, которые могут возникнуть в процессе работы.
Какие инструменты нужны для работы с Perl?
Для создания и тестирования Perl-программ необходимы:
- Любой текстовый редактор, позволяющий сохранять файлы в ASCII-коде. Примером такого редактора является обычный Блокнот, имеющийся в каждой Windows.
- Программа конвертации ASCII-файлов в формат Unix-систем. В частности, таким конвертером может служить FAR Manager.
- Интерпретатор Perl. Для отладки на локальной машине может быть использована версия Perl для Windows.
- FTP-клиент для загрузки файлов на сервер. Лучше всего для этого подходит FAR Manager, позволяющий, кроме всего прочего, устанавливать права доступа к файлам.
Какие приложения работают на 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-символов перевода строки во всех текстовых файлах в текущей директории и во всех субдиректориях.
