Лаб 1 Perl.ppt
- Количество слайдов: 21
Введение в Perl
Perl является интерпретируемым языком, созданным программистом Лари Уоллом (Larry Wall) для обработки больших текстов и файлов и расшифровывается, как Practical Extraction and Report Language (язык для практического извлечения данных и составления отчетов).
В чем различие между программой и скриптом? Перед началом работы с Perl необходимо понять разницу между программой и скриптом. Оба из них используют набор инструкций для выполнения определенного задания, но программа скомпилирована в эффективный двоичный формат, что позволяет ей быстро выполняться на определенной платформе, в то время как скрипт хранится в оригинальном текстовом формате.
Альтернативы Perl: Существует несколько альтернатив использованию С, Visual Basic - более традиционные компьютерные языки для обработки вводимых данных. Должны компилироваться под определенную платформу. Active. X - включение программных компонент, выполняющихся в браузере. Java. Script, VBScript - обеспечивают некоторую интерактивность HTML страниц, которую HTML обеспечить не может. Cold Fusion - сторонняя программа для связи форм с базами данных. PHP/FI - еще одна сторонняя программа для связи форм с базами данных.
Где взять Perl Существует много различных мест, где можно получить информацию о последних версиях Perl. Общая информация о Perl http: //www. perl. com/perl/index. html Perl для UNIX http: //www. perl. com/perl/info/software. html Perl для Win 32 - http: //ntperl. hip. com
Этапы создания скрипта После того, как вы установили на своем компьютере необходимое ПО, нужно совершить несколько шагов для запуска Perl на вашем узле: Создать форму для вызова скрипта. Создать сам скрипт. Отладить скрипт. Проверить отсутствие ошибок (если это возможно, лучше проверить все возможные пути выполнения программы). Поместить скрипт на сервер и не забыть дать ему права на выполнение. Связать скрипт с формой, вставив его имя в параметр action тэга form. Например:
Основные части Perl скрипта Настойка. Первая часть скрипта обязательно запускает интерпретатор и устанавливает переменный, используемые в теле скрипта. Для запуска интерпретатора необходимо знать правильный путь к программе. Чтение входных данных. Эта часть "считывает" и сохраняет в переменных входные данные в удобной для обработки форме. Эта часть обычно неизменна во всех скриптах. Обработка входных данных. Эта часть соответствующим образом обрабатывает введенные данные. Она может быть простой (около 5 строк) или очень сложной (более 1000 строк) в зависимости от выполняемой задачи. Вывод результатов. Пользователь обычно ожидает какоголибо ответа на свои действия. Эта часть достаточно проста в реализации.
Пример скрипта с формой Шаг 1 - Создание формы
Шаг 2 - Создание скрипта Наберите в редакторе текст программы и сохраните в файле testform. pl в каталоге cgi-bin вашего web-сервера. Убедитесь, что первая строка программы содержит правильный путь к программе-интерпретатору #!/usr/local/bin/perl # <-- ПРОВЕРЬТЕ ЭТО # Read and parse input from the web form read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-f. A-F 0 -9])/pack("C", hex($1))/eg; $value =~ s///g; $input{$name} = $value; }
# Save the user output in a file $targetfile = "/usr/local/www/htdocs/names. html"; # <-- ПРОВЕРЬТЕ ЭТО open (NAMEFILE, ">>$targetfile"); print NAMEFILE "
n"; close (NAMEFILE); # Send a message back to the user print "Content-Type: text/htmlnn"; print "
Шаг 3 - Тестирование скрипта Вот некоторые примеры того, как это делается: . /testform. pl /usr/local/bin/perl testform. pl c: perl. exe testform. pl Если в скрипте содержатся ошибки, то вы увидите сообщение типа syntax error at testform. pl line 18, near "open" Execution of testform. pl aborted due to compilation errors. В этом случае проверьте текст около указанной строки. Помните, что причина ошибки может быть выше на несколько, иногда достаточно много строк. Исправленный скрипт сохраните, и тестируйте так до тех пор, пока он не выдаст корректных выходных данных: Content-Type: text/html
Шаг 4 - Тестирование скрипта с формой Если скрипт работает сам по себе, вы можете оттестировать его с формой: Убедитесь, что web-сервер запущен. Запустите ваш браузер. Наберите URL по которому находится ваша форма (обратите внимание, что строка должна начинаться с http: //, а не с file: //. Введите ваше имя в поле формы и нажмите кнопку "Зарегистрировать". Вы должны увидеть сообщение вроде этого: Спасибо, что заполнили форму Нажмите сюда, чтобы увидеть Ваш ввод.
Комментарии могут располагаться в любом месте программы и начинаются с символа #: # Это комментарий или open (NAMEFILE, ">$testfile"); #Открываем файл для записи. . . Также хорошей манерой является определение в начале скрипта всех констант и глобальных переменных. (Советую все пути прописывать в виде переменных, особенно если программа содержит более 50 строк, для удобства изменения местоположения файлов). Например: $homepage = "http: //server_name/home/index. html"; Все обычные переменные в Perl начинаются с символа $.
Обсуждение: Чтение данных из формы Имя поля в Имя, определенное форме name="xxx" в тэге поля параметром Данные пользователя Имя: user_name Andy Novikov Компания: co_name Tele. Sputnik Телефон: phone (812) 123 -45 -67
user_name=Andy+Novikov&co_name=Tele. Sputnik&phone=(812)+123 -45 -67 Perl скрипт должен разобрать эту строку по частям и сохранить в переменных для дальнейшей обработки. Строки, производящие эти действия достаточно стандартны: read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); Эта строка читает данные со стандартного входа и помещает их в переменную $buffer. Длина строки передается скрипту через переменную окружения CONTENT_LENGTH. Как только данные помещены в переменную $buffer вы можете разбить их на отдельные переменные с соответствующими им значениями: @pairs = split(/&/, $buffer); Теперь мы получили массив @pairs со следующими строковыми переменными: [1] user_name=Andy+Novikov [2] co_name=Tele. Sputnik [3] phone=(812)+123 -45 -67 Теперь нам необходимо разбить эти строки на пары параметр-значение: foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; # заменяем плюсы на пробелы $value =~ s/%([a-f. A-F 0 -9])/pack("C", hex($1))/eg; $value =~ s///g; $input{$name} = $value; }
Обсуждение: Запись в файлы open (HANDLE, "name"); # Открыть файл для чтения open (HANDLE, ">name"); # Открыть файл для записи open (HANDLE, ">>name"); # Открыть файл для добавления в конец HANDLE является любым временным именем, который вы будете использовать как идентификатор файла при проведении операций. Как только файл открыт, вы можете писать в него, используя функцию print: print HANDLE "Этот текст будет помещен в файл как есть. n"; print HANDLE "В этом случае переменная ", $variable, " будет помещена в текст. "; print HANDLE "Переменную $variable можно помещать в текст и так. n"; print HANDLE "Кавычки и др. Спецсимволы ; надо "подсекать". n"; После завершения операций с файлом необходимо его закрыть: close (HANDLE); После этого все записанные данные будут сохранены на диск.
Пример: Создание новой HTML страницы # Определяем переменную, содержащую путь к записываемому файлу $newfile = "c: webserverhtdocsmynewpage. html"; # Открываем файл, используя идентефикатор USERINFO open (USERINFO, ">$newfile"); # Формируем содержимое print USERINFO "n
n
n"; print USERINFO "Имя: ", $input{'user_name'}, "n "; print USERINFO "Компания: ", $input{'co_name'}, "n "; print USERINFO "Телефон: ", $input{'phone'}, "n
nn"; print USERINFO " # Определяем" src="https://present5.com/presentation/3/238084906_417633019.pdf-img/238084906_417633019.pdf-19.jpg" alt="Пример: Добавление в середину существующего файла # Определяем" /> Пример: Добавление в середину существующего файла # Определяем переменную, содержащую путь к исходному файлу $origfile = "/pathname/originalfile. htm"; # Определяем переменную, содержащую путь к временному файлу $newfile = "/pathname/newfile. htm"; open(INFILE, "<$origfile"); open(OUTFILE, ">$newfile"); while ($line =
# Добавляем новые данные в файл: print OUTFILE "nn"; print OUTFILE "Имя: ", $input{'user_name'}, "n "; print OUTFILE "Компания: ", $input{'co_name'}, "n "; print OUTFILE "Телефон: ", $input{'phone'}, "n
n"; } } # Закрываем файлы close(INFILE); close(OUTFILE); # Удаляем исходный файл и переименовываем новый в исходный unlink($origfile); rename($newfile, $origfile);
n
n"; print "n";




