Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

End_html;             # Создание окончания Web-страницы




По своим функциональным возможностям эти стили не отличаются друг от друга, поэтому в дальнейшем будет использоваться стиль, ориентированный на функции, как более простой для использования.

При использовании стиля, ориентированного на функции, необходимо при подключении модуля CGI определить функции или наборы функций, которые будут импортированы из модуля в программу с помощью следующего синтаксиса:

 

useCGIсписок-функций;

 

Однако более часто используются наборы функции, импортируемые по их групповому имени. Перед именем набора ставится префикс ":". Наиболее часто используются набор :standard, в который входят функции обработки форм и дескрипторов HTML, а также функции, связанные с интерфейсом CGI и набор :all, в который входят все функции модуля CGI.

 

Функции модуля CGI

В модуле CGI определено множество функций, которые можно разбить на следующие категории:

- функции управления Web-браузером;

- функции для обработки параметров;

- информационные функции;

- функции для записи дескрипторов.

Функция управления header информирует Web-браузер о том, данные какого типа он будет получать. Для этого используется параметр Content-Type. По умолчанию функция header посылает Web-браузеру заголовок Content-Type типа text/html. Чтобы указать другой тип получаемых данных, используется ключ -type, например:

 

print header (-type => image/gif);

В качестве параметра при вызове функции header может быть задано любое имя параметра заголовка HTTP, в котором впереди добавлен символ "-", а все символы дефиса "-" заменены символами подчеркивания "_". Кроме того, при вызове можно указать несколько параметров, разделенных запятыми, например:

 

print header(-Content_length=>3002, -Server=>$server_name);

Для обработки параметров в модуле CGI используются функции param и escape. Функция param без параметров возвращает имена параметров, переданных CGI-программе (с помощью метода GET или POST). Если у функции param задан аргумент, она возвратит значение параметра, имя которого задано в качестве аргумента, например, param(¢username¢)возвратит значение username, введенное в форме или заданное в запросе. При этом будут, в случае необходимости, выполнены преобразования шестнадцатеричных представлений в символьные представления. Если параметр, указанный в аргументе функции param, не используется в форме, функция возвращает значение undef.   

Если функция param декодирует переданные из формы или запроса данные, то функция escape выполняет обратную операцию – кодирование данных для передачи. Такая задача иногда возникает, когда в выводном потоке CGI-программы должен быть сформирован запрос. Следует отметить, что при использовании модуля CGI функция escape обычно недоступна для программы, и в случае необходимости ее приходится указывать в операторе use в явном виде.

В модуле CGI раз­работан целый набор функций, предназначенных для получения информации о типе Web-браузера и Web-сервера.

Однако следует отметить, что большинство описанных в этом разделе функций зависит от значений, которые предоставляются Web-сервером или посылаются Web-браузером в сеансе связи с сервером через протокол HTTP, т.е. Web-браузеры и Web-серверы не всегда сообщают точные сведения о себе.

Некоторые наиболее распространенные функции представлены в таблице:

 

Функция   Описание  
referer Возвращает URL гиперссылки, с помощью которой будет осуществлен переход к этой странице.  
user_agent Возвращает строку, идентифицирующую тип Web-браузера, который запросил страницу (например, браузеры Netscape, IE или Lynx).  
remote_host Возвращает либо имя компьютера (host), либо IP-адрес системы, которая запросила страницу. Получаемое значение зависит от того, как сконфигурирован ваш Web-сервер и доступно ли для него имя удален­ного компьютера (hostname).  
script_name Возвращает имя данной CGI-программы в виде части URL (например, /cgi-bin/foo.pl).  
server_name Возвращает имя сервера, на котором работает CGI-программа
virtual_host Возвращает имя виртуального Web-сервера, который использовался для выполнения данной CGI-программы. Эта функция отличается от функции server_name, поскольку зачастую один сервер может управлять несколькими Web-узлами. Функция virtual_host возвращает имя конкретного узла, который был затребован.  

 

И, наконец, последнюю, самую большую группу функций составляют функции, формирующие дескрипторы языка HTML. Как правило, их имена совпадают с наименованиями соответствующих дескрипторов HTML, например h1, или эти функции формируют начальные и конечные дескрипторы, например start_table и end_table.

При программировании с использованием модуля CGI можно дать следующие рекомендации:

1. Для управления программой, работы с параметрами и получения информации о Web-браузере и Web-сервере рекомендуется использовать функции модуля CGI.

2. Программирование дескрипторов HTML, вставок сценариев, листов стилей и апплетов выполнять вручную, без использования соответствующих функций модуля CGI.

 

Использование файлов DBM

При программировании на Perl использование DBM-файлов является самым простым способом хранения структурированных данных. Файлы DBM, обычно используемые в UNIX, обладают одним замечательным свойством – в программах на Perl их можно напрямую связать с хэш-массивом. При этом чтение и запись DBM-файлов сводится к простым операциям с хэш-массивами, которые рассматривались в 2.10.

Хотя DBM-файлы можно использовать и при написании программ обработки данных в локальном режиме, они наиболее подходят при создании несложных баз данных на Web-сервере с доступом к ним с помощью CGI-программ, написанных на Perl.

Чтобы связать хэш-массив с DBM-файлом, в Perl используется функция dbmopen, синтак­сис которой выглядит следующим образом:

 

dbmopen (хэш,имя-файла,права-доступа)

 

В результате выполнения этой функции указанный хэш-массив подключается к файлу DBM. Параметр имя-файла на самом деле определяет два файла на жестком диске: имя-файла.pag и имя-файла.dir. Они используются Perl для хранения данных в иерархическом виде и быстрого доступа к ним. Эти файлы не являются текстовыми, поэтому их нельзя редактировать с помощью обычного текстового редактора.

Третий параметр функции dbmopen определяет права доступа, которые назначаются двум файлам DBM при их создании (задаются в виде восьмеричного числа). Например, значение кода прав доступа, равное 0666, обеспечивает дос­туп по чтению и записи к файлам DBM для всех пользователей данного ком­пьютера; значение 0644 позволяет читать и записывать данные владельцу файла, в то время как для остальных пользователей обеспечивается только режим чтения. При работе в системе Windows данный параметр не играет особой роли, поскольку в ней не предусмотрены средства управления доступом, поэтому в Windows обычно используется значение 0666.

Функция dbmopen возвращает истинное значение, если операция подключения хэш-массива к файлу DBM прошла успешно, например:

 

dbmopen(%hash, "dbafile", 0644) ||

die "Ошибка при открытии DBM-файла: $!";

 

После выполнения этого оператора устанавливается связь хэш-массива %hash с DBM-файлом dbmfile. Для хранения хэш-массива на диске Perl создает два файла: dbmfile.pag и dbmfile.dir. Если в последующих операторах значение элементов хэш-массива будет измене­но (как показано ниже на примере), Perl автоматически обновит соответствующие DBM-файлы:

 

$hash{'155-1515'}="Иванов";

$hash{'442-1139'}="Петров";

Обращение к элементам хэш-массива автоматически приводит к считыванию информации из DBM-файла, например:

 

print $hash{'442-1139'};

Чтобы разорвать связь хэш-массива %hash с DBM-файлом, используется функция dbmclose, например,

 

dbmclose(%hash);

После выполнения этой функции элементы хэш-массива "155-1515" и "442-1139" останутся в DBM-файле. В результате при следующем запуске программы и связывании хэш-массива %hash с DBM-файлами значение указанных элементов хэш-массива будет восстановлено.

С хэш-массивами, связанными с DBM-файлами, можно выполнять те же операции, что и с обычными хэш-массивами, в том числе использовать функции keys, values и delete. Чтобы очистить хэш-массив (и соответственно DBM-файл), надо присвоить ему пустой список, например:

 

%hash=();

Чтобы инициализировать хэш-массив и соответствующий ему DBM-файл, после выпол­нения функции dbmopenнадо присвоить ей нужные значения в списке.

 

Задания для выполнения

 

Разработать perl-скрипт в соответствии с вариантом задания.

 

Варианты индивидуальных заданий.

 

1. В двух предложениях найти и распечатать совпадающие слова.

2. В предложении найти слово, состоящее из наибольшего количества гласных букв.

3. Распечатать слова, из которых состоит предложение, в порядке возрастания длины слова.

4. В предложении найти все однокоренные слова. Корень слова также задан с клавиатуры.

5. Удалить в предложении все повторные вхождения слов и распечатать получившееся предложение.

6. Найти в предложении слово, состоящее из наибольшего количества разных букв.

7. Выделить из предложения слова, содержащие две или более одинаковые буквы.

8. Напечатать слова, входящие в предложение, в алфавитном порядке.

9. Удалить из предложения все предлоги. Список предлогов задан во втором предложении.

10. Все буквы каждого слова в предложении записать в обратном порядке и распечатать получившееся предложение.

11. Во всех словах предложения удалить гласные буквы и распечатать по лучившееся предложение.

12. Дополнить каждое слово предложения пробелами так, чтобы его длина была равна длине самого длинного слова. Распечатать получившееся предложение.

13. Исходное предложение, состоящее из четырех слов, каждое из которых состоит из четырех букв, например, "Было утро, рано петь." распечатать в виде:

 

Бурп ытае, лрнт оооь.

 

Первое слово состоит из первых букв слов, второе - из вторых, и так далее.

14. С клавиатуры введены две строки. Одна строка - предложение на русском языке, а вторая (под ней) состоит из пробелов и знаков "минус" или "равно" (будем считать это подчеркиванием). Выделите (распечатайте) подчеркнутые слова. Например:

 

От перемены мест слагаемых сумма не меняется.

      ----  =======

15. Проверьте на совпадение два предложения. Количеством пробелов между словами пренебрегать. Знаки препинания - учитывать.

16. Удалить в предложении все слова, имеющие символы цифр и распечатать получившееся предложение.

17. Предложение состоит из записи символов цифр, например:

123434 53423 2344 6564.

Распечатать слова в порядке возрастания.

 


 

лАБОРАТОРНАЯ РАБОТА №4

Регулярные выражения в Perl


Цель работы

 

Получить навыки работы с регулярными выражениями на языке Perl.

 

Общие сведения

Основные определения

 

Регулярные выражения в perl (regexp) одна из самых мощных его возможностей. Они позволяют сопоставлять текст с указанным шаблоном, разбивать текст в массив по шаблону, производить замену текста по шаблону и многое другое. Также иногда регекспами называются операторы поиска и замены.

Оператор q(text) заменяет строку text на строку, заключенную в одинарные кавычки(например, если в q(text) поставить символ q(text\n), то напечатает text\n, т.е. \n это два символа, подобно print 'amam $file' напечатает amam $file). В данном случае почти все специальные символы не будут интерпретироваться внутри q(), исключая '\':

 

$some=q(Don't may be);

 

Оператор qq~text~; (вместо значка ~ можно ставить например знак |) позволяет работать со строками и многострочными текстами.Используя этот оператор, можно выводить целые куски html-кода и писать в этом коде имена скалярных переменных.

Оператор qw("text") разбивает строку на массив слов:

 

@mass=qw("я вышел погулять и увидел как через реку строят новый мост");

#хотя с настроенной локалью будет работать и

@mass=qw(я вышел погулять и увидел как через реку строят новый мост);

for(@mass){print $_,"\n"}

Оператор qr/pattern/ ключи- imosx работает подобно регулярному выражениюs/.../.../:

 

$rex=qr/my.STRING/is;

s#$rex#foo#;

#тожесамое, чтои

s/my.STRING/foo/is;

 

Результат может использоваться подобно вызову подпрограммы(см.perldoc perlop Regex quote like operator):

 

$re=qr/$pattern/;

$string=~/foo${re}bar/;

$string=~$re;          

$string=~/$re/; 

 

Ключи imosx стандартные(см. ниже).

Оператор qx/STRING/ работает как системная команда, подобно $output = `cmd 2>$1`;. Программа, иллюстрирующая использование данного оператора:

 

#!/usr/bin/perl

qx[dbfdump --fs="\x18" --rs="\x19" pdffile.dbf >pdffile.txt];

 

Файл pdffile.dbfсодержит memo-поля(memo-поле содержит ссылку подобно функции seek на текст в файле с расширением *.fpt). Он принимает разрешения FoxBASE4 и дампит файлы со встроенными memo-полями в текстовый вид. Таким образом получилается вытащить информацию из файла memo-типа *.fpt.

Допустим, используя команду $perl_info = qx(ps $$);, мы выводим информацию о текущем процессе запущенного скрипта(каждая запущенная программа в UNIX имеет свой собственный уникальный идентификатор, который содержится во встроенной переменной $$ - достаточно уникальное число, можно использовать почти как счетчик случайных чисел). Если сказать $shell_info = qx'ps $$'; то выведет информацию о самом ps. Т.е. скобки осуществляют своеобразное экранирование от двойной кавычки.

В перл есть три основных оператора, работающих со строками:


m/.../ - проверка совпадений (matching),










Последнее изменение этой страницы: 2018-04-12; просмотров: 344.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...