Немножко о модуле CGI.pm в Perl
CGI - Simple Common Gateway Interface Class
Модуль CGI предназначен для упрощения создания HTML документов скриптом написанным на Perl'е. Модуль CGI подключается к вашему скрипту на perl, так же, как и другие модули:
use CGI; |
Есть два способа использования модуля CGI: это объектно-ориентированный стиль и как набор функций. при использовании объектно-ориентированного стиля, вы создаете один или несколько объектов, а потом используете их методы для формирования HTML-страницы. Вот пример использования объектно-ориентированного стиля:
#!/usr/bin/perl use CGI; # Подключить модуль CGI $q = new CGI; # Создать новый объект CGI print $q->header # Вызов метода header, который печатает HTTP заголовок # это вместо print "Content-Type: text/html\n\n" $q->start_html('Hello World') # Печатаем начало документа (тэги <HEAD> и <BODY>), # при этом вставляем строчку <TITLE>Hello World</TITLE> $q->h1('Hello World') # Печатаем заголовок первого уровня $q->end_html; # Печатаем конец документа (</BODY> </HTML>) |
Использовать CGI как набор функций, еще проще, в этом случае, вам не нужно создавать новый объект, вы просто используете функции CGI. Следующий пример демонстрирует использование CGI как набор функций, в результате его выполнения будет выдана страница аналогичная странице выдаваемой в предыдущем примере.
#!/usr/bin/perl use CGI qw/:standard/; # Загружаем стандартные процедуры CGI print header # Печатаем HTTP заголовок # это вместо print "Content-Type: text/html\n\n" start_html('Hello World') # Печатаем начало документа (тэги <HEAD> и <BODY>), # при этом вставляем строчку <TITLE>Hello World</TITLE> h1('Hello World') # Печатаем заголовок первого уровня end_html; # Печатаем конец документа (</BODY> </HTML>) |
Синтаксис функций в CGI таков:
|
|
name({-atr=>value, -atr2=>value2}, 'text') |
name - это имя функции, которое как правило совпадает с именем интересующего тэга. О тэгах, имена которых не совпадают с именами соответствующих функций, речь пойдет дальше.
atr и atr2 - это имена атрибутов данного тэга.
value и value2 - это значения тэгов.
text - это текст находящийся между открывающим и закрывающим тэгами.
Любой из указанных параметров может опускаться. Рассмотрим все изложенное на примерах.
print h1() # Печатает <H1>print h1('Hello','world'); # Печатает <H1>Hello world</H1>print h1({-align=>left}); # Печатает <H1 ALIGN="LEFT">print h1({-align=>left},'Hello'); # Печатает <H1 ALIGN="LEFT">Hello</H1> |
Некоторые функции в CGI используются парами, подобно закрывающим и открывающим тэгам в HTML, например:
start_html и end_html (<HTML><HTML/>) start_table и end_table (<TABLE></TABLE>) start_ul и end_ul (<UL></UL>) start_form и end_form (<FORM></FORM>) |
Вы наверное уже успели заметить, что названия функций аналогичны названиям тэгов HTML. В этом и заключается простота в освоении CGI, достаточно знать HTML, чтобы через 30 мин. свободно использовать CGI. Вот список функций, имена которых не совпадают с именами тэгов:
|
|
print redirect('http://www.perl.ru/'); # Переадресовать браузер к другой странице. # Пример известной нам функции выполняющей функции сразу нескольких тэгов print start_html(-title=>'Hello World', # Заголовок документа -author=>'flp@mail.ru', # Автор -meta=>{'keywords'=>'world hello flp', # Ключевые слова 'copyright'=>'copyright 2000 Philip Koryaka'}, # Авторские права -style=>{'src'=>'/styles/style1.css'}, # Стиль для документа -BGCOLOR=>'blue'); # BGCOLOR для документа print header(-Refresh=>'10; URL=http://www.perl.ru', # Обновление документа -cookie=>$cookie, # Устанавливаем Cookie -type=>'image/gif', # Тип документа -expires=>'+3d'); # Срок годности # Следующий тэг создает список радио-кнопок (аналог <INPUT TYPE=RADIO>): print radio_group('name'=>'OS', 'values'=>['Unix','Windows','Macintosh'], 'default'=>'Unix'); # Следующий тэг создает поле ввода пароля (аналог <INPUT TYPE=PASSWORD>): password_field(-name=>'secret', -value=>'starting value', -size=>50, -maxlength=>80); # Аналогично данной функции используются функция file_field |
Сильной стороной CGI является использование параметров, передаваемых скрипту. Функция param() взращает значение любого из параметров.
|
|
Вызовем скрипт script.cgi?name=bob&lang=en&opt=1&opt=4&opt=8 $a = param('name') # Переменной $a присваиваем значение параметра name ($a=bob) $a = param('lang') # Переменной $a присваиваем значение параметра lang ($a=en) @a = param('opt') # Массиву @a присваиваем значения параметра opt (@a[0]=1; @a[1]=4; @a[2]=8;) |
Жемчужные формы
Жемчужные формы
... или как приобщиться к Perlовой каше быстрого приготовления
Я помню, как первый раз в жизни решил создать интерактивную страничку в Интернете. Запустил редактор, нарисовал форму, отослал на сайт, пошел тестировать. Вот дурилка картонная: кликаю мышкой на кнопке "Отправить", и ничего не отправляется. Товарищей программистов на зарплате прошу не издеваться: меня любой ламер поймет. Именно так все мы, ламеры, и воспринимаем реальность программирования: нечто вроде магического мира с волшебными палочками. Вот есть мертвая форма, и как ее ни тормоши, она не оживет. А вот подошел волшебник в колпаке, поковырялся, палочкой помахал, и все заработало.
Спустя еще какое-то время я узнал, как называлась волшебная палочка для оживления формы - cgi-script ("си-джи-ай-скрипт"). Еще я узнал, что скрипт пишут на языке, который называется Perl. Хотя можно писать на C, но предпочитают Перл. Потом, в 1995 году, я оказался в офисе компании "ИнфоАрт" и во время экскурсии, которую мне устроили, сразу заметил паренька-доходягу с толстыми линзами очков и тоненькими ручонками. На его столе лежало огроменное книжище под названием "Перл". "Вот он, - подумал я, - тот самый перловый программист. Не сегодня-завтра умрет от истощения". После посещения этого хосписа мое уважение к "скриптам" достигло мифических размеров.
Как всякий самоуверенный ламер, я решил познакомиться с Перлом поближе и принялся читать умные книжки. Но из всех программистских книжек, книжки о Перле оказались самыми наглыми. Весь их пафос сводился к одному: "Орлы, ну мы-то с вами понимаем, что на C++ здесь должна стоять скобка, но в нашем Перле - все проще". Эдакий междусобойно-элитарный клуб любителей упрощенных вариантов. Короче говоря, у ламера есть только два способа оживить свои формы: нанять перловщика или найти скатерть-самобранку.
Ну а теперь - хорошие новости. Такие "самобранки" существуют. Мне известно целых две. О них и поведаю.
Первая "си-джи-ай-писалка" - CGI Star Pro. Самое в ней веселое - это довесок "Professional" в названии. Звучит как подлинное издевательство, потому что у профессионала CGI Star Pro ничего кроме тошноты вызвать не может. Зато для ламера - это спасение. Справиться с ней сумеет даже конченый аутист. Все, что требуется, - это: А - Нарисовать форму. Б - Запустить CGI Star Pro и выбрать тип сервера - под Unix или NT. В - Открыть html-страницу, содержащую вашу форму. После этого CGI Stap Pro проверяет код, предупреждает об отсутствии обязательных полей (например, User_name, User_mail) и дает рекомендации по правильному написанию формы. Г - Пометить звездочкой (*) те поля формы, которые обязательны к заполнению. Д - Указать точный сетевой адрес, где будет размещаться скрипт, а также местоположение юниксовских программ mail и perl. Е - Написать простенький текст для сообщения, которое получит посетитель вашей страницы после того, как удачно заполнит форму, и...
Все! Нажимаете на кнопку "Write CGI", и программа сама генерирует код. Ради интереса откройте созданный файл и попробуйте сосчитать, сколько лет вам бы потребовалось для того, чтобы самому залудить такую абракадабру.
После создания скрипта самое главное - правильно перебросить его на сервер. В девяноста случаях из ста ламерский скрипт не работает именно потому, что его неправильно перебрасывают. Дело в том, что у протокола ftp бывает два метода передачи данных: АSCII (для текста) и binary (для программ). Скрипты с расширением cgi следует передавать не как программу, а как текст, то есть ASCII.
Конечно, сказать, что возможности CGI Star Pro очень узкие, значит ничего не сказать. На самом деле си-джи-ай-скрипты используются не только для интерактивных форм, но и для миллиона прочих полезных дел: ведения статистики посещений сайта, создания гостевой книги, опроса мнений, создания интерактивных тестов и квизов, проведения шлюзов к реляционным базам данных, осуществления поиска и индексирования сайтов и т. п.
И тут у ламера есть еще два варианта: во-первых, посетить сайт download.ru, где покоится неплохая коллекция самых разнообразных скриптов на все случаи жизни. Другой вариант - это программа PerlBuilder. Только сразу хочу предупредить: PerlBuilder - это не CGI Star Pro. Тут нажиманием двух кнопочек не отделаешься. Зато и возможности программы на несколько порядков выше.
PerlBuilder претендует на то, чтобы считаться не просто программой, но подлинной интегрированной средой разработчика (IDE - integrated development environment) для создания скриптов Перл на платформе Windows 95/NT. Кроме очень удобного графического интерфейса, PerlBuilder обладает возможностью отлаживать скрипт и проводить его дебаггинг, как говорится, "не отходя от кассы" (правда, для этого требуется дополнительно установить бесплатный Перл для Windows [1]). Помимо этого в PerlBuilder включен Мастер подсказок, который на порядок более гибок, чем CGI Star Pro, хотя по своей простоте не уступает австралийскому примитивисту.
|
CGI+SSI, пример счетчика
|
|
Включения. Иногда является необходимым включить результат работы CGI-скрипта в Web-страницу, чтобы избежать динамического формирования всей страницы одной большой CGI-программой. К тому же не всегда есть возможность первую страницу сервера сделать не статическим html -документом, а неким index.cgi. Проблемы такого типа легко решаемы, как с помощью специальных средств включения на стороне сервера (SSI), так и по средствам различных ухищрений.
SSI - Server Side Includes (включения на стороне сервера). Одно из средств решения рассматриваемой проблемы уже реализовано в самом Web-сервере (рассм. Apache 1.3.x). Вам опять же требуется только правильно настроить его. В статье Среда CGI, Web-сервер был затронут момент описания директорий сервера.
<Directory "/home/httpd/html">
Options Indexes FollowSymLinks Includes
AllowOverride None
Order allow,deny
Allow from all
</Directory>
Следует обратить внимание на строку Options - опции директории. Так вот последняя директива в этой строке - Includes и сообщает Web-серверу, что в этой директории разрешено использовать включения в коде Web-страниц. Однако, этой директивы в строке опций не достаточно. Еще требуется указать типы файлов, в которых допускаются включения:
AddType text/html .html
AddHandler server-parsed .html
Такое определение означает, что включения будут допускаться в файлах с содержанием типа text/html и расширением .html. Дело в том, что Web-сервер имеет собственный SSI-препроцессор, который работает подобно его собратьям из языков программирования высокого уровня. Для того, чтобы он стал корректно работать: проверять коды Web-страниц на наличие своих директив, его надо соответствующим образом настроить. Для этих целей и служат приведенные выше строки-примеры. На этом настройка SSI заканчивается.
Директивы включения. Здесь нас интересует включение результатов работы CGI-скриптов в код статичной Web-страницы, но SSI располагает еще несколькими возможностями. Например, включение другого html-документа в данный или автоматическое включение даты последней модификации Web-страницы. Можно таким же образом вставлять локальную и GMT дату, но эти возможности зачастую выполняет JavaScript. И так, для того, чтобы включить что-либо по средствам SSI в ваш HTML-код нужно вставить строчку вида:
<!--#elementh parameter1=value1 parameter2=value2-->
где каждый элемент имеет свой набор параметров:
Элементы | Параметры, описания | |
config | errmsg | Посылается сообщение об ошибке |
sizefmt | Формат вывода размера файла | |
timefmt | Формат вывода времени | |
echo | var | Печатает специальную переменную |
exec | cgi | Запуск cgi-скрипта, с включением результата |
cmd | Запуск комманды shell | |
fsize | file | Выдает размер файла (полный путь) |
virtual | Путь от корня Web-сервера | |
include | file | Вставляет файл (полный путь) |
virtual | Путь от корня Web-сервера | |
set | var | Имя переменной |
value | Присваемое значение |
Наиболее часто используемым элементом является exec, так как он один позволяет делать специфичные вещи. Остальные элементы не имеют такой популярности, за счет того, что большинство из них реализовано на языке JavaScript или попросту бесполезны.
Счетчик. Первая мысль, которая приходит после включения скриптов, выводящих отладочные бессмысленные надписи, это написать что-либо полезное. Типичным полезным CGI-скриптом требующим SSI является счетчик (образца 1995 года (-; ), формирующий на странице несколько картинок-цифр в соответствии с реальным (или накрученным) количеством посетителей. Алгоритм этой задачи можно обрисовать так: скрипт проверяет IP-адрес+текущую дату следующего посетителя, сравнивая с имеющимися в файле записями, и увеличивает значение счетчика, дополняя файл, если такой хост еще не заходил, или если текущая дата сменилась. CGI-скрипт счетчика включается в HTML-код строкой вида:
<!--#exec cgi="/cgi-bin/counter.cgi"-->
Начало формы
Код счетчика на языке Perl:
#!/usr/bin/perl
use Time::localtime;
print "Content-Type: text/html \n\n";
$ip=$ENV{'REMOTE_ADDR'};
#--------Beru datu
$tm=localtime();
$y=$tm->year;
$m=$tm->mon;
$d=$tm->mday;
$m++;
$y+=1900;
#-----------------
$curr=$d.$m.$y.":".$ip;
#print "Current status: $curr \n\n";
$yes=0;
open(COUNT, "count.dat") || die "Cannot open count.dat!!!\n";
while($str=<COUNT>)
{
chomp($str);
if ($curr eq $str)
{
$yes=1;
last;
}
}
close(COUNT);
open(CTR, "ctr.dat") || die "Cannot open ctr.dat file!!!\n\n";
$ctr=<CTR>;
close(CTR);
if (!$yes)
{
open(COUNT, ">> count.dat") || die "Cannot open count.dat for
writing!\n\n";
print COUNT "$curr\n";
close(COUNT);
$ctr++;
open(CTR, "> ctr.dat") || die "Cannot open ctr.dat for writing!\n\n";
print CTR "$ctr";
close(CTR);
#-------------risujem counter---------------
$zeros="0"x(6-length($ctr));
$ctr=$zeros.$ctr;
@counter=($ctr=~m/(.)/gi);
foreach(@counter)
{
$image="img/".$_."OCR.GIF";
print "<img src=\"$image\">";
}
#--------------------------------------------
}
else
{
$zeros="0"x(6-length($ctr));
$ctr=$zeros.$ctr;
@counter=($ctr=~m/(.)/gi);
foreach(@counter)
{
$image="img/".$_."OCR.GIF";
print "<img src=\"$image\">";
}
}
Конец формы
Используются два файла: counter.dat, в котором хранятся записи вида IP+Date и ctr.dat, где хранится текущее число посетителей. Можно было обойтись одним первым файлом, но не стоит забывать, что файл текстовый, а значит, его размер будет непрерывно расти, и нам потребуется периодически стирать записи, сделанные ранее. Картинки для счетчика представляют собой просто цифры от 0 до 9, и берутся из директории img на сервере. Надо заметить, что последнее время многие Web-мастера отказываются от использования SSI, прибегая к другим методам включения. Ведь можно просто вставить такую динамическую картинку:
< img src="/cgi-bin/image.cgi" >
при этом в CGI-скрипте использовать тип данных image/gif (или png, jpg ...). Основная проблема заключается в генерации картинки CGI-программой. Здесь тоже есть решение - графическая библиотека. Подключив такую объектно-ориентированную графическую библиотеку можно не только создавать изображения основными средствами (геометрические фигуры, кисти, шрифты), но и редактировать уже готовые.
Как "оживить" Perl/CGI скрипт
Введение
Данная статья призвана помочь взять "быстрый старт" тем, кто решил строить Web-приложения "своими руками" и выбрал в качестве средства для их создания язык программирования Perl (Practical Electric Rubbish Lister). Здесь вы найдете сведения о том где "взять" Perl-интерпретатор и как его установить, какие существуют способы отладки Perl-программы, а в завершении ознакомитесь с самой простейшей Perl-программкой.
Начнем с того, что Perl - это язык для создания серверных скриптов (литературный эквивалент - сценарий), т.е. Perl-программа выполняется на Web-сервере, а не на компьютере пользователя, как, например JavaScript-сценарии или Java-апплеты. Поэтому для проверки ваших творений одного броузера будет мало, необходимо иметь доступ к Web-серверу. Самый простой способ разрешения данной проблемы - использовать для отладки Perl-программы сервер в Internet, на котором разрешено выполнение сценариев. Но в этом случае, первое - вы тратите свои кровно заработанные денежки, второе - наслаждаетесь "быстротой соединения с Internet" -). Я же хочу предложить вам несколько альтернативных методов отладки Perl-программ, которые, надеюсь, избавят вас от вышеописанных неудобств.
Итак,
Метод1. Установить на своем компьютере Web-сервер и работать с ним как с обычным Internet-сервером.
Метод2. Воспользоваться специальными программами-отладчиками.
Метод3. Перенаправлять результаты работы интерпретатора в файл (стандартная возможность любой ОС).
У каждого из этих способов есть свои достоинства и недостатки. Но прежде чем применить один из вышеописанных методов, нужно настроить Perl-интерпретатор. Первым делом следует загрузить интерпретатор из Internet. Для OC Windows 9x следует скачать файл по следующему URL-адресу: http://www.activeware.com/download/ActivePerl/Windows/5.6/ActivePerl-5.6.0.613.msi . Если вы же используете другую ОС, загрузите страницу по адресу http://www.activeware.com/download , на ней выберите соответствующую ссылку, после чего "скачивайте" предложенный для этой цели файл.
После окончания процесса загрузки, запустите файл ActivePerl-5.6.0.613.msi или соответствующий файл для вашей ОС. Начнется процедура установки, в процессе которой вам предстоит ответить на ряд вопросов. В частности, о том, в какую директория нужно установить интерпретатор (устанавливать Perl желательно по следующему пути: диск:\usr).
Web-сервер (например, Apache) "узнает" о том, какую программу необходимо запускать для интерпретации скрипта из первой строчки программного кода скрипта. Например, строка #!/usr/bin/perl означает, что интерпретатор находится в директории /usr/bin и имеет имя perl.
Далее подробно рассматриваются все вышеперечисленные методы отладки Perl-программ.
Метод 1
Главное достоинство данного метода - это то, что работа с вашим сервером полностью аналогична работе с "реальным" Internet-сервером. Основной же недостаток заключается в том, что вы видите только окончательный результат выполнения скрипта, и не можете проследить его выполнение по шагам. Максимальная эффективность достигается при использовании данного метода в комплексе с методами 2 и 3, которые описываются ниже.
В качестве Web-сервера рекомендую использовать Apache (это один из самых распространенных, надежных серверов, а главное, что он бесплатный). Для корректной работы Apache под Windows 95 необходимо установить Winsock 2 (для Windows 98 и Windows NT 4.0 эта процедура не потребуется). Загрузите с сайта фирмы Microsoft файл W95ws2setup.exe (http://www.microsoft.com/windows/downloads/bin/W95ws2setup.exe) и запустите его. Произойдет установка Winsock 2. Теперь скачиваем файл apache_1_3_12_win32.exe для установки Apache под Windows (http://www.apache.org/dist/binaries/win32/apache_1_3_12_win32.exe). После установки сервера, его необходимо сконфигурировать. Для этого в любом текстовом редакторе открываем файл httpd.conf , который находится в подпапке Conf папки, в которую был установлен Apache. Далее выполните следующие действия по конфигурации сервера:
1. Находим строку DocumentRoot и прописываем физический путь к корневому каталогу (сайту). У меня, например, этот путь следующий "C:/FrontPage Webs/Content/mudconnector/" (заметьте, что при указании пути используется Unix разделитель, даже в среде Windows). Корневой каталог является для сервера стартовой точкой при поиске документов. Обращение к корневому каталогу осуществляется по URL-адресу, в котором указано только имя сервера (имя папки или страницы не указывается). Обычно при употреблении термина каталог опускают слово "виртуальный". Виртуальные каталоги представляют собой директории (папки), доступ к которым через Web осуществляется по логическому имени (псевдониму). Физически эти папки могут находиться в любом месте на вашем жестком диске или на другом компьютере. При создании виртуальному каталогу присваивается псевдоним, который ставится в соответствии физическому пути к нему.
2. Чуть ниже находится строка со словом Directory и прописываем то же путь ("C:/FrontPage Webs/Content/mudconnector/").
3. Строка со словами Options All говорит о том, что включены все возможности сервера, в том числе и поддержка cgi.
4. В строке со словами ScriptAlias /cgi-bin/ указываем путь к cgi-bin каталогу (в моем случае этот путь "C:/Apache/cgi-bin/").
5. Чуть ниже в строке со словом Directory указываем тот же путь "C:/Apache/cgi-bin"
6. Добавляем строку AddHandler cgi-script .cgi .pl. Тем самым даем понять серверу, что все фалы с расширением .cgi, .pl - являются cgi исполняемыми, т.е. программами.
Итак, настройка сервера завершена. Если вы сделали все правильно, то после запуска файла apache.exe на экран будет выведено сообщение типа "Apache/1.3.12 (Win32) running...". Теперь загрузите броузер и введите URL-адрес http://localhost. В броузер будет загружена домашняя страница корневого Web-узла - index.html (на моем компьютере физический путь к этой странице C:/FrontPage Webs/Content/mudconnector/index.html)
Теперь проверим, как выполняется Perl-программа на нашем сервере. Для этого создадим простенькую программку, текст которой приведен ниже:
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Ура работает!\n";
В текстовом редакторе создайте новый файл и введите вышеприведенный код программы. Сохраните данный файл, например, под именем test.pl в папке cgi-bin, которая находится в папке, в которую вы установили Apache. После этого перейдите в броузер и введите URL-адрес http://localhost/cgi-bin/test.pl. В броузер загрузится страница, содержащее долгожданное сообщение Ура работает! Это означает, что вы победили! Теперь можно закричать "Ура!"
Метод 2
Отладчик, какое это сладкое слово для программиста. Конечно же, используя отладчик, вы на порядок быстрее доберетесь до этих подлых глюков, которые мешают сделать рабочую программу. Но давайте серьезно. Существует довольно много программ-отладчиков для Perl-программ. Все они имеют свои плюсы и минусы. Рассмотрим наиболее популярные из них:
Perl Builder (http://www.querybot.com/perlbuilderev.exe) - одна из самых мощных и удобных программ - отладчиков под W32. Из наиболее полезных особенностей данной программы можно выделить: мощный механизм отладки скриптов, возможность просмотра значений переменных, очень удобный интерфейс эмуляции Cgi-запросов, приятный (дружественный) пользовательский интерфейс. Единственный минус, как для нас, жителей СНГ, это то, что данная программа коммерческая
DzSoft Perl Editor (http://www.dzsoft.com/download/dzperl22.zip) - эта программа также коммерческая. Небольшая и очень удобная программа. Особенности: возможность upload-а скриптов на сервер, быстрая вставка (вставка определенного куска кода нажатием, одной клавиши), возможность редактирования переменных окружения, возможность работать в разных кодировках, что очень удобно для русскоязычного пользователя.
Perl Studio (http://www.perl-studio.com/pstudio.exe) - очень мощный инструмент для создания Perl скриптов, функции отладки реализованы слабее, чем у вышеупомянутых "собратьев", но встроено очень много функций, полезных для создателя скриптов: автоматизация написания кода (например, SQL запросы, SSI - директивы), множество помощников и построителей, интуитивный интерфейс, хорошая документация. Опять же, программа коммерческая.
Метод 3
Самый простой метод работы с Perl-скриптами. Этот метод, не требует ни каких дополнительных программ кроме Perl - интерпретатора и броузера. Суть метода очень проста: после создания Perl скрипта мы запускаем интерпретатор и перенаправляем результаты работы в файл (например, для скрипта test.pl - perl test.pl > test.htm). После этого в полученном файле удаляем строку Content-type: text/html\n\n. Просматривая данный файл броузере, вы получите результат работы скрипта.
Рекомендуется не "зацикливаться" на каком-либо одном из этих методов, а стараться использовать комбинированный подход.
Perl = простота Basic + мощь Cи++
Введение
Михаил Евдокимов
МИР ПК #08/99
Популярность Internet растет с каждым днем, однако если раньше клиенты провайдеров в основном хотели получить доступ к системам электронной почты, то в последние два года наметилась тенденция к расширению спектра требуемых услуг. Теперь интересы пользователей не ограничиваются электронным почтовым ящиком и поиском какой-либо информации в WWW, они стремятся создавать собственные Web-страницы или даже Web-узлы. Новички организуют простые HTML-страницы, не обращая особого внимания на стиль и дизайн. Но со временем у них появляется желание сделать нечто эффектное и интересное для определенной части Internet-сообщества. И тогда новоявленному Web-мастеру приходится более полно изучить язык разметки гипертекста (HTML) и языки создания клиентских сценариев (VBScript1 и JavaScript)*.
Впоследствии у него могут появиться и новые запросы, — например пообщаться с посетителями своего узла. И в этом случае его уже не удовлетворит, если в тело страницы просто добавится <A HREF="mailto:writeme@site.ru">Webmaster</A>. Так, он решит, что неплохо было бы получить достаточно полную информацию о посетителях узла (имена, e-mail, телефоны, факсы и адреса), подсчитать количество посещений, собрать различные мнения и, наконец, создать базу данных, чтобы пользователям сеансов связи предоставить какие-либо определенные услуги. Но для всего этого знания HTML, VBScript1 и Java Script становится явно недостаточно, так как они описывают только технологию взаимодействия сервера и клиента.
Следовательно, нужно изучить языки для создания программ, работающих на сервере. Обычно их разрабатывают на Perl (Practical Extraction and Report Language — практический язык извлечений и отчетов), применяемом также для обработки потоков информации. Изначально предполагалось, что он будет использоваться в ОС Unix, но в дальнейшем Perl стали переносить на другие платформы, и сейчас он существует в самых разных версиях — для Unix, Windows, MS-DOS, OS/2, MacOS, Amiga, Atari ST, VMS, Plan 9 и др.
Для чего нужен Perl?
Perl предназначен для выполнения задач командных сценариев Unix в тех случаях, когда они слишком трудны, плохо переносимы или сложны для программирования на другом языке, например на Cи. Иногда содержимое Perl-программ выглядит для непосвященных как случайный набор символов, но, естественно, он имеет контрольную сумму, а каждый его символ — свое назначение.
Perl распространяется бесплатно, поэтому исходные тексты языка и многие двоичные файлы для использования вне Unix-архитектуры можно получить на одном из серверов сети CPAN (Comprehensive Perl Archive Network) по адресу http://www.perl.com/CPAN или на узле поддержки разработчиков по адресу http://www.basicnet.sonnet.ru/dounload.
Для создания и тестирования Perl-программ необходимы:
- любой текстовый редактор, позволяющий сохранять файлы в ASCII-коде (например, встроенный редактор из оболочки FAR Commander);
- программа конвертации ACSII-файлов в формат Unix-систем (в частности, редактор Castillo TextEditor, который можно свободно загрузить с сервера www.castillobueno.com);
- интерпретатор Perl для отладки (у автора — Win32-версия Perl, доступная по адресу ftp.perl.com/pub/perl);
- Web-сервер, поддерживающий работу Perl-программ (для проверки интерфейсных программ был применен Web-сервер OmniHTTPd 2.0 Professional, который можно загрузить с узла компании-разработчика по адресу www.omnicron.ab.ca/httpd);
- FTP-клиент для загрузки файлов на сервер (больше всего для этого подходит CuteFTP 2.0, позволяющий устанавливать права доступа к файлам; его можно найти по адресу www.cuteftp.com);
- любой Web-браузер (был использован MS IE 4.0).
Программы на языке Perl с расширениями .cgi или .pl должны находиться в специальном каталоге на Web-сервере, обычно называемом CGI-BIN. Размещая в нем свои программы, пользователи могут создавать там собственные папки для обеспечения иерархичности. Если сервер работает в среде Unix, то необходимо придать ему определенные права для доступа. Для исполняемых Perl-программ следует задать атрибут 755. Если в них существует какой-либо каталог, в котором будут производиться запись и удаление файлов, то предпочтительнее поставить атрибут 777 (полный доступ). Когда сервер работает под управлением операционной системы Windows 9.x/NT, то не следует преобразовывать созданные файлы в формат систем Unix. А операционные системы семейства Windows не позволяют выставлять атрибуты доступа подобно Unix-системам — в них используется другая методика.
Структура Perl-программ
Perl-программы очень похожи на написанные на Cи/Cи++, возможно, потому, что сам язык был написан на Cи. Все Perl-программы состоят из операторов, имеющихся в файле и рассматриваемых в совокупности как одна большая программа, подлежащая выполнению. Но понятия «основной» (main) программы, как в языке Си, здесь нет. Комментарием в Perl является все, что следует за «решеткой» (#), вплоть до конца строки. Интерпретатор языка перед выполнением разбирает программу и компилирует в свой внутренний формат. Поэтому после ее запуска невозможно получить сообщение о синтаксической ошибке — это происходит только в процессе отладки программы в командной строке. В результате обеспечивается быстрое выполнение операций языка Perl после запуска.
Для написания программы можно использовать любой текстовый редактор. Так, в Windows это Notepad (Блокнот) или WordPad, в OS/2 — e или epm, в Unix — vi или emacs. Обычно лучшему пониманию языка способствует разбор небольшой программы (см. листинг 1).
Листинг 1. Пример программы на Perl
#!/usr/local/bin/perl @passwords = qw (inet basic net); print ”Enter the login: ”; $login =
; chomp ($login); if ($login eq ”Root”) { print ”Hello, Administrator! Glad to see you again!\n ”; } else { print ”Enter password: ”; $pass =
; chomp ($pass); $i = 0; $flag = ”no”; while ($flag eq ”no”) { if ($passwords[$i] eq $pass) { $flag = ”yes”; } elseif ($i <2) { $i = $i + 1; } else { print ”Incorrect password for $login, try again.\n”; print ”Enter password: ”; $pass =
; chomp ($pass); $i = 0; } } }
Интересной особенностью Perl является то, что программист не объявляет типы применяемых переменных. В первой строке описывается физический путь к выполняемому модулю интерпретатора (например, PERL.EXE), который должен начинаться со знака комментария (#):
#!/usr/local/bin/perl
В рассматриваемом случае массив @passwords включает три элемента: inet, basic, net. Команда qw(), заключающая их в скобки, освобождает от ввода кавычек, необходимого при использовании общепринятой конструкции вида
@passwords = (”inet”, ”basic”, ”net”);
Оператор print служит для вывода на экран символьной информации
print ”Enter the login: ”;
Приведенная ниже конструкция напоминает аналогичную по смыслу на языке Паскаль:
print ”Enter the login: ”; $login =
;
Следовательно, сначала располагается оператор вывода информации (print), а затем оператор ввода строки с терминала, выполняющегося в Perl с помощью считывающей одну строку данных конструкции . Переменная $login содержит и завершающий символ строки, например, Root будет введено как Root\n. Чтобы убрать лишний символ, требуется функция chomp, которая в качестве своего единственного параметра принимает скалярную переменную и удаляет из нее завершающий символ перехода на новую строку, если этот символ там присутствует:
chomp ($login);
Далее используется конструкция if-then-else:
if ($login eq ”Root”) { print ”Hello, Administrator! Glad to see you again!\n”; } else { ... }
Наличие значения переменной $pass среди элементов массива @passwords проверяет $passwords[$i] eq $pass.
Следующая ниже операция сложения
$i = $i + 1;
увеличивает текущее значение счетчика на одну позицию. В строке
print ”Incorrect password for $login, try again.\n”;
между кавычками помещается переменная $login, содержащая вводимое пользователем значение. В других языках программирования значения переменных обычно отделяются от данных. Например, в Basic эта строка будет иметь следующий вид:
print ”Incorrect password for”; login$ ; ” try again.”
Perl оперирует только двумя типами данных — скалярами и массивами, хотя в нем существует и такой тип, как ассоциативные массивы (хеши). Однако они являются некоторым специфичным подмножеством обычных.
Все числа и строки — это скалярные данные, или просто скаляры. Их названия начинаются со знака доллара (‘$’). Perl различает регистр символов, так, $Name и $name — две разные переменные. Числа, в отличие от строк, не нужно заключать в кавычки, например,
$a = 2; $b = 6; $c = $a . $b; # ”.” — операция конкатенации двух строк $d = $c / 2; print $d; # — результат равен 13
Аналогичный пример для строковых значений выглядит иначе (см. листинг 2).
|
Дата добавления: 2018-04-04; просмотров: 1005; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!