Язык программирования Perl
Язык программирования Perl читать книгу онлайн
Курс знакомит с языком программирования Perl, с его принципами, основными возможностями и особенностями в объёме, достаточном, чтобы начать разрабатывать прикладные и системные задачи, включая программирование для сети Интернет.
Курс является достаточно подробным введением в язык программирования Perl. Описывается уникальная культура Perl и особенности, отличающие его от других языков программирования и во многом обусловившие его популярность. Рассматриваются основные средства программирования на языке Perl версии 5.8. Разбираются богатые возможности языка для создания самых разных приложений, а также особый стиль программирования на Perl. Курс ориентирован на студентов, начинающих программистов или разработчиков, применяющих другие языки и желающих писать прикладные или системные программы на Perl.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Важной особенностью протокола HTTP является то, что он ориентирован на обработку независимых запросов, то есть в нем не предусмотрено сохранение состояния взаимодействия с клиентом. Поэтому организация сеансовой работы с web-сервером ложится на программиста.
Автоматизировать рутинные действия при обмене данными с помощью HTTP и преодолеть трудности программного взаимодействия с HTTP-серверами помогают многочисленные готовые Perl-модули. Стандартная библиотека LWP (Library for WWW in Perl) содержит разнообразные и мощные средства для работы с ресурсами WWW. С ее помощью можно легко запрограммировать простые и решить весьма нетривиальные задачи. Например, запрос документа с web-сервера записывается всего одной строкой:
use LWP::Simple; # использовать упрощенный интерфейс к LWPmy $page = get 'http://www.perl.com/';Не сложнее обратиться с запросом к поисковым системам. Для этого нужно в URL указать аргументы поиска. Формат строки запроса к конкретной поисковой машине можно посмотреть в строке браузера. Например, по такому URL можно искать книги по Perl в поисковой системе Google:
$url = 'http://www.google.ru/search?q=Perl+book';А чтобы найти на сайте CPAN все модули, ориентированные на работу с HTML, нужно отправить такой запрос:
$url= 'http://search.cpan.org/search?query=HTML&mode=module';Это примеры запросов, отправляемых методом GET, когда аргументы передаются непосредственно в строке, адресующей ресурс. При другом способе запрос отправляется методом POST, а данные запроса отправляются в теле запроса. Если требуется отправить из программы данные HTML-формы на HTTP-сервер методом POST, то это столь же просто делается с помощью LWP:
use LWP::UserAgent; # используем класс 'Клиент' из LWPuse HTTP::Request::Common qw(POST); # и метод POSTmy $user_agent = LWP::UserAgent->new; # создаем клиента# заполняем поля формы для отправки на нужный сайтmy $form = POST 'http://site.ru/cgi-bin/guestbook.pl',[ nick => 'user', email => '[email protected]',comments => 'Спасибо за помощь!' ];# передаем клиенту форму для отправки на серверmy $response = $user_agent->request($form); # получаем ответprint $response->as_string; # и выводим его в виде строкиМожно долго говорить о возможностях библиотеки LWP. С ее помощью можно: работать с новостными группами (news), обмениваться файлами по протоколу FTP, отправлять запросы к информационным системам Gopher, читать локальные файлы, отправлять электронную почту и создавать пользовательских агентов для автоматического исследования сайтов (web-роботов или "пауков"). Можно даже быстро набросать простой, но вполне работоспособный web-сервер. Для этого нужно воспользоваться классом HTTP::Daemon:
use HTTP::Daemon; # используем классы HTTP-сервераmy $server_root = '/tmp'; # каталог для файлов сервера# создаем экземпляр WWW-сервера, слушающего порт 8080my $httpd = new HTTP::Daemon(LocalPort => 8080); #while (my $connection = $httpd->accept) { # ждем соединения# получаем запросы на соединенииwhile (my $request = $connection->get_request) {if ($request->method eq 'GET') { # выполняем GET$connection->send_file_response( # отправляем файл$server_root . $request->url->path); # из каталога}}$connection->close; # закрываем соединениеundef($connection); # удаляем объект} # и все повторяется сначала...А теперь пора перейти к созданию программ, выполняющихся на web-сервере и взаимодействующих с ним через интерфейс CGI.
Упоминавшийся уже интерфейс программирования CGI поддерживается всеми web-серверами. Сегодня CGI-программы разрабатываются не на чистом Perl, а с использованием различных вспомогательных модулей и библиотек. Возможно, самой популярной из них по праву считается стандартная библиотека CGI. С ее помощью можно писать CGI-программы проще, быстрее и надежнее. Разработка программ CGI на Perl описывается во многих специализированных книгах.
В качестве примера напишем простенькую "гостевую книгу" - программу, которая с помощью функций библиотеки CGI (start_html, textfield и т.д.) выводит HTML-страницу с формой для отправки на сайт отзывов посетителей. После отправки данных формы на сервер вызывается эта же CGI-программа, которая с помощью функции param() проверяет, получены ли данные формы, и выводит присланный комментарий. Вот текст программы:
#!C:/usr/local/apache/Perl/bin/perl.exe# в первой строке CGI-программы указан путь к perluse CGI qw/:standard/; # применяем стандартные средства CGIprint # выводим в выходной потокheader(-charset=>'windows-1251'), # в кодировке CP1251:start_html('Гостевая книга'), # шапку страницы,h3('Здесь Вы можете оставить свой отзыв'),# заголовок,start_form, # форму, в ней"Имя: ", # надпись,textfield(-name=>'nick', size=>8), p, # поле ввода,"Э-почта: ", # надпись,textfield(-name=>'email', size=>32), p, # поле ввода,"Комментарий: ", p, # надпись,textarea(-name=>'comments', # область ввода-rows=>5, -columns=>50), p, # из 5 строк на 50 колонок,submit('Отправить'), # кнопку,end_form, # конец формыhr, "n"; # и горизонтальную черту# далее проверяем, были ли присланы данные формыif (param) { # если присланы данные - параметры формы
