"Введение в Perl" - читать интересную книгу автора (Маслов Владимир Викторович)* Синтаксис *Перл программа (скрипт) состоит из последовательности деклараций и предложений. Единственно что должно быть обязательно декларировано это форматы отчетов и подпрограммы (функции). Все не объявленные переменные, массивы, имеют значение 0 или null. Декларации (объявления). Перл имеет свободный формат. Комментарии начинаются с символа '#' и продолжаются до конца строки. Декларации могут использоваться в любом месте программы так же как и предложения (statements) но действуют они только в фазе компиляции программы. Обычно их помещают или в начале или в конце программы. Декларация подпрограмм позволяет использовать имя подпрограммы как списковый оператор начиная с момента декларирования. sub test; # Декларация подпрограммы test $var1 = test $0; # Использование как оператора списка. Декларации подпрограмм могут быть загружены из отдельного файла предложением Простое предложение. Простое предложение обязательно заканчивается символом ';' если только это не последнее предложение в блоке где ';' можно опустить. Заметьте что существуют операторы такие как eval{} и do{} которые выглядят как сложные предложения но на самом деле это термы и требуют обязательного указания конца предложения. Любое простое предложение может содержать if EXPR unless EXPR while EXPR until EXPR где Модификаторы while и until вычисляются в начале предложения кроме блока do который выполняется первым. if Пример: $var = 1; $var2 = 3 if $var gt; 0; # Результат: $var2 = 3 while $var = 1; print $var++ while $var lt; 5; # Результат: 1234 until Пример: $var = 1; print $var++ until $var gt; 5; # Печать $var с инкрементом Результат: 12345 unless Пример: $var = 1; print $var++ unless $var gt; 5; # Печать $var с инкрементом Результат: 1 Последовательность простых предложений ограниченная функциональными ограничителями называется блоком. В Перл это может быть целый файл, последовательность предложений в операторе eval{} или чаще всего это множество простых предложений ограниченных круглыми скобками '{}'. Сужествуют следующие виды сложных предложений: if (EXPR) BLOCK if (EXPR) BLOCK else BLOCK if (EXPR) BLOCK elsif (EXPR) BLOCK ... else BLOCK LABEL while (EXPR) BLOCK LABEL while (EXPR) BLOCK continue BLOCK LABEL for (EXPR; EXPR; EXPR) BLOCK LABEL foreach VAR (LIST) BLOCK LABEL BLOCK continue BLOCK Обратите внимание, что сложные предложения описаны в термах блоков а не предложений как в языках C или Pascal. Поэтому необходимо всегда использовать круглые скобки для обозначения блока. if ( $var =1; if ($var == 1) { print $var,"\n"; } Результат: 1 if ( $var =2; if ($var == 1) { print «\$var = 1\n»; } else { print «\$var не равно 1\n»; } Результат: $var не равно 1 if ( $var = 1; if ($var == 0) { print «\$var = 0\n»; } elsif ($var == 1) { print «\$var = 1\n»; } else { print «Не известное \$var\n»; } Результат: $var = 1 Цикл while выполняет BLOCK до тех пор пока Блок после continue выполняется всегда перед тем как вычисляется логическое выражение next – подобен continue в С. Переходит к началу текущего цикла т.е. повторяет итерацию. Пример: M1: while ($i lt; 6) { ++$i; # Увеличиваем счетчик на 1 next M1 if $i lt; 3; # Переходим в начало если $i lt; 3 ++$i; # иначе увеличиваем счетчик еще раз на 1 } continue { print "$i "; # Печатаем $i } Результат: 1 2 4 6 last – подобен оператору break в языке С. Немедленно прерывает цикл. Блок continue пропускается. Пример: M1: while ($i lt; 6) { ++$i; # Увеличиваем счетчик на 1 last M1 if $i gt; 3; # Выход из цикла если $i gt; 3 ++$i; # иначе увеличиваем счетчик еще раз на 1 } continue { print "$i "; # Печатаем $i } Результат: 2 4 redo – начать новый цикл не вычисляя Пример: M1: while ($i lt; 6) { ++$i; # Увеличиваем счетчик на 1 redo M1 if $i == 3; # Далее пропустить для $i = 3 ++$i; # иначе увеличиваем счетчик еще раз на 1 } continue { print "$i "; # Печатаем $i } Результат: 2 5 7 LABEL for ( Оператор for полностью аналогичен оператору for в С. В перед началом цикла выполняется Пример: for ($i = 2; $i lt; 5; ++$i) { print $i, " "; } print «\nПосле цикла i = $i\n»; Результат: 2 3 4 После цикла i = 5 LABEL foreach Переменной Вместо слова foreach можно писать просто for – это слова синонимы. Пример: @месяц = («январь»,"февраль","март"); # Создали массив foreach $i (@месяц) { print $i," "; # Печать $i } Результат: январь февраль март Пример: @месяц = («январь»,"февраль","март"); # Создали массив foreach $i (@месяц) { $i = uc($i); # Перевели в верхний регистр } print @месяц; Результат: ЯНВАРЬФЕВРАЛЬМАРТ Пример: for $i (3,5,7) { print "$i "; } Результат: 3 5 7 Блок не зависимо от того имеет он метку или нет семантически представляет собой цикл который выполняется один раз. Поэтому действие опраторов цикла next, last, redo – аналогично описанному выше. Блоки удобны для построения switch (переключатель) структур. В Перл нет специального оператора switch подобного языку С поэтому вы сами можете создавать удобные для вас конструкции. Опыт автора показывает что для простоты написания лучше всего подходит конструкция вида if ... elsif ... else ... хотя можно сочинить и нечто подобное: SWITCH: { if ($i ==1 ) { .....; last SWITCH; } if ($i ==2 ) { .....; last SWITCH; } if ($i ==3 ) { .....; last SWITCH; } $default = 13; } Выбирайте сами по своему вкусу. В Перл существует оператор goto хотя где , как и когда его применять как говорил Ходжа Насредин «Тонкий филосовский вопрос». Для начинающих программистов которым от так «нужен» я бы вообще посоветовал «забыть» о его существовании. Однако при создании больших производственных задач на последнем этапе особенно при отработке «отвальных» ошибочных ситуаций конечно goto нужен. В Перл реализовано три формы goto. goto – метка, goto – выражение и goto – подпрограмма. goto – метка выполняет непосредственный переход на указанную метку. goto – выражение – Вычисляет имя метки и делает соответсвующий переход. Например если мы хотим сделать переход на одну из трех меток " goto («M1», «M2», «M3»)[ здесь goto подпрограмма – довольно редкий случай т.к. всегда проще и надежней вызвать подпрограмму «естественным» образом. В Перл реализован очень удобный механизм для написания документации в момент создания программы. Для этого применяются специальные POD операторы. Если в теле программы интерпретатор встречает оператор начинающийся с символа '=' например: то пропускается все до слова ' с помощью специальной программы pod можно отделить текст документации от текста программы. |
|
|