- •Введение
- •Немного о cgi
- •Как работает Perl
- •Первая программа на Perl
- •Переменные и типы данных в Perl
- •Строковые данные
- •От простого к сложному
- •Запуск интерпретатора Перл
- •Синтаксис
- •Переменные
- •Встроенные переменные Перл
- •Регулярные выражения (шаблоны)
- •Операторы и приоритеты
- •Встроенные функции
- •Группа системных вызовов
- •Подпрограммы
- •Модули (packages)
- •Форматы
- •Отладка Перл программ
- •Запуск интерпретатора Перл.
- •Ассоциативные массивы в Perl.
- •Что такое Perl?
- •Как Perl обрабатывает данные из форм
- •Как генерируются web-страницы "на лету"
- •В чем различие между программой и скриптом?
- •Альтернативы Perl
- •Что вам требуется, чтобы запустить Perl
- •Где взять Perl
- •Этапы создания скрипта
- •Основные части Perl скрипта
- •Пример скрипта с формой
- •Обсуждение: Настройка скрипта
- •Обсуждение: Чтение данных из формы
- •Обсуждение: Что делать с данными?
- •Обсуждение: Запись в файлы
- •Пример: Создание новой html страницы
- •Пример: Добавление в конец файла
- •Пример: Добавление в середину существующего файла
- •Пример: Отправка данных по e-mail
- •Обсуждение: Создание web-страниц "на лету"
- •Встроенные переменные Перл.
- •Модули (packages)
- •Конструкторы и деструкторы
- •Создание библиотеки
- •Стандартные Перл библиотеки
- •Pragma библиототеки
- •Операторы и приоритеты.
- •Tr/таблица1/таблица2/cds y/таблица1/таблица2/cds
- •От простого к сложному.
- •Переменные
- •Скалярные значения
- •Конструкторы скаляров
- •Конструкторы списков
- •Практический Перл для начинающего.
- •Add_guestbook.Pl - запись в книгу
- •Read_guestbook.Pl - чтение книги
- •Подпрограммы
- •Private переменные
- •Переменные типа local
- •Прототипы (prototypes)
- •Ссылка как параметр
- •Переопределение встроенных функций
- •Автозагрузка
- •Регулярные выражения (шаблоны) Perl.
- •Синтаксис
- •Декларации (объявления)
- •Простое предложение
- •Сложные предложения
- •Операторы управления циклом
- •Цикл for
- •Цикл foreach
- •Оператор goto
- •Pod операторы. Документирование программ
- •4.Языковые конструкции Perl 4.1.Ссылки
- •4.5.Подпрограммы и модули
- •Введение
- •Cтруктуры данных
- •Скалярные величины
- •Простые массивы
- •Ассоциативные массивы
- •Основные понятия
- •Простые операторы
- •Составные операторы
- •Термы и операторы списка
- •Оператор ``стрелка''
- •Экспоненциальный оператор
- •Символьные унарные операторы
- •Операторы связки
- •Бинарные операторы
- •Операторы сдвига
- •Операторы сравнения
- •Операторы эквивалентности
- •Побитовое и, побитовое или и Исключающее или
- •Логическое и и логическое или
- •Оператор диапазона
- •Условный оператор
- •Операторы присваивания
- •Оператор ``запятая''
- •Логическое не
- •Логическое и, или и Исключающее или
- •Оператор чтения из файла
- •Оператор замены строки
- •Оператор замены множества символов
- •Основные понятия
- •Символьные ссылки
- •Регулярные выражения
- •Зарезервированные переменные
- •Встроенные функции
- •Подпрограммы
- •Конструкторы и деструкторы пакетов
- •Объектная ориентация
- •Объекты
- •Вызов метода
- •Деструкторы
- •Установка поддержки perl для iis3 под Windows nt Почему была написана эта заметка
- •Кратко о perl-модулях от Active State
- •Что скачивать
- •Как устанавливать
- •Как проверить
- •Что дальше
- •Введение в Perl Пару слов от автора
- •Краткое лирическое отступление насчет cgi
- •Итак ...Приступим...
- •Переменные среды cgi
- •Прекрасный язык Perl
- •If(условие)оператор;
- •Заголовки запросов и ответов
- •Права Доступа
- •Генерация ответа
- •Обработка Форм
- •Изображения ismap
- •Анимация
- •Несколько советов по отладке
- •Кто посещает мою страничку?
- •Гостевая книга
- •Счетчик посещений
- •Введение
- •Взаимодействие с субд
- •Основные функции доступа
- •Дополнительные функции
- •Переменные
- •Переменные для подстановки
- •Написание модулей cgi
- •Обработка файлов формата dbf
- •Изучаем Perl. Глава 1
- •Происхождение
- •Похож на Си?
- •Стоимость и лицензия
- •Проинсталлирован ли у вас Perl?
- •Ваша первая программа на Perl
- •Создание программы
- •Глава 2
- •Числовые литералы
- •Стринговые литералы
- •Строки с одинарными кавычками
- •Строки с двойными кавычками
- •Строки с обратными одинарными кавычками
- •Массивы
- •Вложенные массивы
- •Использование диапазона значений
- •Глава 3
- •Типы операторов
- •Бинарные арифметические операторы
- •Унарные арифметические операторы.
- •Логические операторы
- •Пример оператора логического "и" - (&&)
- •Пример оператора логического "или" - (||)
- •Пример оператора логического "не" - (!)
- •Битовые операторы
- •Операторы числовых отношений
- •Операторы отношений строк
- •Использование ternary-оператора
- •Оператор интервала ".."
- •Использование оператора интервала
- •Строковые операторы "." и "X"
- •Использование оператора конкатенации
- •Использование оператора репликации (повтора)
- •Операторы присваивания
- •Глава 4
- •Строковые функции
- •Функции для работы с массивами.
- •Немножко о модуле cgi.Pm в Perl.
- •Жемчужные формы
- •Как "оживить" Perl/cgi скрипт Введение
- •Метод 1
- •Метод 2
- •Метод 3
- •Введение
- •Для чего нужен Perl?
- •Структура Perl-программ
Кто посещает мою страничку?
Вам иногда хотелось наверное узнать,кто же смотрит на вашу страничку,откуда и когда ваша страничка посещалась. Бывают такие вопросы? Кто-то считает,что ответить на них нельзя. Но вы не верьте этому расхожему мнению. Один раз с подобными вопросами ко мне подошел мой одногрупник, Диман. У него неплохой сайт. и туда к нему всегда валит целая куча народа. Вот как раз разговор и зашел об этой куче народа. Результатом моего непродолжительного труда стал небольшой скрипт.В страничку он втакается через тэг <IMG src="cgi-bin/get_ip.cgi"> он покажет вам изображение что не будет бросаться в глаза. Зато при своей работе он все запишет в файл ipdata.txt : В нем будет время и IP-адрес того,кто смотрел на вашу страничку!
#!/usr/bin/perl
#get_ip.cgi
$gif="../gifs/player.gif";
$data="ipdata.txt";
print "Content-Type: image/gif\n\n";
open G,$gif;
print <G>;
close G;
open D,">>$data";
print D scalar localtime,' '.$ENV{'REMOTE_ADDR'}."\n";
close D;
Гостевая книга
А вот еще пример того,как можно с умом использовать нехитрые знания. Гостевая книга ,в которую каждый может записать свое вам пожелание. К ней прилагаются .gif -файлы,позволяющие указать свое настроение. Запись происходит в базу данных guestbook.dat и при каждой новой записи в гостевую книгу скрипт извещает по почте хозяина гостевой книги, а тому кто в нее вошел по почте посылается сообщение об этом.
#!/usr/bin/perl
#guestbook.cgi
$myemail="paaa\@uic.nnov.ru";
$myname="lesha";
$mail="mail";
($sd,$sn)=($ENV{'SCRIPT_FILENAME'}=~/(.*)\/([^\/]*)/);
$datafile=$sd."\/guestbook.dat";
@Mailgifs=qw(../gifs/mood0.gif ../gifs/mood1.gif ../gifs/mood2.gif);
$Facetxt{$Mailgifs[0]}= ":)";
$Facetxt{$Mailgifs[1]}= ":|";
$Facetxt{$Mailgifs[2]}= ":(";
sub urldecode{
local($val)=@_;
$val=~s/\+/ /g;
$val=~s/%([0-9A-H]{2})/pack('C',hex($1))/eg;
return $val;
}
sub strhtm{
local($val)=@_;
$val=~s/&/&/g;
$val=~s/</</g;
$val=~s/>/>/g;
$val=~s/(http:\/\/\S+)/<A href="$1">$1<\/A>/g;
return $val;
}
$cont_len=$ENV{'CONTENT_LENGTH'};
if($ENV{'REQUEST_METHOD'} eq 'GET'){$query=$ENV{'QUERY_STRING'};}
else {sysread(STDIN,$query,$cont_len);}
if($query eq ''){
print "Content-type: text/html\n\n";
print <<HTML_generating;
<HTML><HEAD><TITLE>Wellcome to my guestbook</TITLE></HEAD>
<BODY bgcolor="cyan">
<CENTER><H1>Wellcome to my guestbook</H1></CENTER>
<HR><FORM action="guestbook.cgi" METHOD="POST">
<TABLE border=0>
<TR><TD>Name:</TD><TD colspan=3><INPUT NAME="Name"></TD></TR>
<TR><TD>E-mail:</TD><TD colspan=3><INPUT NAME="Email"></TD></TR>
<TR><TD>URL:</TD><TD colspan=3><INPUT NAME="URL"></TD></TR>
<TR><TD>Message:</TD><TD colspan=3><TEXTAREA NAME="Message" rows=6 cols=64></TEXTAREA></TD></TR>
<TR><TD>Mood:</TD><TD><IMG src="$Mailgifs[0]"></TD><TD><IMG src="$Mailgifs[1]"></TD><TD><IMG src="$Mailgifs[2]"></TD></TR>
<TR><TD> </TD><TD><INPUT TYPE="radio" NAME="Mood" VALUE="$Mailgifs[0]"></TD>
<TD><INPUT TYPE="radio" NAME="Mood" VALUE="$Mailgifs[1]"></TD>
<TD><INPUT TYPE="radio" NAME="Mood" VALUE="$Mailgifs[2]"></TD></TR>
<TR><TD colspan=2><INPUT TYPE="submit" VALUE="Send"></TD>
<TD colspan=2><INPUT TYPE="reset" VALUE="Clean"></TD></TR>
</TABLE></FORM>
<HR><BR>
HTML_generating
open DATAFILE,"$datafile"|| die "Cannot open $datafile $!\n";
@GUESTDATA=<DATAFILE>;
print @GUESTDATA;
close DATAFILE;
print "</BODY></HTML>";
}
else{
foreach(@fields=split(/&/,$query)){
if(/^Name=(.*)/){$Name=&urldecode($1);}
if(/^Email=(.*)/){$Email=&urldecode($1);}
if(/^URL=(.*)/){$URL=&urldecode($1);}
if(/^Message=(.*)/){$Message=&urldecode($1);}
if(/^Mood=(.*)/){$Mood=&urldecode($1);}
}
$MESSAGE=&strhtm($Message);
if(-e $datafile){unless (-r $datafile && -w $datafile){die "Cannot access $datafile\n";}}
$Newmsg="<IMG src=\"$Mood\"><BR><A href =\"mailto:$Email\">$Name</A>".
"(<A href=\"$URL\">$URL</A>):<BR>\n$MESSAGE<HR>\n";
open DATAFILE,"+<$datafile" || die "Cannot open $datafile $!\n";
@GUESTDATA=<DATAFILE>;
@GUESTDATA=($Newmsg,@GUESTDATA);
seek(DATAFILE,0,0);
print DATAFILE @GUESTDATA;
close DATAFILE;
print "Content-type: text/html\n\n";
print "<HTML><HEAD><TITLE>Congratulations</TITLE></HEAD>\n";
print "<BODY bgcolor=\"cyan\">\n<CENTER><H1>Congratulations:you have successfully entered to $myname\'s";
print "guestbook.Thank you!</H1></CENTER><HR>$Newmsg</BODY></HTML>";
open MAIL,"|$mail $Email";
print MAIL "Guestbook\n";
print MAIL "You have entered to $myname\'s guestbook\n";
print MAIL "Thank you.\n\t\t\t\t$myname";
close MAIL;
format NOTIFYMAIL=
Guestbook
========================== Guestbook Entry =======================
| Time: |Name: |
| @<<<<<<<<<<<<<<<<<<<<<<<<|@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< |
scalar localtime,$Name
+--------------------------+-------------------------------------+
| Email: |URL: |
| @<<<<<<<<<<<<<<<<<<<<<<<<|@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< |
$Email,$URL
+--------------------------+-------------------------------------+
| ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< |
$Message
| ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< |
$Message
| ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< |
$Message
| ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @<<<<< |
$Message,$Facetxt{$Mood}
==================================================================
.
open NOTIFYMAIL,"|$mail $myemail";
write NOTIFYMAIL;
close NOTIFYMAIL;
}