Операторы 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-й степени

Пример

#!/usr/bin/perl $a = 10; $b = 20; print "\$a = $a , \$b = $b\n"; $c = $a + $b; print '$a + $b = ' . $c . "\n"; $c = $a - $b; print '$a - $b = ' . $c . "\n"; $c = $a * $b; print '$a * $b = ' . $c . "\n"; $c = $a / $b; print '$a / $b = ' . $c . "\n"; $c = $a % $b; print '$a % $b = ' . $c. "\n"; $a = 2; $b = 4; $c = $a ** $b; print '$a ** $b = ' . $c . "\n";

Выполнение вышеуказанной программы дает следующий вывод:

$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.

Пример

#!/usr/bin/perl $a = 10; $b = 20; print "\$a = $a , \$b = $b\n"; if( $a == $b ){ print "$a == \$b результат true\n"; }else{ print "\$a == \$b результат false\n"; } if( $a != $b ){ print "\$a != \$b результат true\n"; }else{ print "\$a != \$b результат false\n"; } $c = $a <=> $b; print "\$a <=> \$b возвращает$c\n"; if( $a > $b ){ print "\$a > \$b результат true\n"; }else{ print "\$a > \$b результат false\n"; } if( $a >= $b ){ print "\$a >= \$b результат true\n"; }else{ print "\$a >= \$b результат false\n"; } if( $a < $b ){ print "\$a < \$b результат true\n"; }else{ print "\$a < \$b результат false\n"; } if( $a <= $b ){ print "\$a <= \$b результат true\n"; }else{ print "\$a <= \$b результат false\n"; }

Выполнение вышеуказанной программы дает следующий вывод:

$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.

Пример

#!/usr/bin/perl $a = "abc"; $b = "xyz"; print "\$a = $a ,\$b = $b\n"; if( $a lt $b ){ print "$a lt \$b возвращает true\n"; }else{ print "\$a lt \$b возвращает false\n"; } if( $a gt $b ){ print "\$a gt \$b возвращает true\n"; }else{ print "\$a gt \$b возвращает false\n"; } if( $a le $b ){ print "\$a le \$b возвращает true\n"; }else{ print "\$a le \$b возвращает false\n"; } if( $a ge $b ){ print "\$a ge \$b возвращает true\n"; }else{ print "\$a ge \$b возвращает false\n"; } if( $a ne $b ){ print "\$a ne \$b возвращает true\n"; }else{ print "\$a ne \$b возвращает false\n"; } $c = $a cmp $b; print "\$a cmp \$b возвращает$c\n";

Выполнение вышеуказанной программы дает следующий вывод:

$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

Пример

#!/usr/bin/perl $a = 10; $b = 20; print "\$a = $a ,\$b = $b\n"; $c = $a + $b; print "После присваивания\$c = $c\n"; $c += $a; print "\$c = $c, инструкция операции\$c += \$a\n"; $c -= $a; print "\$c = $c, инструкция операции\$c -= \$a\n"; $c *= $a; print "\$c = $c, инструкция операции\$c *= \$a\n"; $c /= $a; print "\$c = $c , инструкция операции \$c/= \$a\n"; $c %= $a; print "\$c = $c, инструкция операции \$c %= \$a\n"; $c = 2; $a = 4; print "\$a = $a , \$c = $c\n"; $c **= $a; print "\$c = $c, инструкция операции \$c **= \$a\n";

Выполнение вышеуказанной программы дает следующий вывод:

$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

Пример

#!/usr/bin/perl use integer; $a = 60; $b = 13; print "\$a = $a , \$b = $b\n"; $c = $a & $b; print "\$a & \$b = $c\n"; $c = $a | $b; print "\$a | \$b = $c\n"; $c = $a ^ $b; print "\$a ^ \$b = $c\n"; $c = ~$a; print "~\$a = $c\n"; $c = $a << 2; print "\$a << 2 = $c\n"; $c = $a >> 2; print "\$a >> 2 = $c\n";

Вывод вышеприведённой программы:

$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) истинно.

Пример

#!/usr/bin/perl $a = true; $b = false; print "\$a = $a , \$b = $b\n"; $c = ($a and $b); print "\$a and \$b = $c\n"; $c = ($a && $b); print "\$a && \$b = $c\n"; $c = ($a or $b); print "\$a or \$b = $c\n"; $c = ($a || $b); print "\$a || \$b = $c\n"; $a = 0; $c = not($a); print "not(\$a)= $c\n";

Вывод вышеприведённой программы:

$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`

Пример

#!/usr/bin/perl $a = 10; $b = q{a = $a}; print "q{a = \$a} = $b\n"; $b = qq{a = $a}; print "qq{a = \$a} = $b\n"; # Выполнить с помощью команды date в Unix $t = qx{date}; print "qx{date} = $t\n";

Вывод вышеприведённой программы:

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.

Пример

#!/usr/bin/perl $a = "run"; $b = "oob"; print "\$a = $a , \$b = $b\n"; $c = $a . $b; print "\$a . \$b = $c\n"; $c = "-" x 3; print "\"-\" x 3 = $c\n"; @c = (2..5); print "(2..5) = @c\n"; $a = 10; $b = 15; print "\$a = $a , \$b = $b\n"; $a++; $c = $a ; print "\$a выполняет\$a++ = $c\n"; $b--; $c = $b ; print "\$b выполняется\$b-- = $c\n";

Вывод вышеприведённой программы:

$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Слева направо

Пример

#!/usr/bin/perl $a = 20; $b = 10; $c = 15; $d = 5; $e; print "\$a = $a, \$b = $b, \$c = $c ,\$d = $d\n"; $e = ($a + $b) * $c / $d; print "(\$a + \$b) * \$c / \$d = $e\n"; $e = (($a + $b) * $c )/ $d; print "((\$a + \$b) * \$c) / \$d = $e\n"; $e = ($a + $b) * ($c / $d); print "(\$a + \$b) * (\$c / \$d ) = $e\n"; $e = $a + ($b * $c ) / $d; print "\$a + (\$b * \$c )/ \$d = $e\n";

Вывод вышеприведённой программы:

$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
Другие расширения