1 / 52

PERL.2

PERL.2. Основы языка. Выражения . Терм – любой литерал, любая переменная, любое выражение в круглых скобках, любая строка символов в кавычках, любая функция с параметрами в круглых скобках Функции и операции Print print “0”;. Приоритет операций. Вычисление термов и списковые операции - >

teddy
Télécharger la présentation

PERL.2

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.2 Основы языка

  2. Выражения • Терм – любой литерал, любая переменная, любое выражение в круглых скобках, любая строка символов в кавычках, любая функция с параметрами в круглых скобках • Функции и операции • Print print “0”;

  3. Приоритет операций • Вычисление термов и списковые операции • -> • ++ -- • ** • ! ~ \ унарные + и – • =~ !~ • * / x % • + - . • << >> • Именованные унарные операции • < > <= >= lt le gt ge • = = != < = > eq ne cmp • | • && • || • .. … • ? : • = **= += -= *= /= %= x= etc • , => • Not • And • Or xor

  4. Контекст • Скалярный • Числовой • Строковый • Безразличный • Булевый • Void-контекст • Списочный

  5. Упражнения • Определите результат выполнения следующих операторов • $var0=2; • $var1=1; • $rez1=$var0**3*2||4+$var1, $var1++; • $rez2=($var1++, $var0**3*2||4+$var1, “6”); • @rez3=($var1++, $var0**3*2||4+$var1, “6”);

  6. Операторы • Выражение, завершенное ; • $n++; • --$n**2;

  7. Модификаторы простых операторов • Каждый простой опреатор может быть снабжен модификатором, представляющим ключевое слово if, unless, while, until, foreach, за которыми стоит выражение-условие • Каждый простой оператор может иметь только один модификатор • $n=$l/$m if $m!=0; • Выражение ключ_слово_модификатора [{]выражение-условие [}]

  8. Модификаторы if и unless • Выражение if выражение-условие; • Эквивалентен if (выражение-условие) {выражение;} • Выражение unless выражение-условие; • Эквивалентен • if (! выражение-условие) {выражение;}

  9. Модификаторы while и until • Выражение while выражение-условие; • Выражение until выражение-условие; Аналогичны • while (выражение-условие) {выражение;} • until (выражение-условие) {выражение;}

  10. Модификатор foreach • Модификатор цикла • Выполняет простой оператор, осуществляя итерации по списку значений, заданных в заголовке • На каждой итерации выбранный элемент списка присваивается встроенной переменной $_, которую можно использовать для получения значения выбранного элемента списка

  11. Модификатор foreach (2) • Выражение foreach выражение-условие; • Соответствует foreach (выражение-условие) {выражение;} • %hash=(one=>6, two=>8, three=>10); • Print ”$_” foreach %hash

  12. Модификатор foreach изменяет значения элементов списка • @array = (1,2,3); • $_ *= 2 foreach @array; • print “@array”;

  13. Составные операторы • Блок – последовательность операторов, заключенных в фигурные скобки • Интерпретатор рассматривает блок как один оператор, вычисляемым значением которого является значение последнего выполненного оператора блока • Блок определяет область видимости переменных – локальные переменные

  14. Локальные переменные • Создаются с помощью функции my(), которая определяет локальные переменные блока • my($var)=“inner”;

  15. Операторы ветвления • If (выражение) Блок • If (выражение) Блок1 else Блок2 • If (выражение) Блок1 elseif (выражение) Блок2 ... else Блокn • Фигурные скобки обязательны даже в случае одного оператора • Во всех операторах ветвления if может быть заменено на unless

  16. Операторы цикла • МЕТКА while (ВЫРАЖЕНИЕ) БЛОК • МЕТКА while (ВЫРАЖЕНИЕ) БЛОК continue БЛОК1 • Необязательная метка – идентификатор с двоеточием • Вместо while можно использовать ключевое слово until

  17. Цикл for • МЕТКА for (ВЫРАЖЕНИЕ1; ВЫРАЖЕНИЕ2; ВЫРАЖЕНИЕ3 ) БЛОК • For позаволяет использовать несколько переменных для управления работой цикла. Для разделения используется запятая for ($j=1, $k=9; $k.o; $j++, $k--) { $hash($j)=$k; }

  18. Цикл foreach • МЕТКА foreach ПЕРЕМЕННАЯ (список) БЛОК • МЕТКА foreach ПЕРЕМЕННАЯ (список) БЛОК continue БЛОК1 • Список задается последовательностью значений, разделенных запятой, массивом скаляров или функцией, возвращающей список

  19. Команды управления циклом • Last идентификатор_метки; • подобен оператору break в языке С. Немедленно прерывает цикл. Блок continue пропускается • Next идентификатор_метки; • подобен continue в С. Переходит к началу текущего цикла (блок continue вычисляется) т.е. повторяет итерацию. • Redo идентификатор_метки; • начать новый цикл не вычисляя EXPR и не выполняя continue блок.

  20. next • M1: • while ($i < 6) • { • ++$i; # Увеличиваем счетчик на 1 • next M1 if $i < 3; # Переходим в начало если $i < 3 • ++$i; # иначе увеличиваем счетчик еще раз на 1 • } • continue • { • print "$i "; # Печатаем $i • } • # получаем 1 2 4 6

  21. last • M1: • while ($i < 6) • { • ++$i; # Увеличиваем счетчик на 1 • last M1 if $i > 3; # Выход из цикла если $i > 3 • ++$i; # иначе увеличиваем счетчик еще раз на 1 • } • continue • { • print "$i "; # Печатаем $i • } • # результат: 2 4

  22. redo • M1: • while ($i < 6) • { • ++$i; # Увеличиваем счетчик на 1 • redo M1 if $i == 3; # Далее пропустить для $i = 3 • ++$i; # иначе увеличиваем счетчик еще раз на 1 • } • continue { • print "$i "; # Печатаем $i • } • # получим 2 5 7

  23. Упражнения • Напишите программу, выводящую все простые числа из диапазона (-28..53) включительно. Есть ли вообще простые числа в этом диапазоне? • Напишите программу, вычисляющую произведение двух соседних числа ряда из диапазона (-28..53), и если это число делится без остатка на 7, выводит результат на экран и увеличивает переменную цикла на 2.

  24. Именованные блоки • Блок операторов, заключенных в фигурные скобки эквивалентен циклу, выполняющемуся только один раз. • Для выхода из него можно использовать команду last, а для повторного вычисления блока - redo

  25. Именованные блоки (2) block1: { $i=1; last block1; } continue { ++$1; } print “\$i posle block1: $i\n”; block2: { $i=1; next block2; } continue { ++$1; } print “\$i posle block2: $i\n”;

  26. Реализация переключателя $var=3; SWITCH: { $case1=1, last SWITCH if $var = = 1; $case2=2, last SWITCH if $var = = 2; $case3=3, last SWITCH if $var = = 3; $nothing =1; }

  27. Оператор безусловного перехода • Goto МЕТКА • Goto ВЫРАЖЕНИЕ • Goto ПОДПРОГРАММА • В Perl метки обозначаются ЗАГЛАВНЫМИ латинскими буквами и отделяются от следующего за ним оператора двоеточием (:).

  28. Операции ввода-вывода

  29. Функции работы с файлами • Дескриптор файла

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

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

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

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

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

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

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

  37. Блокировка файла, функция Flock • flock(FileVar, operation); • эта функция работает ТОЛЬКО под Unix-подобными операционными системами (Unix, Linux, FreeBSD, SunOS и др.) и Windows NT, W2k, XP... • В качестве параметра operation допускаются следующие значения: • "LOCK_SH" или "1" Блокировка для чтения • "LOCK_EX" или "2" Блокировка для записи • "4" "двухстороннее" блокирование • "LOCK_UN" или "8" Разблокирование

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

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

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

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

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

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

  44. Функция Read • read (FileVar, скаляр, длина, смещение); • read (FileVar, скаляр, длина); • Прочитать указанное число байт из файла в скалярную переменную. Возвращает количество прочитанных байт или неопределенность при ошибке. Длина скаляра станет равной количеству считанных байт. Смещение указывают, если данные нужно поместить не с самого начала строки. Положение указателя сохраняется. • Код ниже читает и выводит 15 байт из файла "file.txt": • open (file,"file.txt"); • read("file",$u,5); • print $u,"<BR>"; • read("file",$u,10); • print $u; • close file;

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

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

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

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

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

More Related