Анимация
JavaScript
|
Главная Библионтека Таким образом, интерпретация значений как истинных или ложных достаточно интуитивна, но пусть это вас не пугает. Вот пример полного оператора 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 |