Операторы Perl
Операторы — это символы, которые указывают компилятору выполнять определённые математические или логические операции, например: 3+2=5.
В языке Perl есть богатый набор встроенных операторов. Давайте рассмотрим часто используемые из них:
- Арифметические операторы
- Операторы сравнения
- Логические операторы
- Операторы присваивания
- Побитовые операторы
- Операторы кавычек
- Другие операторы
- Приоритет операторов
Арифметические операторы
В примерах следующей таблицы мы устанавливаем переменной $a значение 10, а $b — 20.
| Operator | Описание | Пример |
|---|---|---|
| + | Операция сложения | Результат $a + $b равен 30 |
| - | Операция вычитания | Результат $a - $b равен -10 |
| * | Операция умножения | Результат $a * $b равен 200 |
| / | Операция деления | Результат $b / $a равен 2 |
| % | Операция взятия остатка, остаток после деления | Результат $b % $a равен 0 |
| ** | Возведение в степень | Результат $a**$b равен 10 в 20-й степени |
Пример
Выполнение вышеуказанной программы дает следующий вывод:
$a = 10 , $b = 20 $a + $b = 30 $a - $b = -10 $a * $b = 200 $a / $b = 0.5 $a % $b = 10 $a ** $b = 16
Операторы сравнения
В примерах следующей таблицы мы устанавливаем переменной $a значение 10, а $b — 20.
| Operator | Описание | Пример |
|---|---|---|
| == | Проверяет, равны ли значения двух операндов. Если равны, условие истинно, иначе ложно. | ($a == $b) ложно. |
| != | Проверяет, равны ли значения двух операндов. Если не равны, условие истинно, иначе ложно. | ($a != $b) истинно. |
| <=> | Проверяет, равны ли значения двух операндов. Возвращает -1, если левое число меньше правого, 0, если они равны, и 1, если левое число больше правого. | ($a <=> $b) возвращает -1. |
| > | Проверяет, больше ли значение левого операнда, чем значение правого операнда. Если да, условие истинно, иначе ложно. | ($a > $b) возвращает false. |
| < | Проверяет, меньше ли значение левого операнда, чем значение правого операнда. Если да, условие истинно, иначе возвращает false. | ($a < $b) возвращает true. |
| >= | Проверяет, является ли значение левого операнда большим или равным значению правого операнда. Если да, условие истинно, иначе возвращает false. | ($a >= $b) возвращает false. |
| <= | Проверяет, меньше или равно значение левого операнда значению правого операнда. Если да, условие истинно, иначе возвращает false. | ($a <= $b) возвращает true. |
Пример
Выполнение вышеуказанной программы дает следующий вывод:
$a = 10 , $b = 20 $a == $b 结果 false $a != $b 结果 true $a <=> $b 返回 -1 $a > $b 结果 false $a >= $b 结果 false $a < $b 结果 true $a <= $b 结果 true
В следующих примерах таблицы мы устанавливаем переменную $a в "abc" и $b в "xyz", затем используем операторы сравнения для вычисления результатов.
| Operator | Описание | Пример |
|---|---|---|
| lt | Проверяет, меньше ли строка слева, чем строка справа. Если да, возвращает true, иначе возвращает false. | ($a lt $b) возвращает true. |
| gt | Проверяет, является ли строка слева большей, чем строка справа. Если да, возвращает true, иначе возвращает false. | ($a gt $b) возвращает false. |
| le | Проверяет, является ли строка слева меньшей или равной строке справа. Если да, возвращает true, иначе возвращает false. | ($a le $b) возвращает true |
| ge | Проверяет, является ли строка слева большей или равной строке справа. Если да, возвращает true, иначе возвращает false. | ($a ge $b) возвращает false. |
| eq | Проверяет, равна ли строка слева строке справа. Если да, возвращает true, иначе возвращает false. | ($a eq $b) возвращает false. |
| ne | Проверяет, не равна ли строка слева строке справа. Если да, возвращает true, иначе возвращает false. | ($a ne $b) возвращает true |
| cmp | Возвращает 1, если строка слева больше строки справа, возвращает 0, если они равны, и возвращает -1, если строка слева меньше строки справа. | ($a cmp $b) возвращает -1. |
Пример
Выполнение вышеуказанной программы дает следующий вывод:
$a = abc ,$b = xyz abc lt $b 返回 true $a gt $b 返回 false $a le $b 返回 true $a ge $b 返回 false $a ne $b 返回 true $a cmp $b 返回 -1
Операторы присваивания
В примерах следующей таблицы мы устанавливаем переменной $a значение 10, а $b — 20.
| Operator | Описание | Пример |
|---|---|---|
| = | Оператор простого присваивания, присваивает значение правого операнда левому операнду | $c = $a + $b присвоит значение $a + $b переменной $c |
| += | Оператор сложения с присваиванием, присваивает левому операнду результат сложения правого операнда с левым операндом | $c += $a эквивалентно $c = $c + $a |
| -= | Оператор вычитания с присваиванием, присваивает левому операнду результат вычитания правого операнда из левого операнда | $c -= $a эквивалентно $c = $c - $a |
| *= | Оператор умножения с присваиванием, присваивает левому операнду результат умножения правого операнда на левый операнд | $c *= $a эквивалентно $c = $c * $a |
| /= | Оператор деления с присваиванием, присваивает левому операнду результат деления левого операнда на правый операнд | $c /= $a эквивалентно $c = $c / $a |
| %= | Оператор вычисления остатка и присваивания: вычисляет остаток от деления двух операндов и присваивает его левому операнду | $c %= $a эквивалентно $c = $c % a |
| **= | Оператор возведения в степень и присваивания: вычисляет степень двух операндов и присваивает её левому операнду | $c **= $a эквивалентно $c = $c ** $a |
Пример
Выполнение вышеуказанной программы дает следующий вывод:
$a = 10 ,$b = 20 赋值后 $c = 30 $c = 40 ,运算语句 $c += $a $c = 30 ,运算语句 $c -= $a $c = 300 ,运算语句 $c *= $a $c = 30 ,运算语句 $c /= $a $c = 0 ,运算语句 $c %= $a $a = 4 , $c = 2 $c = 16 ,运算语句 $c **= $a
Побитовые операции
Побитовые операторы действуют на биты и выполняют операции побитово.
Задайте $a = 60, $b = 13. Теперь в двоичном формате они выглядят следующим образом:
$a = 0011 1100 $b = 0000 1101 ----------------- $a&$b = 0000 1100 $a|$b = 0011 1101 $a^$b = 0011 0001 ~$a = 1100 0011
Побитовые операторы, поддерживаемые в Perl, показаны в следующей таблице:
| Operator | Описание | Пример |
|---|---|---|
| & | Если бит присутствует в обоих операндах, бинарный оператор AND копирует бит в результат. | ($a & $b) даст 12, что в двоичном виде равно 0000 1100 |
| | | Если бит присутствует хотя бы в одном из операндов, бинарный оператор OR копирует бит в результат. | ($a | $b) даст 61, в двоичном виде 0011 1101 |
| ^ | Двоичный оператор XOR копирует бит в результат, если он присутствует в любом из операндов, но не в обоих. | ($a ^ $b) даст 49, в двоичном виде 0011 0001 |
| ~ | Оператор двоичного дополнения до единицы (ones complement) — это унарный оператор, действие которого заключается в «переворачивании» битов: 0 становится 1, 1 становится 0. | (~$a ) даст -61, в двоичном виде 1100 0011, что является формой дополнения до единицы знакового двоичного числа. |
| << | Оператор двоичного сдвига влево. Значение левого операнда сдвигается влево на число битов, указанное правым операндом. | $a << 2 даст 240, в двоичном виде 1111 0000 |
| >> | Оператор двоичного сдвига вправо. Значение левого операнда сдвигается вправо на число битов, указанное правым операндом. | $a >> 2 даст 15, в двоичном виде 0000 1111 |
Пример
Вывод вышеприведённой программы:
$a = 60 , $b = 13 $a & $b = 12 $a | $b = 61 $a ^ $b = 49 ~$a = -61 $a << 2 = 240 $a >> 2 = 15
Логические операторы
Логические операторы Perl показаны в следующей таблице.
В примерах таблицы мы задаём переменной $a значение true, а переменной $b — false.
| Operator | Описание | Пример |
|---|---|---|
| и | Логический оператор AND. Если оба операнда истинны, условие истинно. | ($a and $b) ложно. |
| && | Логический оператор AND в стиле C. Если оба операнда истинны, условие истинно. | ($a && $b) ложно. |
| или | Логический оператор OR. Если хотя бы один из операндов отличен от нуля, условие истинно. | ($a or $b) истинно. |
| || | Логический оператор OR в стиле C. Если хотя бы один из операндов отличен от нуля, условие истинно. | ($a || $b) истинно. |
| not | Логический оператор NOT. Используется для инвертирования логического состояния операнда. Если условие истинно, логический оператор NOT сделает его ложным. | not($a and $b) истинно. |
Пример
Вывод вышеприведённой программы:
$a = true , $b = false $a and $b = false $a && $b = false $a or $b = true $a || $b = true not($a)= 1
Операции с кавычками
Операторы цитирования Perl показаны в следующей таблице.
| Operator | Описание | Пример |
|---|---|---|
| q{ } | Добавляет одинарные кавычки вокруг строки | q{abcd} дает 'abcd' |
| qq{ } | Добавляет двойные кавычки вокруг строки | qq{abcd} даёт "abcd" |
| qx{ } | Добавляет обратные кавычки вокруг строки | qx{abcd} даёт `abcd` |
Пример
Вывод вышеприведённой программы:
q{a = $a} = a = $a
qq{a = $a} = a = 10
qx{date} = 2016年 6月10日 星期五 16时22分33秒 CST
Другие операторы
Помимо операторов, упомянутых выше, Perl также поддерживает следующие операторы:
| Operator | Описание | Пример |
|---|---|---|
| . | Точка (.) используется для конкатенации двух строк. | Если $a="run", $b="oob", то $a.$b даёт "example" |
| x | Оператор x возвращает строку, повторённую указанное число раз. | ('-' x 3) выводит ---. |
| .. | .. — оператор диапазона. | (2..5) выводит (2, 3, 4, 5) |
| ++ | Оператор инкремента, увеличивает целочисленное значение на 1 | $a =10, $a++ выводит 11 |
| -- | Оператор декремента, уменьшает целочисленное значение на 1 | $a =10, $a-- выводит 9 |
| -> | Стрелка используется для указания метода класса | $obj->$a представляет метод $a объекта $obj. |
Пример
Вывод вышеприведённой программы:
$a = run , $b = oob $a . $b = example "-" x 3 = --- (2..5) = 2 3 4 5 $a = 10 , $b = 15 $a 执行 $a++ = 11 $b 执行 $b-- = 14
Приоритет операторов
В следующей таблице приведён приоритет операторов языка Perl:
| Operator | Ассоциативность |
|---|---|
| ++, -- | Отсутствует |
| -, ~, ! | Справа налево |
| ** | Справа налево |
| =~, !~ | Слева направо |
| *, /, %, x | Слева направо |
| +, -, . | Слева направо |
| <<, >> | Слева направо |
| -e, -r, | Отсутствует |
| <, <=, >, >=, lt, le, gt, ge | Слева направо |
| ==, !=, <=>, eq, ne, cmp | Слева направо |
| & | Слева направо |
| |, ^ | Слева направо |
| && | Слева направо |
| || | Слева направо |
| .. | Слева направо |
| ? and : | Справа налево |
| =, +=, -=, *=, | Справа налево |
| Другое | |
| , | Слева направо |
| not | Слева направо |
| и | Слева направо |
| or, xor | Слева направо |
Пример
Вывод вышеприведённой программы:
$a = 20, $b = 10, $c = 15 ,$d = 5 ($a + $b) * $c / $d = 90 (($a + $b) * $c) / $d = 90 ($a + $b) * ($c / $d ) = 90 $a + ($b * $c )/ $d = 50Другие расширения