====== Упражнения и задания к урокам ====== ===== Урок 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(); };