Анимация
JavaScript
|
Главная Библионтека Данные операторы выполняют анализ текстовых строк на основе сравнения ASCII-кодов соответствующих символов, начиная с первого. Это означает, что строки, расположенные первыми в алфавитном порядке, имеют высший приоритет. Таким образом, наибольший приоритет имеют знаки пунктуации, затем числа, прописные буквы и, наконец, строчные буквы. Например, строка 1506 больше строки Happy, а та, в свою очередь, больше строки happy. Что есть Истина в Perl До сих пор мы свободно пользовались термином истины: "если это выражение истинно...", не имея его формального определения. В Perl есть несколько коротких правил относительно того, что истинно, а что ложно. Правила эти таковы: • число 0 имеет значение Ложь; • пустая строка ("") или строка "0" имеет значение Ложь; • неопределенные значение ef имеют значение Ложь; • все остальные значения считаются истинными. Логично, не правда ли? Единственно, о чем еще следует помнить перед тем, как проверить на истинность некоторое выражение, его необходимо упростить: определить значения вызываемых функций и арифметических выражений. Затем полученное значение выражения нужно перевести в скалярный вид и только тогда решить, истинно оно или ложно. Постарайтесь осмыслить эти правила и посмотрите табл. 3.3. Попробуйте сначала сами определить, какое выражение истинно, а какое ложно. \аб\иазlзtlш!ыисlпиffлошmршишшlшшlШlшшm Выражение Ястина или Ложь? "0 Ложь. Число 0 имеет значение Ложь 10 Истина. Ненулевое число 9>8 Истина. Операторы отношения возвращают значения Истина или Ложь, как и следует ожидать -5+5 Ложь. Значение этого выражения - число 0, имеющее значение Ложь 0.00 Ложь. Это число - другое представление числа О, как и 0x0, 00, СЮ и QCD Ложь. Этот случай явно указан в правилах Истина. Так как в кавычках находится пробел, строка считается непустой "0.00" Истина. Удивлены? Это уже строка, причем не "" или "0" "00" Истина. По тем же причинам "0.00"+0 ложь. Сначала вычисляется значение выражения, которое равно 0 Пока в операторе if мы использовали только операторы отношения, хотя, в ципе, можно использовать любое выражение, которое в конечном счете будет приводиться к значению Истина или Ложь. t Анализируется значение скалярной переменной $а • и определяется его логическое значение if ($a) { ... } » й,нисляв1ся длина перзуеысй 5Ь. если ста нэтевая, * лэпжэсое зтачшж н,риения - Яс тжа . If (lengths(St))) { .... } В имеется специальное значение - indef. Оно присваивается всем неинициализированным переменным. Кроме того, некоторые функции в случае неудачного исхода их выполнения возвращают это значение. Значение undef трактуется интерпретаторов Perl как неопределенное. Оно не равно нулю или любому значению в привычном понимании этого слова. При проверке на истинность, например в операторе if, indef всегда имеет логическое значение Ложь. В арифметических выражениях вместо undef всегда подставляется 0. Использование неинициализированных переменных обычно свидетельствует об ошибке в программе. Если в программе на Perl с включенным режимом вывода предупреждений значение undef используется в выражениях или передается в виде аргумента функциям - появляется сообщение Use of uninitialized value. Логические операторы Допустим, вам требуется написать код, выполняющий что-либо, если переменные $х и $у имеют истинное значение, а $z - ложное. Такой код можно реализовать с помощью плохо читаемого набора операторов if: if [Щ { it (5у) { if ($z) { ♦ Ь*№го не прсмзадп? } else { print "Нужноеусгошедостипттэ. \п" Perl имеется целый класс операторов, предназначенных для объединения логических выражений. Это ~ так называемые логические операторы, которые описаны в табл. 3.4.
Предыдущий пример можно переписать с помощью операторов из табл. 3.4 сле дующим образом: if ($x and $iid noMz) { print "Нужное условие достигнуто. \п"; Выражения, объединенные логическими операторами, вычисляются слева направо до тех пор, пока не появится возможность заранее определить значение всего логического выражения (листинг 3.2). Листун-З.г. ГмУЕгъ1испог1ДОва*1ялотчес1<ихвьр 1: $а=0; Sc=2; $d=""; 3; if {$a and $b) { print Переменные $а и $b истинные; } 4: if {$dor $b) { print Хота бы одна из переменных $d или $Ь истинна; } 5; if {$d or not $b or $c) 6: { print Переменная $d истинна, или $Ь ложна, или $с истинна; Проведем анализ программы. Строка 1. В этой строке переменным присваиваются значения. Строка 3. Вначале определяется логическое значение переменной $а. Поскольку оно ложно, выражение с использованием оператора and никогда не может быть истинно. Поэтому логическое значение переменной не определяется - в этом нет необходимости, ведь уже известно, что выражение ложно. В результате оператор print не выполняется. Строка 4. Вначале определяется логическое значение переменной $d. Оно ложно, но все выражение с оператором or все еще может быть истинным, поэтому вычисляется логическое значение переменной $Ь, оно истинно, значит, и все выражение истинно, следовательно, оператор print выполняется. Строка 5. Вначале определяется логическое значение переменной $d. Оно ложно, но, несмотря на это все, выражение может быть истинным по той же причине, что и в строке 4, - в нем содержится логический оператор or. Зна- 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 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |