Операции отношения в Perl

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

Таблица 2. Операции отношения

Операция Числовая Строковая Значение
Равенство == eq Истина, если операнды равны, иначе ложь
Неравенство != ne Истина, если операнды не равны, иначе ложь
Меньше < lt Истина, если левый операнд меньше правого, иначе ложь
Больше > gt Истина, если левый операнд больше правого, иначе ложь
Меньше или равно <= le Истина, если левый операнд больше правого или равен ему, иначе ложь
Больше или равно >= ge Истина, если правый операнд больше левого или равен ему, иначе ложь
Сравнение <=> cmp 0, если операнды равны
1, если левый операнд больше правого
-1, если правый операнд больше левого

Результатом операций отношения (кроме последней сравнения) является Истина, значение 1, или Ложь, пустая строка "".

Замечание
Значение истина в арифметических операциях интерпретируется как число 1, а в строковых как строка "1". Значение ложь в арифметических операциях интерпретируется как число 0, а в строковых как пустая строка "".

Числовые операции отношения

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


  123 > 89;		# Результат: 1 (истина) 
  123 < 89;		# Результат: "" (ложь)
  123 <= 89;		# Результат: "" (ложь)
  89 <= 89;		# Результат: 1 (истина)
  23 >= 89;		# Результат: "" (ложь)
  23 <=> 89;		# Результат: -1 (правый операнд больше левого)
  89 <=> 23;		# Результат: 1 (правый операнд больше левого)

Строковые операции отношения

Сравнение строковых данных базируется на их упорядочении в соответствии с таблицей кодов ASCII, т. е. символ с меньшим кодом ASCII предшествует символу с большим кодом.

Таблица 3. Коды ASCII

Основная таблица ASCII
 
Расширенная таблица ASCII (cp866)
 

Если вы не знакомы с 16-тиричной системой счисления или вы ничего не поняли – вам сюда.

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

"A" lt "a"; Результат: истина (код "А" - 41h, код "а" - 61h)
"a" lt "aa";

Результат: истина (к строке "а" добавляется символ с кодом \000, который меньше кода 61h второго символа "а" строки правого операнда)

"a" lt "a ";

Результат: истина (к строке "а" добавляется символ с кодом 00h, который меньше кода 20h замыкающего пробела строки правого операнда)

"12" lt "9";

  Результат: истина (код "1" - 31h, код "9" - 39h)

" 9" eq "09";
Результат: ложь (код " " - 20h, код "0" - 30h)

Обратим внимание на две последние операции сравнения строковых литералов. Содержимое их операндов может быть преобразовано в правильные числа, и поэтому к ним применимы аналогичные числовые операции отношения. Однако их результат будет существенно отличаться от результата выполнения строковых операций отношения. При использовании операции < в предпоследнем выражении результат будет Ложь, а если в последнем выражении применить операцию ==, то результат будет Истина. Об этом всегда следует помнить, так как Perl автоматически преобразует символьные данные в числовые там, где это необходимо.


К содержанию

 
Скачать новую версию данного учебника в одном архиве

Курс находится в процессе разработки, поэтому архив постоянно обновляется!




 
Hosted by uCoz