Последние новости

Переход Германии на электронные паспорта второго поколения уже не загорами

Вот уже на протяжении нескольких лет страны Евросоюза постепенно переходят на электронные паспорта...

Мы начинаем

IT Библиотека начинает свою работу

Знаете ли вы что означает ICQ...

России наверно каждый человек,который пользуется Интернетом....

все новости

Доверяем

Реклама

87.CGI-программирование.Perl и Web: не только CGI- программирование., 07/09/2007

К списку статей

87.CGI-программирование.Perl и Web: не только CGI- программирование.

Perl используется не только в CGI-программировании. Среди других направлений его применения - анализ файлов регистрации, управление встроенными функциями и паролями, "активными" изображениями, манипулирование изображениями. И все это - лишь верхушка айсберга.
A. Специализированные издательские системы
Коммерческие издательские Web-системы могут сделать трудные вещи легкими, особенно для непрограммистов, но они не столь гибки, как настоящие языки программирования. Без исходного кода в руках вы всегда ограничены чьими-то решениями: если что-то работает не так, как вам хотелось бы, ничего сделать уже нельзя. Независимо от того, сколько великолепных программ предлагается потребителю на рынке, программист всегда будет нужен для решения тех особых задач, которые выходят за рамки стандартных требований. И, конечно, прежде всего кто-то должен писать ПО издательских систем.
Perl - идеальный язык для создания специализированных издательских систем, приспособленных под ваши уникальные потребности. С его помощью можно одним махом преобразовать необработанные данные в мириады HTML-страниц. Perl применяется для формирования и сопровождения узлов по всей World Wide Web. The Perl Journal (www.tpj.com) использует Perl для создания всех своих страниц. Perl Language Home Page (www.perl.com) содержит около 10000 Web-страниц, которые автоматически сопровождаются и обновляются различными Perl-программами.
B. Встроенный Perl
Самый быстрый, самый дешевый (дешевле бесплатного уже ничего быть не может) и самый популярный Web-сервер в Internet, Apache, может работать с встроенным в него Perl, используя модуль mod_perl из CPAN. С этим модулем Perl становится языком программирования для вашего Web-сервера. Вы можете писать маленькие Perl-программы для обработки запросов проверки полномочий, обработки сообщений об ошибках, проведения регистрации и решения любых других задач. Они не требуют запуска нового процесса, потому что Perl теперь встроен в Web-сервер. Еще более привлекателен для многих тот факт, что при работе с Apache вам не нужно запускать новый процесс всякий раз, когда поступает CGI-запрос. Вместо этого создается новый поток, который и выполняет предкомпилированную Perl-программу. Это значительно ускоряет выполнение ваших CGI-программ; обычно работа замедляется из-за вызовов fork/exec, а не из-за большого объема самой программы.
Другой способ ускорить выполнение CGI - использовать стандартный модуль CGI::Fast. В отличие от описанного выше встроенного интерпретатора Perl, такая схема выполнения CGI не требует наличия Web-сервера Apache. Подробности см. на man-странице модуля CGI::Fast.
Если Web-сервер у вас работает под Windows NT, вам определенно следует посетить Web-сервер ActiveWare, www.activeware.com. Там можно найти не только готовые двоичные файлы Perl для Windows-платформ, но и PerlScript и PerllS. Пакет PerlScript - это механизм разработки сценариев ActiveX, который позволяет встраивать Perl-код в ваши Web-страницы так, как это делается средствами JavaScript и VBScript. Пакет PerIIS - это динамически связываемая библиотека интерфейса ISAPI, которая выполняет Perl-сценарии непосредственно из IIS и других ISAPI-совместимых Web-серверов, давая значительный выигрыш в производительности.
C. Автоматизация работы в Web с помощью LWP 
Ставили ли вы когда-нибудь перед собой задачу проверить Web-документ на предмет наличия "мертвых" ссылок, найти его название или выяснить, какие из его ссылок обновлялись с прошлого четверга? Может быть, вы хотели загрузить изображения, которые содержатся в каком-либо документе, или зеркально скопировать целый каталог? Что будет, если вам придется проходить через proxy-сервер или проводить переадресацию?
Сейчас вы могли бы сделать все это вручную с помощью броузера, но, поскольку графические интерфейсы совершенно не приспособлены для автоматизации программирования, это был бы медленный и утомительный процесс, требующий большего терпения и меньшей лености (помните,  что по Ларри Уоллу три главных достоинства программиста есть Леность, Нетерпение и Гордость), чем присущи большинству из нас.
Модули LWP (Library for WWW access in Perl - библиотека для доступа к WWW на Perl) из CPAN решают за вас все эти задачи - и даже больше. Например, обращение в сценарии к Web-документу с помощью этих модулей осуществляется настолько просто, что его можно выполнить с помощью одностроковой программы. Чтобы, к примеру, получить документ /peri/index. html с узла www.perl.com, введите следующую строку в свой shell или интерпретатор команд:
perl -MLWP::Simple -e "getprint "http://www.perl.com/perl/index.html""
За исключением модуля LWP::Simple, большинство модулей комплекта LWP в значительной степени объектно-ориентированы. Вот, например, крошечная программа, которая получает URL как аргументы и выдает их названия:
#!/usr/local/bin/perl
use LWP;
$browser = LWP::DserAgent->new ();
# создать виртуальный броузер
$browser->agent ("Mothra/126-Paladium:);
# дать ему имя
foreeach $url (@ARGV){   # ожидать URL как аргументы
# сделать GET-запрос по URL через виртуальный броузер
$webdoc = $browser->request(HTTP::Request->new(GET=> $url));
if ($webdoc->is__success) { # нашли
print STDOUT "$url::, $result->title, "/n";
} else {      # что-то  не  так
print STDERR "$0: Couldn"t fetch $url/n";
}
}
Как видите, усилия, потраченные на изучение объектов Perl, не пропали даром. Но не забывайте, что, как и модуль CGI.pm, модули LWP скрывают большую часть сложной работы.
Этот сценарий работает так. Сначала создается объект - пользовательский агент (нечто вроде автоматизированного виртуального броузера). Этот объект используется для выдачи запросов на удаленные серверы. Дадим нашему виртуальному броузеру какое-нибудь глупое имя, просто чтобы сделать файлы регистрации пользователей более интересными. Затем получим удаленный документ, направив HTTP-запрос GET на удаленный сервер. Если результат успешный, выведем на экран URL и имя сервера; в противном случае немножко поплачем.
Вот программа, которая выводит рассортированный список уникальных ссылок и изображений, содержащихся в URL, переданных в виде аргументов командной строки.
#!/usr/local/bin/perl -w
use strict;
use LWP 5.000;
use URI::URL;
use HTML::LinkExtor;
my($url, $browser, %saw) ;
$browser = LPW::UserAgent->new(); # создать виртуальный броузер
foreach $url ( @ARGV ) {
# выбрать документ через виртуальный броузер
my 5webdoc =
$browser->request(HTTP::Request->new (GET => $url));
next unless $webdoc->is_success;
next unless $webdoc->content_type eq "text/html";
# не могу разобрать GIF-файлы
my $base = $webdoc->base;
# теперь извлечь все ссылки типа <А...> и
foreach(HTML::LinkExtor->new->parse
($webdoc->content)->eof->links){
my($tag, %links) = @$_;
next unless $tag eq "a" or $tag eq "img";
my $link;
foreach $link (values %links){
$saw{ url($link, $base)->abs->as_string }++;
}
print join ("/n", sort keys %saw) , "/n";
На первый взгляд все кажется очень сложным, но вызвано это, скорее всего, недостаточно четким пониманием того, как работают различные объекты и их методы. Мы не собираемся здесь давать пояснения по этим вопросам, потому что книга и так получилась уже достаточно объемной. К счастью, в LWP можно найти обширную документацию и примеры.



Автор: it-library, количество прочтений: 4035 Наверх


  • 86.CGI-программирование.Поиск и устранение ошибок в CGI-программах.CGI-п...
  • 85.CGI-программирование.Создание CGI-программы гостевой книги.

    Ес...

  • 84.CGI-программирование.Как сохранить объем вводимого текста.Вводи...
  • 83.CGI-программирование.Передача параметров через CGI.

    Дл...

  • 82.CGI-программирование.Простейшая CGI-программа.Вот и...
  • 81.CGI-программирование.Ваша CGI-программа в контексте.Когда...
  • 80.CGI-программирование.Модуль CGI.pm.Начин...
  • 79.Другие операции преобразования данных.Транслитерация.Если ...
  • 78.Другие операции преобразования данных.Сортировка по заданным критериям.Вы уж...
  • 77.Другие операции преобразования данных.Извлечение и замена подстроки.Извле...
  • 76.Другие операции преобразования данных.Поиск подстроки.Успех...
  • 75.Управление процессами.Передача и прием сигналов.Один ...
  • 74.Управление процессами.Использование функции fork.

    Ещ...

  • 73.Управление процессами.Использование процессов как дескрипторов файловСледу...
  • 72.Манипулирование файлами и каталогами.Изменение меток времени.

    С ...

  • 71.Манипулирование файлами и каталогами.Изменение принадлежности.Кажды...
  • 70.Манипулирование файлами и каталогами.Изменение прав доступа.Права...
  • 69.Манипулирование файлами и каталогами.Создание и удаление каталогов.Зная ...
  • 68.Манипулирование файлами и каталогами.Создание для файла альтернативных имен: связывание ссылками.

    Ин...

  • 67.Манипулирование файлами и каталогами.Переименование файла.В she...
  • 66.Манипулирование файлами и каталогами.Удаление файла.

    Pe...

  • 65.Доступ к каталогам.Чтение дескриптора каталога.

    От...

  • 64.Доступ к каталогам.Открытие и закрытие дескриптора каталога.Функц...
  • 63.Доступ к каталогам.Дескрипторы каталогов.Если ...
  • 62.Доступ к каталогам.Развертывание.Если ...
  • 61.Доступ к каталогам.Перемещение по дереву каталогов.Вы уж...
  • 60.Дескрипторы файлов и проверка файлов.Функции stat и lstat.Вышеу...
  • 59.Дескрипторы файлов и проверка файлов.Операции для проверки файловТепер...
  • 58.Дескрипторы файлов и проверка файлов.Использование дескрипторов файлов.После...
  • 57.Дескрипторы файлов и проверка файлов.Небольшое отступление: функция die.

    Де...

  • 56.Дескрипторы файлов и проверка файлов.Открытие и закрытие дескриптора файла.В Per...
  • 55.Дескрипторы файлов и проверка файлов.Что такое дескриптор файла.Дескр...
  • 54.Функции.Создаваемые операцией my() переменные файлового уровня.Опера...
  • 53.Функции.Полулокальные переменные, созданные при помощи функции local.В Per...
  • 52.Функции.Локальные переменные в функциях.Мы уж...
  • 51.Функции.Аргументы.Несом...
  • 50.Функции.Возвращаемые значения.Вызов...
  • 49.Функции.Вызов пользовательской функции.Для в...
  • 48.Функции.Определение пользовательской функции.Польз...
  • 47.Форматы.Изменение имени форматаИмя ф...
  • 46.Форматы.Изменение в форматах установок по умолчаниюМы ча...
  • 45.Форматы.Формат начала страницы.Многи...
  • 44.Форматы.Вызов формата.

    Вы...

  • 43.Форматы.Определение формата.

    Фо...

  • 42.Форматы.Что такое формат.Помим...
  • 41.Регулярные выражения.Функции split и joinРегул...
  • 40.Регулярные выражения.Операция замены

    Мы...

  • 39.Регулярные выражения.Образцы.Регул...
  • 38.Регулярные выражения.Основные направления использования регулярных выражений.Если ...
  • 37.Регулярные выражения.Основные понятияРегул...
  • 36.Базовые средства ввода-вывода.Вывод в STDOUT.Для п...
  • 35.Базовые средства ввода-вывода.Ввод из операции "ромб'.Друго...
  • 34.Базовые средства ввода-вывода.Ввод из STDIN.Чтени...
  • 33.Управляющие структуры.Операции && и || как управляющие структуры.Опера...
  • 32.Управляющие структуры.Модификаторы выражений.В кач...
  • 31.Управляющие структуры.Метки.

    Чт...

  • 30.Управляющие структуры.Оператор redoТрети...
  • 29.Управляющие структуры.Оператор next.

    Ка...

  • 28.Управляющие структуры.Оператор last.

    Вы...

  • 27.Управляющие структуры.Оператор foreach.Еще о...
  • 26.Управляющие структуры.Оператор for.Еще о...
  • 25.Управляющие структуры.Оператор do {} while/until.Опера...
  • 24.Управляющие структуры.Оператор while /until.Ни од...
  • 23.Управляющие структуры.Оператор if/unless.

    Сл...

  • 22.Управляющие структуры.Блоки операторов.

    Бл...

  • 21.Хэши.Срезы хешейКак и...
  • 20.Хэши.Хеш – функции.В это...
  • 19.Хэши.Литеральное представление хэша.У вас...
  • 18.Хэши.Хеш-переменные.Имя х...
  • 17.Хэши.Что такое хешХеш п...
  • 16.Массивы и списочные данные.Интерполяция массивов

    Ка...

  • 15.Массивы и списочные данные.STDIN как массивОдна ...
  • 14.Массивы и списочные данные.Операции над массивами и функции обработки массивовОпера...
  • 13.Массивы и списочные данные.ПеременныеПерем...
  • 12.Массивы и списочные данные.Литеральное представлениеСписо...
  • 11.Массивы и списочные данные.Список и массивСписо...
  • 10.Скалярные данные.Скалярные операции и функции

    Са...

  • 9.Скалярные данные.Скалярные переменныеИмя п...
  • 8.Скалярные данные.Скалярные данныеОпера...
  • 7.Скалярные данные.СтрокиСтрок...
  • 6.Скалярные данные.ЧислаХотя ...
  • 5.Скалярные данные.Что такое скалярные данныеСкаля...
  • 4.Основные понятия языка

    На...

  • 3.Основные понятияСцена...
  • 2.Назначение языкаНазна...
  • 1.История создания языка

  • Регистрация ооо предприятий. Регистрация фирм упрощенка. Регистрация ООО. ; лучший паркетный лак любого типа