Чтение онлайн

на главную - закладки

Жанры

Язык программирования Perl
Шрифт:

'' или "" пустая строка, поэтому - "ложь"

0 или 0.0 0 преобразуется в '0', поэтому - "ложь"

+0 или -0 0 преобразуется в '0', поэтому - "ложь"

5-(3+2) равно 0, который преобразуется в '0', поэтому - "ложь"

undef неопределенное значение дает в результате '', поэтому - "ложь"

'1' или 'false' не пустая строка и не '0', поэтому - "истина"

'00' или '0.0' не пустая строка и не '0', поэтому - "истина"

'-0' или '+0' не пустая строка и не '0', поэтому - "истина"

'0 but true' не пустая строка, значит - "истина"

Истинность или ложность значения выражения вычисляется для логических операций и операций сравнения.

В Perl есть отдельные наборы операций для сравнения чисел и строк. Обозначения операций сравнения чисел совпадают с обозначениями операций в других языках, основанных на синтаксисе языка C. В следующих примерах предположим, что в переменной $n хранится значение 25:

== равно (не путайте с присваиванием (=), например, $n == 4 ложно)

!= не равно (например, $n != 8*2 истинно)

< меньше, чем (например, $n < '16.08' ложно)

> больше, чем (например, $n > 9 истинно)

<= меньше или равно (например, $n <= 26 истинно)

>= больше или равно (например, $n >= 24 истинно)

<=> числовое сравнение (например, $n <=> 64 вернет -1)

Последняя операция числового сравнения <=> (называемая на программистском жаргоне spaceship - "космический корабль, челнок"), возвращает значение -1, 0 или 1, если первый операнд операции соответственно меньше, равен или больше второго. Все эти операции создают числовой контекст, и строковые операнды этих операций перед сравнением преобразуются к числам. Например, сравнения 123 == ' 123' или '+123' == '123x' преобразуются к 123 == 123. Поэтому пустая строка считается равной нулю.

Обозначения операций сравнения строк похожи на обозначения сравнений в языке программирования Fortran. Они применяются, когда сравниваемые величины нужно рассматривать как строки. При сравнении строковых значений учитывается их положение в кодовой таблице символов: чем ближе к началу таблицы, тем меньше значение. В следующих примерах предположим, что в переменной $s хранится 'a':

eq равно (например, $s eq 'a' истинно)

ne не равно (например, $s ne 'Y' истинно)

lt меньше, чем (например, $s lt 'z' истинно)

gt больше, чем (например, $s gt '9' истинно)

le меньше или равно (например, $s le 'b' истинно)

ge больше или равно (например, $s ge 'Z' истинно)

cmp строковое сравнение (например, $s cmp 'Z' вернет результат 1)

Последняя операция строкового сравнения cmp, так же, как операция числового сравнения <=>, возвращает одно из значений: -1, 0 или 1, если первый операнд операции соответственно меньше, равен или больше второго. При сравнении строк имеет значение их длина и содержащиеся в них пробелы: равными считаются посимвольно совпадающие строки одинаковой длины. Операции сравнения строк устанавливают строковый контекст, поэтому их числовые операнды преобразуются к строкам. При этом строковое сравнение чисел дает своеобразный результат, например, '20' больше '100', поскольку '2' находится в таблице символьных кодов позже, чем '1'. Проверка на частичное совпадение строк, которая часто требуется при обработке текста, выполняется с помощью регулярных выражений, которые будут рассмотрены в лекции 8.

Логические операции создают логический контекст выражения, поэтому эти операции возвращают строку '1' при истинном значении выражения и пустую строку (''), если оно ложное. Обозначение традиционных логических операций в Perl также заимствованы из языка C:

! логическое НЕ (например, ! undef($x) )

&& логическое И (например, $d >= 1 && $d <= 31 )

|| логическое ИЛИ (например, $m eq 'Dec' || $m eq 'Jan')

Результат операции логическое И будет истинным лишь тогда, когда истинны оба операнда, причем второй операнд вычисляется только тогда, когда первый операнд истинный). Операция логическое ИЛИ возвращает истинный результат, если один из операндов истинный, при этом второй операнд вычисляется только тогда, когда первый операнд ложный. Операция логическое НЕ (или логическое отрицание) меняет значение своего операнда на противоположное. Особенности вычисления логических операций часто применяются в Perl для выполнения действий в зависимости от условия. Например, вывести на печать результат при условии, если он положителен, можно так:

$result > 0 && print $result;

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

not логическое НЕ (например, not undef($x))

and логическое И (например, $d >= 1 and $d <= 31)

or логическое ИЛИ (например, $m eq 'D' or $m eq 'J' or $m eq 'F')

xor логическое ИСКЛЮЧАЮЩЕЕ ИЛИ (например, $d==1 xor $m eq 'J')

Операция логическое ИСКЛЮЧАЮЩЕЕ ИЛИ возвращает истинный результат, если операнды имеют различное значение, а когда оба операнда имеют одинаковое значение (истинное или ложное), то эта операция возвращает "ложь". Низкоприоритетные логические операции тоже применяются для условного выполнения действий.

Побитовые операции (bitwise operators) выполняются над двоичными разрядами операндов. Унарная операция побитовое НЕ (или побитовое отрицание, или побитовое дополнение) меняет каждый разряд операнда на противоположный. Бинарные операции побитовое И, побитовое ИЛИ и побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ выполняют соответствующую двоичную операцию поразрядно над левым и правым операндами. Если операнды числовые, то они преобразуются в целые числа, имеющие гарантированную длину не менее 32 разрядов.

Поделиться:
Популярные книги

Цеховик. Книга 1. Отрицание

Ромов Дмитрий
1. Цеховик
Фантастика:
попаданцы
альтернативная история
5.75
рейтинг книги
Цеховик. Книга 1. Отрицание

Мастер 4

Чащин Валерий
4. Мастер
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Мастер 4

Седьмая встреча

Вассму Хербьёрг
Проза:
современная проза
4.00
рейтинг книги
Седьмая встреча

Поводырь

Щепетнов Евгений Владимирович
3. Ботаник
Фантастика:
фэнтези
6.17
рейтинг книги
Поводырь

Я до сих пор царь. Книга XXXII

Дрейк Сириус
32. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я до сих пор царь. Книга XXXII

Когда он был порочным

Куин Джулия
6. Бриджертоны
Любовные романы:
исторические любовные романы
8.85
рейтинг книги
Когда он был порочным

Кодекс Охотника. Книга II

Винокуров Юрий
2. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
боевая фантастика
юмористическое фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга II

Изгой Проклятого Клана. Том 5

Пламенев Владимир
5. Изгой
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Изгой Проклятого Клана. Том 5

Наследие Маозари 4

Панежин Евгений
4. Наследие Маозари
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Наследие Маозари 4

Кодекс Императора III

Сапфир Олег
3. Кодекс Императора
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Императора III

Последний Паладин

Саваровский Роман
1. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин

За Горизонтом

Вайс Александр
8. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
За Горизонтом

Падение Софии (русский роман)

Хаецкая Елена Владимировна
Фантастика:
фэнтези
5.00
рейтинг книги
Падение Софии (русский роман)

Товарищ "Чума" 2

lanpirot
2. Товарищ "Чума"
Фантастика:
городское фэнтези
попаданцы
альтернативная история
5.00
рейтинг книги
Товарищ Чума 2