'

PERL.3

Понравилась презентация – покажи это...





Слайд 0

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


Слайд 1

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


Слайд 2

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


Слайд 3

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


Слайд 4

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


Слайд 5

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


Слайд 6

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


Слайд 7

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


Слайд 8

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


Слайд 9

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


Слайд 10

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


Слайд 11

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


Слайд 12

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


Слайд 13

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


Слайд 14

Путь к файлу 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


Слайд 15

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


Слайд 16

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


Слайд 17

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


Слайд 18

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


Слайд 19

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


Слайд 20

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


Слайд 21

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


Слайд 22

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


Слайд 23

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


Слайд 24

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


Слайд 25

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


Слайд 26

Программа, которая создает, переименовывает и удаляет файл 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" Невозможно произвести операцию!" }


Слайд 27

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


Слайд 28

Функция 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;


Слайд 29

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


Слайд 30

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


Слайд 31

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


Слайд 32

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


Слайд 33

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


Слайд 34

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


Слайд 35

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


Слайд 36

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


Слайд 37

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


Слайд 38

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


Слайд 39

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


Слайд 40

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


Слайд 41

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


Слайд 42

Встроенные переменные $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 адрес файла скрипта.


Слайд 43

Встроенные переменные (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'} Эти переменные определены в том случае, когда запрошенный ресурс требует аутентификации пользователя.


Слайд 44

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


Слайд 45

Получение данных методом 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>"


Слайд 46

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; } }


Слайд 47

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


Слайд 48

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"


Слайд 49

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


Слайд 50

Метод POST (2) &parse_form; print "<form method=\"get\" action=\"/cgi-bin/script.pl\"><br>\n"; print "A = <input name=\"a\" size=3 value=\"$FORM{a}\"><br>\n"; print "B = <input name=\"b\" size=3 value=\"$FORM{b}\">\n"; print "<input type=\"hidden\" name=\"match\" value=1>"; print "<input type=\"submit\" value=\"Calc\"></form>\n"; if ($FORM{'match'} == 1){ 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'};}


Слайд 51

Коротко о SSI "Server Side Includes" (включения на стороне сервера), в просторечии SSI. SSI Позволяет без лишних хлопот динамически создавать HTML файлы методом вставок. Большинство серверов поддерживают SSI. Чтобы внутри HTML файла разместить содержание другого файл, нужно в том месте, куда предполагается вставка, поместить HTML тэг: <!--#include virtual="file.ssi" --> Хотя с помощью директивы "include virtual" можно вставлять не только статичные документы (html, txt, read.me), но и динамические (perl-скрипты, к примеру), для последних придумана специальная директива - "exec cgi". Использование SSI позволяет оставлять всю статичную информацию в HTML странице, а динамические только включать в неё. Таким образом в браузер мы будем загружать уже не результат выполнения CGI скрипта, а HTML страницу со включеным результатом.


Слайд 52

SSI простейший счетчик посещений с использованием технологии SSI #!/usr/local/bin/perl # programm 16 print "Content-Type: text/html \n\n"; $file="counter.txt"; open(FILE,"$file"); $line=<FILE>; close(FILE); open(FILE,">$file"); $line++; print FILE "$line"; close FILE; print "$line"


Слайд 53

SSI (2) Сохраните этот скрипт в файл под именем "counter.pl". В директории с HTML файлами создайте файл "usualy.htm", в котором содержались бы такие строчки: <html><head> <title></title> </head> <body> <p>Общее количество посещений: <!--#exec cgi="/cgi-bin/counter.pl" --> </p> </body> </html> Теперь попробуйте загрузить и несколько раз обновить страницу. Вы должны увидеть, что значение каждый раз увеличивается на единицу.


Слайд 54

Упражнение Предусмотрите защиту файла counter.txt от ошибок ввода-вывода. Введите переменную, от значений которой будет зависеть, использовать или нет функцию flock.


Слайд 55

Подпрограммы Для применения подпрограммы ее необходимо определить либо в текущем модуле (файле), либо во внешнем модуле (файле). Подпрограммы определяются и декларируются следующим образом: sub имя; - Только декларация. Определение ниже. sub имя (прототипы); - То же но с декларацией параметров. sub имя блок; - Декларация и определение. sub имя (прототипы) блок; - То же, но с параметрами.


Слайд 56

Подпрограммы (2) Все параметры передаются подпрограмме как массив @_. Соответственно $_[0] - первый параметр, $_[1] - второй и т.д. Массив @_ - локальный, но он содержит адреса параметров, поэтому можно изменять значение параметров. Возвращаемое значение подпрограммы - результат последнего оператора. Это может быть как скаляр так и массив. Можно принудительно возвращать результат используя функцию return(). Подпрограмму можно вызвать, используя префикс '&' перед именем подпрограммы. Если подпрограмма предварительно продекларирована, то префикс и скобки можно опустить. Для применения переменных доступных только внутри блока или подпрограммы необходимо определить их с помощью функции my(список). Если переменная одна, то скобки можно опустить.


Слайд 57

Подпрограммы (3) Процедуры и функции представляют собой важный инструмент Perl-а, позволяющий писать хорошо структурированные программы. В структурированных программах обычно легко прослеживается основной алгоритм, их нетрудно понять любому читателю, они проще в отладке и менее чувствительны к ошибкам программирования. Все эти свойства являются важной особенностью процедур (функций), каждая из которых представляет собой во многом самостоятельный фрагмент кода, связанный с основной программой лишь несколькими параметрами. Самостоятельность процедур дает возможность без особых изменений в основной программе изменять код процедуры. Процедурой в Perl называют особым образом оформленный участок кода со своим собственным именем. Упоминание этого имени в программе приводит к активации процедуры. Сразу после активации процедуры начинают выполняться входящие в неё операторы. После выполнения последнего оператора, основная программа продолжает свое выполнение дальше. Для обмена информацией между основной программой и процедурой используются параметры вызова. Для передачи информации от процедуры программе, внутри процедуры используется оператор return.


Слайд 58

Прототипы Для краткого описания типа передаваемых подпрограмме параметров можно применять прототипы. Если формат передаваемых данных не будет удовлетворять шаблону прототипа, это вызовет ошибку программы. В Perl существуют следующие прототипы: Декларация Пример вызова sub mylink($$) mylink $old, $new sub myvec($$$) myvec $var, $offset, 1 sub myindex($$;$) myindex &getstring, "substr" sub myreverse(@) myreverse $a, $b, $c sub myjoin($@) myjoin ":",$a,$b,$c sub mypop(\@) mypop @array sub mysplice(\@$$@) mysplice @array, @array, 0, @pushme sub mykeys(\%) mykeys %{$hashref} sub myopen(*;$) myopen HANDLE, $name sub mypipe(**) mypipe READHANDLE, WRITEHANDLE sub mygrep(&@) mygrep { /foo/ } $a, $b, $c sub myrand($) myrand 42 sub mytime() mytime


Слайд 59

Прототипы (2) \'символ' - параметр с типом 'символ' '@' или '%' - все оставшиеся параметры как список '$' - скаляр '&' - безымянная подпрограмма '*' - ссылка на таблицу имен ';' - разграничитель обязательных и не обязательных параметров. Вставить часть CGI кода в программу, подобно SSI, можно с помощью функции "require". Её синтаксис : require "файл";


Слайд 60

Прототипы (3) # Файл sub.pl sub summ($$){ return ($_[0]+$_[1]) } # Файл со скриптом require "sub.pl"; print summ(5,2);


Слайд 61

Прототипы (4) Напишем функцию, которая возвращает факториал переданного ей числа. sub fact{# объявляем функцию fact my($sum,$i);# объявляем локальные переменные $sum=1; for ($i=1;$i<=$_[0];$i++){ $sum*=$i; } return $sum# возвращаем значение переменной $sum } Примеры вызова такой функции: print fact(4); print fact(4,22.8,5); Результатом выполнения этого кода будет 24


Слайд 62

Прототипы (5) Чтобы избежать вызова функции с ошибочными значениями, используем прототип $, означающий, что функции мы передаем только один парамер: sub fact($){ my($sum,$i); $sum=1; for ($i=1;$i<=$_[0];$i++){ $sum*=$i; } return $sum }


Слайд 63

Работа с числами Функция ABS Возвращает абсолютное значение выражения Функция COS Возвращает косинус выражения в радианах Функция EXP Возвращает e (основание натурального логарифма) в степени выражения Функция HEX Воспринимает выражение как строку шестнадцатеричных цифр и возвращает десятичное значение


Слайд 64

Работа с числами (2) Функция INT Возвращает целую часть выражения Функция LOG Возвращает натуральный логарифм выражения Функция OCT Возвращает десятичное число, представленное восьмеричными цифрами Функция SCALAR Вычисляет выражение в скалярном контексте и возвращает результат. В Perl нет специальной функции для принудительного вычисления в списковом контексте, т.к. для этого достаточно заключить его в круглые скобки


Слайд 65

Работа с числами (3) Функция SIN Возвращает в радианах синус выражения Функция SQRT Возвращает корень квадратный выражения Функция Rand Возвращает псевдослучайное число в диапазоне от 0 до значения, указанного в аргументе. Если аргумент отсутствует, то от 0 до 1. Функция Srand Задает начальное значение для генератора случайных чисел. Если аргумент отсутствует, то используется текущее машинное время.


Слайд 66

Функции для работы со строками Функция Chomp chomp переменная; chomp список; chomp; Удаляет в конце строки символ указанный переменной $/. Обычно это '\n'. Возвращает количество удаленных символов. Если переменная не указана то используется переменная $_. Если указан список то обрабатывается каждая строка списка и возвращается общее количество удаленных символов. Функция Chop chop переменная; chop список; chop; Полностью аналогично функции chomp но всегда удаляет последний символ строки.


Слайд 67

Функции для работы со строками (2) Функция Chr Возвращает символ с заданным ASCII кодом. Функция Lc Преобразовать строку в буквы нижнего регистра. Функция Lcfirst Заменить первую букву строки на малую. Функция Length Возвращает длину строки выражения. Функция Ord Возвращает ascii код первого символа выражения.


Слайд 68

Функции для работы со строками (3) Функция Uc Возвращает строку выражения, в которой малые буквы заменены на заглавные. Функция Ucfirst Возвращает строку выражения, в которой первая буква заменена на заглавную. Функция Substr substr (выражение, смещение, длина); substr (выражение, смещение); Возвращает подстроку выражения, начиная со смещения и заданной длины. Если смещение отрицательное, то отсчет ведется от конца строки. Если длина не указана, то берется все до конца строки. Функция Pack pack (шаблон, список); Упаковывает список в двоичную структуру по шаблону.


Слайд 69

Шаблон Шаблон - это строка символов, описывающая порядок и тип упакованных значений. A - текстовая строка, добавляется пробелами. a - текстовая строка, добавляется 0 символом. b - битовая строка (возрастающая нумерация бит) B - битовая строка (убывающая нумерация бит) h - шестнадцатеричная строка ( младший байт - первый) H - шестнадцатеричная строка (старший байт первый) c - символ со знаком C - символ без знака. s - короткое целое (один байт) со знаком. S - короткое целое без знака.


Слайд 70

Шаблон i - целое (два байта) со знаком. I - целое без знака. l - длинное целое (4 байта) со знаком. L - длинное целое без знака. n - короткое в "сетевом" формате. N - длинное в "сетевом" формате. v - короткое в "VAX" формате. V - длинное в "VAX" формате. f - single float. F - double float. p - указатель на строку ограниченную 0. P - указатель на структуру с фиксированной длиной. u - упаковка uuencode. x - нуль-байт X - резервный байт. @ - заполнить нулями позицию.


Слайд 71

Шаблон (3) За каждой буквой может стоять число означающее количество повторов. Для всех типов за исключением 'a', 'A', 'b', 'B', 'h' и 'H', упаковывается максимально возможное количество значений из списка. Символ '*' после типа означает использовать оставшиеся параметры. Тип 'a' и 'A' использует только одно значение из списка и добавляет остаток поля либо нуль-символами, либо пробелами (при распаковке по типу 'A' пробелы и нули отбрасываются, а по 'a' - нет). Типы 'b' и 'B' упаковывают строку в указанное число бит. Так же как и 'h' и 'H' в число ниблов (байт). 'P' - упаковывает указатель на структуру с указанной длиной. Числа с плавающей запятой (floats и double) записываются в стандартном для каждой машины формате и могут быть разными для разных типов машин. Заметьте, что Perl всегда использует двойную точность (double), поэтому упаковка и распаковка по типу 'f' приведет к потере точности. Шаблоны для распаковки и упаковки совершенно одинаковы. print(pack("ccc",65,66,67)); # Результат ABC print(pack("A4A3","ab","cdefg")); # "ab cde" print(pack("a4a3","ab","cdefg")); # "ab\0\0cde"


Слайд 72

Шаблон (4) Функция Unpack unpack (шаблон, выражение); Функция, обратная pack(). Распаковывает строку выражения по указанному шаблону в массив значений. В скалярном контексте возвращает значение только первого элемента. Шаблоны такие же как и в pack(). Символ '%' в шаблоне означает, что вы хотите получить вместо значения его контрольную сумму. По умолчанию - 16-битную.


Слайд 73

Шаблон (5) Оператор q// q/строка/; 'строка'; Не интерполируемая строка литералов. Если в качестве разделителя используется одинарная кавычка, ключевое слово "q" можно опускать. print q^Windows 3.11^;# результат: Windows 3.11 print q?Windows 98?;# результат: Windows 98 print 'Windows 2000';# результат: Windows 2000


Слайд 74

Шаблон (6) Оператор qq// qq/строка/; "строка"; Интерполируемая строка. Если в качестве разделителя используется двойная кавычка, ключевое слово "qq" можно опускать. $var311 = "3.11";# определяем переменные $var98 = "98"; print qq#Windows $var311#;# результат: Windows 3.11 print qq+Windows $var98+;# релультат: Windows 98 print "Windows 2000"; # результат: Windows 2000


Слайд 75

Шаблон (7) Оператор qx// qx/строка/; `строка`; Сначала строка интерполируется, а потом выполняется как системная команда. print "<pre>"; print `dir`; print "</pre>";


Слайд 76

Шаблон (8) Оператор qw// qw/строка/; Возвращает список, элементы которого содержат слова из строки. Т.е. пробелы рассматриваются как символы-разделители. Следующий код подчеркнет все слова фразы, длиной 7 букв: @array = qw(Пока толстый сохнет, худой - сдохнет); foreach $i(@array){ if (length($i) == 7){print "<u>$i</u> "} else {print "$i "} }


Слайд 77

Шаблон (9) Оператор Split split (/шаблон/, выражение, предел); split (/шаблон/, выражение); split (/шаблон/); split; Разделяет строку, указанную выражением, на массив элементов и возвращает его. В скалярном контексте возвращает количество полученных элементов массива, а сам массив помещает в @_ (в списковом контексте поместить результат в @_ можно если применить ?шаблон?) Если выражение отсутствует, то обрабатывается содержимое переменной $_. Если шаблон отсутствует, то разделителем является пробел. Все, что подходит по шаблону, считается разделителем. Если указан предел, то это максимальное число разделений. Отрицательное значение предела воспринимается как неограниченно большой предел. Если пустая строка походит под шаблон разделителя, то исходное значение разделяется посимвольно. Предел удобно использовать для частичного разделения строки. ($a, $b, $остаток) = split(/ /, "Один Два Три Четыре",3); # $a = 'Один', $b = 'Два' и $остаток = 'Три Четыре'


Слайд 78

Шаблон (10) Если шаблон содержит круглые скобки, то символы-разделители, указанные в них, вставляются в результирующий список как обычные элементы, причем вставляется символ, который совпал с разделителем @a = split(/([,.])/, "Один,Два.Три"); # @a = ("Один", "," ,"Два", ".", "Три") И еще один примерчик: @a = split(//,"червь"); # @a = ('ч','е','р','в','ь')


Слайд 79

Забавные ссылки http://www.perl.com/CPAN/misc/japh


×

HTML:





Ссылка: