====== Упражнения и задания к урокам ======
===== Урок 0: простые числовые функции =====
**Задание:** Написать небольшой скрипт, который вычисляет некоторую числовую функцию, определненную самим программистом
(корни квадратного уравнения, факториал натурального числа, числа Фиббоначи, простое число или составное и т.п.)
Примерный образец реализации такого задания может быть [[:perl:ex0|найден здесь]].
===== Урок 1: ввод/вывод (консоль, локальный файл) =====
**Задание:** Написать небольшой скрипт, который считывает строку с клавиатуры, выводит ее в каком-либо измененном виде, дописывает ее в файл.
Примерный образец реализации такого задания может быть [[:perl:ex1|найден здесь]].
===== Урок 2: работаем со списками и хэшами =====
**Задание:** Написать скрипт, эмулирующий логин в некоторую систему. Пользователю предлагается ввести имя, потом ввести пароль. Система проверяет существование пользователя, соответствие пароля. По требованию выдается справка, предоставляется возможность выйти из системы, есть некоторые сервисные функции (список логинов и паролей, отсортированные списки числа посещений и времени посещения и т.д.)
Образец задания 2 [[:perl:ex2|здесь]].
===== Урок 3: работаем со строками =====
Цель урока: научиться работать с простыми строковыми функциями, такими как index и substr.
Основное задание: дан html-файл, в котором каждый тэг расположен не более чем в одной строке. Нужно, построчно считывая файл, найти все тэги и удалить их.
Файл для задания 3 [[:perl:task3|здесь]].
Образец задания 3 [[:perl:ex3|здесь]].
**Более простое упражнение.** Взять некоторый многострочный текстовой файл произвольного содержания, в котором встречается определённое слово, например "test", заранее определённое число раз. Написать скрипт, который подсчитывает точное количество вхождений слова "test" в указанном текстовом файле с помощью функции index($str,"test",$pos), используемой в цикле. Особой оптимизации не требуется, главное -- точный подсчёт встречаемости!
Файл для упражнения [[:perl:task3-0|здесь]].
===== Урок 4: регулярные выражения =====
Цель урока: ознакомить с простейшими приемами использования регулряных выражений в поиске и замене.
**Задание 4-1:** Решить задачу из предыдущего урока с использованием регулярных выражений.
Образец выполнения задания [[:perl:ex4-1|здесь]].
**Задание 4-2:** В html-файле извлечь URL всех ссылок на доменные зоны .ru и .com (остальные не извлекать) и дать отчет отдельным текстовым файлом построчно. Файл реальный, грязно офромленный, с разрывами строк внутри тэгов.
Файл для задания 4-2 [[:perl:task4-2|здесь]].
===== Урок 5: простое применение cgi =====
Цель урока: ознакомиться с простейшими возможностями формирования html-страницы "на лету" средствами cgi-программирования.
**Задание 5:** Сформировать динамически на PERL простую html-страницу.
Примерный образец реализации такого задания может быть [[:perl:ex5|найден здесь]].
===== Урок 6: использование модуля CGI.pm =====
Цель урока: ознакомиться с возможностями простого диалога клиента и сервера, используя возможности модуля CGI.pm
**Задание 6:** Создать в каталоге public_html html-страницу, содержащую форму, одно текстовое поле ввода, кнопку сброса и кнопку выполнения. Создать на PERL скрипт, который в теле динамически генерируемой страницы показывает то, что было введено в поле ввода исходной формы.
Примерный образец реализации такого задания может быть [[:perl:ex6|найден здесь]].
[[http://users.nsunc.com/~vlasov/testform.html|Образец страницы]], использующий данный скрипт, и [[:perl:ex6html|код самой страницы]]
===== Урок 7: без использования модуля CGI.pm =====
Цель урока: простой диалог клиента и сервера, не используя возможности модуля CGI.pm. Данная необходимость может возникнуть для достижения эффективности (каждый запуск модуля несет накладные расходы) или в простейших скриптах, где не нужны большие возможности модуля.
**Задание 7:** Повторить предыдущее задание, не используя модуль CGI.pm.
Примерный образец реализации такого задания может быть [[:perl:ex7|найден здесь]].
[[http://users.nsunc.com/~vlasov/testform2.html|Образец страницы]], использующий данный скрипт, и [[:perl:ex7html|код самой страницы]]
**Отметим**, что cgi-скрипты можно писать на любом языке программирования, [[perl:ex7pascal|например, на Pascal]], и работать это будет следующим образом: [[http://users.nsunc.com/~vlasov/testpas.html|Образец страницы на паскале]].
[[perl:testcgi|тестовая страничка на Баше]]
===== Урок 8: Работа с "ключиками" в CGI.pm =====
Скрипт ниже первым делом пытается считать ключик с именем "mucoo", и если ключик определен, то выводится его значение. Если ключик не определен, то он создается. Значение выбирается по текущему времени в секундах: %%$t = time();%% а время жизни --- один час. При этом выводится вся возможная информация о ключике с именем "mucoo". [[http://users.nsunc.com/~vlasov/cgi-bin/cookie.cgi|Действующий скрипт доступен здесь.]]
#!/usr/bin/perl
use CGI qw(:standard);
$coo = cookie("mucoo");
if (defined($coo)) {
#if (1) {
print header(-charset=>"utf-8");
print start_html("Your cookie"), p("You cookie was: $coo"), end_html();
} else {
$t = time();
$coo = cookie(-name => "mucoo", -value => $t, -expires => "+1h");
print header(-charset=>"utf-8",-cookie=>$coo);
print start_html("Setting cookie"), p("You cookie is now: $coo"), end_html();
};