Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 [ 28 ] 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103

Таким образом, интерпретация значений как истинных или ложных достаточно интуитивна, но пусть это вас не пугает. Вот пример полного оператора i f;

print "how old are you? "; $a = <STDIN>; chomp ($a) ; if ($a < 18) {

print "So, youre not old enough to vote, eh?\n"; } else {

print "Old enough I Cool So go vote \n"; $voter++; # count the voters for later

Блок else можно опустить, оставив только часть, касающуюся then:

print "how old are you? "; $a = <STDIN>; chomp ($a) ; if ($a < 18) (

print "So, youre not old enough to vote, eh?\n";

Иногда бывает удобно часть "then" опустить и оставить только else, потому что более естественно сказать "сделайте то, если это ложь", нежели "сделайте то, если это - не истина". В Perl этот вопрос решается с помощью оператора unless:

print "how old are you? "; $a = <STDIN>; chomp ($a) ; unless ($a < 18) {

print "Old enough Cool So go vote\n";

$voter++;

Заменить if на unless - это все равно что сказать "Если управляющее выражение ложно, сделать..." (Оператор unless может содержать блок else, как и оператор if.)

Если у вас больше двух возможных вариантов, введите в оператор if ветвь elsif, например:

if (выражение один) {

оператор 1 при истине один ;

оператор 2 при истиие один/

оператор 3 при истинв один ; } elsif (выражение два) {

оператор 1 при истинедва ;

оператор 2 при истине два ;

оператор 3 при истине два ; } elsif (выражение три) {

оператор 1 при испте тр1/1;

оператор 2 при истине три;

оператор 3 приистине три /



} else {

оператор 1 прм всех ложных ; оператор 2 прм всех ложных ; оператор 3 при в сех ложных ;

Все управляющие выражения вычисляются по очереди. Если какое-либо выражение истинно, то выполняется соответствующая ветвь, а все остальные управляющие выражения и соответствующие блоки операторов пропускаются. Если все выражения ложны, то выполняется ветвь else (если таковая имеется). Присутствие блока else не обязательно, но он никогда не помещает. В программе может быть столько ветвей elsif, сколько вам необходимо.

Оператор while/until

Ни один язык программирования не был бы полным без какой-нибудь формы организации цикла* (повторяющегося выполнения блока операторов). Perl может организовать цикл с помощью оператора while:

while (выражение) { оператор 1; оператор 2 ; операторов ;

Чтобы выполнить оператор while, Perl вычисляет управляющее выражение (в данном примере - выражение). Если полученное значение - "истина" (по принятым в Perl правилам установления истинности), то один раз вычисляется тело оператора while. Это повторяется до тех пор, пока управляющее выражение не станет ложным. Тогда Perl переходит к оператору, следующему после цикла while. Например:

print "how old are you? " ; $a = <STDIN>; chomp($a) ; while ($a > 0) (

print "At one time, you were $a years old.\n";

$a--,-

Иногда легче сказать "до тех пор, пока что-то не станет истинным", чем "пока не это - истина". Для этого случая у Perl тоже есть ответ. Требуемый эффект дает замена while на until:

until (выражение) { оператор 1; оператор 2 ; оператор 3 ;

Вот почему HTML - не язык программирования.

92 Изггмем Perl



Обратите внимание на то, что в обеих формах операторы тела цикла полностью пропускаются, если при анализе управляющего выражения выясняется, что цикл должен быть заверщен. Например, если в приведенном выще фрагменте программы пользователь введет возраст меньще нуля. Per! пропустит тело цикла.

Вполне может случиться так, что управляющее выражение не даст циклу завершиться. Это абсолютно допустимо, а иногда и желательно, поэтому ошибкой не считается. Например, вы хотите, чтобы цикл повторялся все время, пока у вас нет ошибок, а после цикла ставите какой-то код обработки ошибок. Эту схему можно использовать для программы-демона, которая должна работать до тех пор, пока система не откажет.

Оператор do {} while/until

Оператор while/until, который вы видели в предыдущем разделе, проверяет условие в начале каждого цикла, до входа в него. Если результат проверки условия - "ложь", цикл не будет выполнен вообще.

Иногда возникает необходимость проверять условие не в начале, а в конце цикла. Для этого в Perl есть оператор do {} while, который очень похож на обычный оператор while*, за исключением того, что он проверяет выражение только после однократного выполнения цикла.

do (

оператор 1; оператор 2 ; оператор 3 ; 1 while выражение;

Perl выполняет операторы блока do. Дойдя до конца, он вычисляет выражение на предмет истинности. Если выражение ложно, цикл завершается. Если выражение истинно, весь блок выполняется еще раз, а затем выражение проверяется вновь.

Как и в обычном цикле while, условие проверки можно инвертировать, заменив do { } while на do {} until. Выражение все равно проверяется в конце цикла, но на обратное условие. В некоторых случаях, особенно сложных, такой способ записи условия представляется более естественным.

$stops = 0; do (

$stops++;

print "Next stop? " ; chomp($location = <STDIN>) ; } until $3tops > 5 I I $location eq home;

Ну, не совсем чтобы очень похож; управляющие директивы цикла, описанные в главе 9, в такой форме не работают.



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 [ 28 ] 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103