1 / 80

PERL.3

PERL.3. Основы языка. Операции ввода-вывода. Операция ввода команды ( `dir` ) Переменная $/ - определяет разделитель элементов списка $/ = “<KATALOG>”; @list=`dir`; Print $list[1], list[2];. Выполнение команды с перенаправлением вывода. $/ = “<KATALOG>”; $list=`dir>flist.dat`;

marinel
Download Presentation

PERL.3

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. PERL.3 Основы языка

  2. Операции ввода-вывода • Операция ввода команды (`dir`) • Переменная $/ - определяет разделитель элементов списка • $/ = “<KATALOG>”; • @list=`dir`; • Print $list[1], list[2];

  3. Выполнение команды с перенаправлением вывода • $/ = “<KATALOG>”; • $list=`dir>flist.dat`; • Print $list;

  4. Операция <> • <STDIN> • <STDOUT> • Perl program.pl par1 par2 par3… • @ARGV

  5. Операция <> (2) while ($line=<>){ print $line; } При передаче программе имени файла, например, его же Perl ex1.pl ex1.pl То программа распечатает содержимое файла

  6. @ARGV • @ARGV=(“file1.dat”, “file2.dat”, “file3.dat”); • For (;<>;){ • … • } • - последовательная обработка строк файлов

  7. Упражнение • Напишите программу, которая копирует один файл в другой.

  8. Функции работы с файлами • Дескриптор файла • Символьная таблица имен PERL

  9. Дескриптор файла • Дескриптор файла в Perl-программе — это имя соединения для ввода-вывода между Perl-процессом и внешним миром. • Имена дескрипторов файлов похожи на имена помеченных блоков, но они берутся из другого пространства имен (поэтому у вас может быть скаляр $fred, массив $fred, хеш %fred, метка fred и дескриптор файла fred). • Как и метки блоков, дескрипторы файлов используются без специального префиксного символа, поэтому их можно спутать с существующими или возможными в будущем зарезервированными словами (для команд, подпрограмм и др.).

  10. Открытие и закрытие дескриптора файла • open (FileVar, FileName); • close (FileVar); • Функция Open открывает указанный файл и ассоциирует с ним файловую переменную (дескриптор файла). В зависимости от спецсимвола, стоящего перед именем файла, файл можно открыть с разным способом доступа к нему.

  11. Открытие и закрытие дескриптора файла (2) • open (FV,"FN"); Файл открыт для чтения. Запись в него запрещена. • open (FV,">FN"); Файл открыт для записи. Когда файл открыт таким способом, его содержимое автоматически стирается (а если файл не существует - создается) и в файл можно добавлять данные. • open (FV,">>FN"); Файл открыт для записи в конец. При таком способе открытия файла, тело файла не изменяется и разрешено добавлять строки в его конец. • open (FV,"+<FN"); Файл открыт для чтения и записи. • open (FV,"|FN"); Направить информацию на вход программы. • open (FV,"FN|"); Считать информацию с выхода программы. • open (FV,"|FN|"); И то и другое.

  12. Открытие и закрытие дескриптора файла (3) • Из файла можно считать данные в виде массива и построчно. При считывании файла построчно, какой-то переменной, при первом считывании, присваивается первая строка файла и указатель перемещается на следующую строку. Такое присваивание возвращает True. При втором считывании присваивается вторая строка, при третьем - третья и т.д. до конца файла. Когда указатель дойдет до последней строки, счетчик сбрасывается, указатель перемещается на первую строчку файла, а возвращаемое выражение становится равным False

  13. Открытие и закрытие дескриптора файла (4) • Чтобы считать файл/строку в какую-то переменную, этой переменной присваивают дескриптор файла, заключенный в треугольные скобки: • @array = <FileVar>; • $Var = <FileVar>; • Чтобы закрыть файл, используют функцию Close. Хотя её использование не обязательно, т.к. файл закроется сам после окончания выполнения скрипта, но желательно и является признаком хорошего стиля программирования.

  14. Запись в тело файла • Оператору необходимо указать, в какой именно файл (может быть несколько одновременно открытых файлов) следует выводить информацию, затем помещают выражение, предназначенное для вывода: • open (file,">>file.txt"); • print file «ыывпывапв"; • close file;

  15. Путь к файлу • D:/USR/LOCAL/APACHE • |----> CGI-BIN • | |----> MYDIR • | | |----> file0.txt • | | • | |----> script.pl • | |----> file1.txt • | • |----> HTDOCS • |----> file2.txt • D:/USR/LOCAL/APACHE/CGI-BIN/MYDIR/file0.txt • D:/USR/LOCAL/APACHE/CGI-BIN/file1.txt • D:/USR/LOCAL/APACHE/CGI-BIN/script.pl • D:/USR/LOCAL/APACHE/HTDOCS/file3.txt • MYDIR/file0.txt • file1.txt • ../HTDOCS/file2.txt

  16. Блокировка файла • flock(FileVar, operation); • эта функция работает ТОЛЬКО под Unix-подобными операционными системами (Unix, Linux, FreeBSD, SunOS и др.) и Windows NT, W2k, XP

  17. Блокировка файла (2) • open(file, "file.txt"); • flock(file, LOCK_SH); • while($string=<file>){ • print $string; • } • close(file);

  18. Оператор "-X" • Проверка файла, где 'X' - одно из ниже описанных значений. Это унарный оператор с одним аргументом - либо именем файла, либо указателем файла. Проверяет одно из условий. Если аргумент не указан, то берется значение переменной $_. • Это унарный оператор с соответствующим приоритетом. Аргумент можно заключать в круглые скобки.

  19. Оператор "-X"(2) • 'X' имеет следующие значения: • -r Файл разрешен на чтение эффективным uid/gid • -w на запись -//- • -x исполнение -//- • -o принадлежит эффективному uid (идентификатор пользователя) • -R Файл разрешен на чтение реальным uid/gid • -W на запись -//- • -X исполнение -//- • -O принадлежит реальному uid • -e файл существует • -z пустой • -s не пустой

  20. Оператор "-X"(3) • -f обычный текст • -d директория • -l символическая ссылка • -p pipes (конвейер) • -S socket (гнездо) • -b специальное блочное устройство • -c -//- символьное -//- • -t указатель на уст-во tty • -T текстовой файл • -B двоичный • -M "возраст" файла в днях на момент старта скрипта • -A дней с последнего чтения

  21. Оператор "-X"(4) • Если проверяется условие, то возвращает True при истинном утверждении и False при ложном. Код ниже проверяет наличие файла "file.txt" в текущей директории и при его наличие выводит кол-во дней с момента последнего обращения к нему: • if (-e("file.txt")){print (-A("file.txt"))} else {print "Файл не создан"}

  22. Функция Read • read (FileVar, скаляр, длина, смещение); • read (FileVar, скаляр, длина); • Прочитать указанное число байт из файла в скалярную переменную. • Возвращает количество прочитанных байт или неопределенность при ошибке. Длина скаляра станет равной количеству считанных байт. Смещение указывают, если данные нужно поместить не с самого начала строки. Положение указателя сохраняется.

  23. Функция Read (2) • Код ниже читает и выводит 15 байт из файла "file.txt": • open (file,"file.txt"); • read("file",$u,5); • print $u,"<BR>"; • read("file",$u,10); • print $u; • close file;

  24. Функция Getc • getc (FileVar); • Читает и возвращает символ из указанного файла. Если файл не указан, то читается STDIN. После конца файла возвращает пустую строку. • Код ниже читает и выводит 15 байт из файла "file.txt": • open (file,"file.txt"); • while ($u<=15){ • print getc(file); • } continue{$u++} • close file;

  25. Функция Rename • rename (старое_имя, новое_имя_файла); • Переименовать файл. Возвращает 1 в случае успеха, иначе - 0.

  26. Функция Unlink • unlink (список) • Удаляет файлы, указанные в списке. Возвращает количество удаленных файлов.

  27. Программа, которая создает, переименовывает и удаляет файл delete.me: • print "Content-type: text/html\n\n"; • unless (-e("delete.me") or -e("undelete")){ • open (file,">delete.me") or print "Невозможно создать файл<br>"; • close file; • rename ("delete.me","undelete") and print "Удачно переименован<br>"; • unlink ("undelete") and print "Удачно удален"; • } else { • print" Невозможно произвести операцию!" • }

  28. Функция Utime и Truncate • Функция Utime • utime (Date1,Date2,список_файлов); • Изменяет дату обращения и модификации файлов из списка. Первые два элемента списка должны указывать новое значение даты обращения и модификации. Возвращает количество измененных файлов. • Функция Truncate • truncate (файл, длина); • Усекает длину указанного файла.

  29. Функция Truncate • print "Content-type: text/html\n\n"; • $string = "This is a sample file"; • print "Write to file: $string<br>"; • open (file,">file.txt"); • print file $string; • close file; • truncate ("file.txt",15); • open (file,"file.txt"); • $string=<file>; • close file; • print "Read from file: ",$string;

  30. Функция Tell • tell (файл); • Возвращает текущую позицию указателя в открытом файле. Если файл не указан, то последнего читаемого файла. • Следующий код читает 15 байт из файла "file.txt". Непременное условие работы этого кода - длина файла должна быть более 15 байт. • print "<pre>"; • open (file, "file.txt"); • while (tell(file) < 15){ • print getc(file); • } • print "</pre>";

  31. Функция Stat • stat (файл); • Возвращает 13 элементный массив параметров указанного файла или пустой список при ошибке. Применяется обычно следующим образом: • ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = stat($filename);

  32. Функция Stat (2) • $dev - имя устройства • $ino - номер i-узла • $mode - права доступа • $nlink - количество связей • $uid - идентификатор владельца • $gid - идентификатор группы • $rdev - тип устройства • $size - размер файла в байтах • $atime - дата последнего обращения • $mtime - дата последней модификации • $ctime - дата последнего изменения статуса • $blksize - размер блока на диске • $blocks - количество блоков в файле.

  33. Функция Stat (3) • Следующий код выводит размер файла в байтах: • $u = (stat("file.txt"))[7]; • print $u; • }

  34. Функция Seek. Функция Chmod • Функция Seek • seek (FileVar, позиция, отсчет); • Установить указатель на произвольную позицию в файле. Если отсчет равен 0 - позиционировать от начала файла, если 1 - от текущего положения, 2 - от конца файла. Возвращает 1 при успехе и 0 - неудаче. • Функция Chmod • chmod (список); • Изменить права доступа к файлам указанным в списке. Первый элемент в списке - числовое ,обычно восьмеричное значение прав. Возвращает количество файлов которым были изменены права. • Пример: • chmod 0666 'f1', 'f2', 'f3';

  35. Упражнения • Напишите программу, которая выводит все сведения об указанном файле или сообщение об ошибке, если файл не найден. Имя файла передается с помощью формы.

  36. Упражнение • Напишите программу, которая проверяет наличие файла index.htm в директории с HTML файлами и при его наличие выдает его браузеру. • Попробуйте использовать разные способы считывания файла (посимвольный и построчный) в зависимости от передаваемого скрипту параметра.

  37. Функции для работы с директориями • Функция Chdir • chdir выражение; • Перейти в директорию указанную выражением. Если выражение отсутствует то перейти в "домашнюю" директорию. Возвращает true в случае успеха и false - неудачи. • Функция Chroot • chroot директория; • Сделать "корневой" указанную директорию. "Корневая" - значит внутри программы на нее можно ссылаться как '/'.

  38. Функции для работы с директориями (2) • Функция Mkdir • mkdir директория, права; • Создать директорию с указанными правами доступа. Возвращает 1 при успехе, и 0 при неудаче. • Функция Opendir • opendir указатель, выражение; • Открыть директорию с именем выражения для обработки функциями readdir(), telldir(), seekdir(), rewinddir() и closedir(). Возвращает true при успехе.

  39. Функции для работы с директориями (3) • Функция Readdir • readdir директория; • Возвращает имя следующего файла в директории открытой командой opendir(). В скалярном контексте возвращает все оставшиеся имена файлов. Если файлов больше нет, то возвращает неопределенность в скалярном контексте и пустую строку в списковом. • Функция Rmdir • rmdir директория; • Удалить указанную директорию, если в ней нет никаких файлов. Возвращает 1 при успехе и 0 - при неудаче. При этом переменная $! содержит код (errno).

  40. Функции для работы с директориями (4) • Функция Seekdir • seekdir директория, позиция; • Установить указатель файла в открытой директории для последующего чтения функцией readdir(). Текущая позиция может быть получена функцией telldir(). • Функция Telldir • telldir директория; • Возвращает текущую позицию указателя в открытой директории.

  41. Функции для работы с директориями (4) • Функция Rewindir • rewindir директория; • Устанавливает указатель файлов открытой директории в начало для последующего чтения функцией readdir().

  42. Встроенные переменные, получение данных методом GET • Когда сервер выполняет скрипт, для него создаются некоторые переменные окружения, среди которых как локальные данные (адрес скрипта на сервере, версия П/О сервера), так и данные полученные с HTTP запросом (версия браузера, IP удаленной машины и т.д.) .

  43. Встроенные переменные • $ENV{'REQUEST_METHOD'} Это одно из самых главных полей, используемых для определения метода запроса HTTP. • $ENV{'QUERY_STRING'} Это строка запроса при методе GET. • $ENV{'CONTENT_TYPE'} Тип тела запроса. • $ENV{'REMOTE_ADDR'} IP-Адрес удаленного Хоста, делающего данный запрос. • $ENV{'REMOTE_HOST'} Если запрашивающий Хост имеет доменное имя, то эта переменная содержит его, в противном случае -тот же самый IP-адресс что и REMOTE_ADDR. • $ENV{'SCRIPT_NAME'} Содержит URL адрес файла скрипта.

  44. Встроенные переменные (2) • $ENV{'SCRIPT_FILENAME'} Полный путь к скрипту на сервере. • $ENV{'SERVER_NAME'} Имя серера ,чаще всего доменное как www.microsoft.com ,но в редких случаях за неимением такового может быть IP-адресом. • $ENV{'SERVER_PORT'} TCP-Порт сервера использующийся для соединения .По умолчанию HTTP-порт 80, хотя может быть в некоторых случаях другим. • $ENV{'SERVER_SOFTWARE'} Программное обеспечение сервера. • $ENV{'AUTH_TYPE'}, $ENV{'REMOTE_USER'} Эти переменные определены в том случае, когда запрошенный ресурс требует аутентификации пользователя.

  45. Встроенные переменные (3) • $ENV{'HTTP_ACCEPT'} Давая запрос на сервер браузер обычно рассчитывает получить информацию определенного формата, и для этого он в заголовке запроса указывает поле Accept:, Отсюда скрипту поступает список тех MIME, которые браузер готов принять в качестве ответа от сервера. • $ENV{'HTTP_USER_AGENT'} Браузер обычно посылает на сервер и информацию о себе, чтоб базируясь на знании особенностей и недостатков конкретных браузеров CGI-скрипт мог выдать информацию с учетом этого. Например, разные браузеры могут поддерживать или не поддерживать какие-то HTML тэги. • $ENV{'CONTENT_LENGTH'} Длина в байтах тела запроса. • $ENV{'GATEWAY_INTERFACE'} Версия протокола CGI. • $ENV{'SERVER_PROTOCOL'} Версия HTTP протокола сервера.

  46. Получение данных методом GET if ($ENV{'QUERY_STRING'}**2 == 0){print $ENV{'QUERY_STRING'}} else{print $ENV{'QUERY_STRING'}**2} @array=($ENV{'SERVER_SOFTWARE'},$ENV{'SERVER_NAME'}); @array=(@array,$ENV{'SCRIPT_FILENAME'},$ENV{'HTTP_USER_AGENT'}); print "<table>"; foreach (@array){ print "<tr><td>$_</td></tr>\n"; } print "</table>"

  47. HTML формы, функция ParseForm • &parse_form; • sub parse_form { • if ($ENV{'REQUEST_METHOD'} eq "POST") {$mode = 0} • if ($ENV{'REQUEST_METHOD'} eq "GET") {$mode = 1} • if ($mode == 0) {read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'})} • if ($mode == 1) {$buffer = $ENV{'QUERY_STRING'}} • @pairs = split(/&/, $buffer); • foreach $pair (@pairs) { • ($name, $value) = split(/=/, $pair); • $value =~ tr/+/ /; • $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; • $FORM{$name} = $value; • } • }

  48. функция ParseForm • Независимо от метода передачи данных, GET или POST эта функция выдает данные в виде переменных вида $FORM{'значение'}. В связи с этим изменились и условия записи данных в строке URL. Теперь их следует писать в таком виде: • "http://.../script.pl?параметр1=значение1 &параметр2=значение2".

  49. ParseForm • print "Content-Type: text/html\n\n"; • &parse_form; • print "A + B = ",$FORM{'a'}+$FORM{'b'},"<br>"; • print "A - B = ",$FORM{'a'}-$FORM{'b'},"<br>"; • print "A * B = ",$FORM{'a'}*$FORM{'b'},"<br>"; • print "A<sup>B</sup> = ",$FORM{'a'}**$FORM{'b'}; • Эта программа выводит сумму, разность, произведение и результат возведения одного числа в другое. Вызывать программу следует таким образом: • "http://.../script.pl?a=значение1&b=значение2", к примеру • "http://.../script.pl?a=256&b=2"

  50. Метод POST • Суть этого метода заключается в передаче данных в теле HTTP запроса, а не в строке URL, как при методе GET. Это снимает ограничения на длину передаваемых данных. • Длина URL не должна превышать 2048 символов. Поэтому целесообразно использовать этот метод, если вы включили в форму областью потенциально большого объема текста.

More Related