Михаил Шохирев - Язык программирования Perl
- Название:Язык программирования Perl
- Автор:
- Жанр:
- Издательство:Интернет-университет информационных технологий - ИНТУИТ.ру
- Год:2006
- Город:M.
- ISBN:5-94774-604-2
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Михаил Шохирев - Язык программирования Perl краткое содержание
Курс знакомит с языком программирования Perl, с его принципами, основными возможностями и особенностями в объёме, достаточном, чтобы начать разрабатывать прикладные и системные задачи, включая программирование для сети Интернет.
Расчитанный на полугодовое изучение, курс является достаточно подробным введением в язык программирования Perl. Описывается уникальная культура Perl и особенности, отличающие его от других языков программирования и во многом обусловившие его популярность. Рассматриваются основные средства программирования на языке Perl версии 5.8. Разбираются богатые возможности языка для создания самых разных приложений, а также особый стиль программирования на Perl. Курс ориентирован на студентов, начинающих программистов или разработчиков, применяющих другие языки и желающих писать прикладные или системные программы на Perl.
Язык программирования Perl - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Циклы могут быть вложены один в другой. Когда требуется прервать вложенный цикл, перед ним ставится метка. Метка - это идентификатор, состоящий из латинских букв, знаков подчеркивания и цифр и начинающийся с буквы, после которого стоит знак двоеточия. Соблюдая хороший стиль программирования, следует записывать метки заглавными буквами. В операторе управления циклом метка указывает, выполнение какого цикла нужно прервать:
CYCLE_1: while (условие продолжения цикла 1) { CYCLE_2: while (условие продолжения цикла 2) { if (условие выхода из всех циклов) { last CYCLE_1; } CYCLE3: while (условие продолжения цикла 3) { if (условия прерывания 2-го цикла) { next CYCLE_2; } } # сюда произойдет переход по next CYCLE_2 } } # сюда произойдет переход по last CYCLE_1
Метка может ставиться перед любым предложением. При помощи блока и операторов управления циклом с меткой можно имитировать управляющую структуру, подобную оператору switch в языке C. Например, так можно записать только одно присваивание переменной $say в зависимости от условия:
SWITCH: { unless (defined $t) { # если $t не определено $t = 25; redo SWITCH; # задать значение по умолчанию } if ($t < 10) { $say = 'холодно'; last SWITCH; } if ($t < 18) { $say = 'прохладно'; last SWITCH; } if ($t < 27) { $say = 'тепло'; last SWITCH; } $say = 'жарко'; } print "Сегодня $say\n";
В Perl имеется оператор перехода goto , в котором также используются метки. С его помощью можно перейти к выполнению помеченной конструкции в текущем или в вызывающем блоке. Но его нельзя применять для перехода в конструкцию, требующую инициализации: подпрограмму или цикл for . Этот оператор имеет три разновидности.
1Переход к выполнению предложения, перед которым стоит метка:
goto МЕТКА;
2Переход к метке, имя которой получено в результате вычисления выражения:
goto выражение;
3Замена вызова указанной подпрограммы на подпрограмму, выполняющуюся в данный момент (применяется загрузчиками модулей Perl):
goto &подпрограмма;
Оператор goto заслуженно порицается теоретиками и практиками программирования, поскольку он сильно запутывает логику выполнения программы. Так что правилами хорошего стиля программирования рекомендуется использовать его только при крайней необходимости. Хотя goto и можно применить для выхода из цикла, но для этого лучше воспользоваться оператором last .
Порядок выполнения действий в простом предложении можно задавать с помощью модификаторов выражений. За любым выражением может стоять один из следующих модификаторов:
выражение if выражение выражение unless выражение выражение while выражение выражение until выражение выражение foreach список
Модификатор задает условие выполнения (в случае if или unless ) или повторения (в случае while , until или foreach ) выражения. Выражение модификатора вычисляется в первую очередь, хотя и стоит в конце конструкции. Хотя модификаторы похожи на условные и циклические управляющие конструкции, но они формируют простые предложения и поэтому не могут быть вложенными. Приведенную выше конструкцию выбора можно переписать с использованием условных модификаторов:
SWITCH: { $t = -36, redo SWITCH unless defined $t; $say = 'холодно', last SWITCH if $t < 10; $say = 'прохладно', last SWITCH if $t < 18; $say = 'тепло', last SWITCH if $t < 27; $say = 'жарко'; }
Иногда удобно задавать повторение действия с помощью циклических модификаторов, например:
++$count, --$sum while (rand < 0.1); $random = rand until $random > 0.7;
Применение модификаторов делает программу легче для понимания, поскольку акцент переносится на основное действие, стоящее в начале предложения. К тому же запись упрощается, так как не используется блок, а условное выражение в модификаторе можно не заключать в круглые скобки.
В программах на Perl можно встретить ключевое слово do с последующим блоком, что похоже на управляющую структуру. Но конструкция do выступает в качестве терма в выражении. Иначе говоря, do делает из блока выражение, значением которого будет значение последнего предложения в блоке. Например, в такой операции присваивания:
$result = do { $x=rand; $a=0; } # в $result будет присвоен 0
Чтобы подобное выражение стало простым предложением, после него нужно поставить "точку с запятой". Вот так можно записать третий вариант конструкции выбора, где выражение do будет операндом условной операции, управляющей вычислением результата:
SWITCH: { (defined $t) || do { $t = 15; redo SWITCH; }; ($t < 10) && do { $say = 'холодно'; last SWITCH; }; ($t < 18) && do { $say = 'прохладно'; last SWITCH; }; ($t < 27) && do { $say = 'тепло'; last SWITCH; }; $say = 'жарко'; }
Выражение do , как и любое другое выражение, может использоваться с модификаторами. Например, с его помощью можно организовать циклическое выполнение действий:
do { $sum += rand; } until ($sum > 25);
Но поскольку эта конструкция - выражение, а не цикл, то операторы управления циклом в ней не работают.
Иногда требуется динамически вычислить значение строкового выражения или выполнить блок предложений, изолируя возможные ошибки выполнения. Для этого используется конструкция eval, которая применяется в одной из двух форм:
eval выражение # вычислить выражение как код на Perl eval блок # выполнить блок, перехватывая возможные ошибки
В любой форме eval возвращает значение последнего вычисленного выражения. В первой форме строковое выражение рассматривается eval как исходный код на Perl, который во время работы программы динамически компилируется и выполняется. Если при его компиляции или выполнении возникает ошибка, eval возвращает неопределенное значение, но программа не заканчивается аварийно, а сообщение об ошибке помещается в специальную переменную $@. Например:
$x = 0; $y = 5; # в выражении будет деление на 0 $expression = "$y/$x"; # строка, содержащая код для выполнения $result = eval ($expression); # вычислить выражение if ($@ eq '') { # проверить специальную переменную на ошибки print "Выражение вычислено: $result"; } else { print "Ошибка вычисления: $@"; }
Во второй форме блок предложений в конструкции eval , как и в конструкции do , становится выражением. Он компилируется обычным образом и выполняется во время работы программы, но возможные ошибки его выполнения также не приводят к аварийному завершению программы. Причину ошибки можно узнать из специальной переменной $@, а значением eval будет значение последнего предложения в блоке. Вот пример обработки ошибок в выражении eval :
$result = eval { # выполнить блок $x = 0; $y = 5; $z = $y / $x; # здесь будет деление на 0 }; # завершаем предложение точкой с запятой unless ($@) { # проверить специальную переменную на ошибки print "Выражение вычислено: $result"; } else { print "Ошибка вычисления: $@"; }
В программе на Perl, помимо предложений и комментариев, применяются прагмы - указания компилятору и исполняющей системе выполнить какие-либо действия или начать работать в определенном режиме. Прагмы позволяют управлять поведением программы при компиляции и выполнении, их довольно много, и полное их описание можно найти в документации. Очень рекомендуется в начало любой программы включать прагмы, отвечающие за более тщательную проверку правил и ограничений:
Читать дальшеИнтервал:
Закладка: