Операторы ( 1стр )
Операторы предназначены в языке Perl, как и в других
языках программирования, для выполнения логических операций. Последовательность
таких операций зависит от приоритетности операторов. Далее будет вестись
описание операторов в последовательности их приоритетности.
Термы и операторы списка
Таковые в себе содержат переменные, логические и арифметические
выражения в скобках, кавычки,
функции с их параметрами (заключённые в круглые скобки). Последние лишь иммитируют
функцию потому, как любой списковый (напр.
print( )
) или унарный (напр.
unpack(
)
) оператор имеют скобки в которых содержится список аргументов, которые
имеют самый большой приоритет, что и обыкновенные функции. В случае
отсутсвия скобок приоритетность спискового оператора определяют следующим
образом. Сначала идут аргументы (слева-направо), стоящие сразу после
спискового оператора, затем также (слева-направо), стоящие до оператора.
Пример:
@ i = ( 'R ', 'L ', print 'P ', 'E ');
print "\n", @ i, "\n"; # выведет PE и RL
Аналогично термам обрабатываются последовательности
do{} и
eval{}.
Оператор "->" ("стрелка")
Является инфиксным оператором ссылки. Если правая
часть является
[...] или
{...}
подпрограммой, тогда левая часть должна
быть символьной ссылкой на массив или хэш. В другом случае, если правая
часть - это имя метода или скалярная переменная содержащая имя метода,
то левая часть должна быть объектом или именем класса.
Операторы "++" и "--"
Как известно "++" - инкременнт, а "--" декремент,
т.е увеличение или уменьшение на одну еденицу. И операторы, как вы
догадались, названы так не случайно и работают они по такому же принципу.
Зависит только от того, где он будет расположен, относительно переменной.
При написании данного оператора
до
переменной будет сначала изменено значение переменной, а затем полученный
результат будет использован. В противном случае (
после
) - сначала применение, потом изменение значения переменной. При написании
буквенных символов следует учитывать, что большие и маленькие буквы
в языке
Perl
имеют разные классы. Пример:
print ++($i = "z9") # получим результат а0
print ++($i = "Z9") # получим результат А0
Оператор возведение в степень ( ** )
В языке Perl двойная звездочка "**" является экспоненциальным
оператором. Приведем пример:
print 3**3 # 27
print -3**3 # -27
Примечание: запомните -3**3 - это -(3**3), но
никак не (-3)**3 .
Унарные операторы
-
!
- логическое отрицание
-
-
- унарный минус, при
числовом
значении переменной обозначает обычное арифметическое вычетание.
Если операндом является
идентификатор, то возвращается строка, состоящая из
знака минус и идентификатора.
-
+
- унарный плюс, при
числовом
значении переменной является арифметическим плюсом и влияние на строки не имеет,
но может применяться
для отделения имя функции от выражения заключенного в скобки, которое иначе
рассматривается как список аргументов.
-
~
- унарная тильда, указатель побитового отрицания
-
\
- получение ссылки на переменную, стоящую за ним
Операторы связки "=~" и "!="
Оператор
"=~"
связывает левую часть выражения с правой,
которая является определенным шаблоном. В случае не указания данного
оператора, за него по умолчанию будет действовать переменная
$_ .
Правый аргумент это образец поиска, подстановки или трансляции, левый аргумент - это
то, что должно быть подставлено вместо $_ . Возвращаемая величина показывает
успех операции. Оператор
"
! ~ ''
это тоже самое, что и "
= ~
'', только возвращаемая
величина является отрицательной в логическом смысле (
НЕТ).
Бинарные операторы
- * - умножение чисел
-
/
- деление чисел
-
%
- вычисление модуля двух чисел
-
x
- оператор повторений, в скалярном контексте справа от оператора
число повторений, а слева - строка для повторения. В списковом
контенте - элемент для повторения является список. Приведем примеры
в соответствии их рассмотрения:
print 'a' x '6'; # получим 'aaaaaa'
print (0,9) x 5; # получим 0909090909
Операторы сдвига ">>" и "<<"
-
>>
- выполняет двоичный сдвиг
левых аргументов
вправо на количество разрядов, указанное в правых
аргументах. Аргументы должны быть целочисленными.
-
<<
- выполняет двоичный сдвиг
левых аргументов
влево на количество разрядов, указанное в правых
аргументах. Аргументы должны быть целочисленными.
Операторы сравнений
-
< - возвращает
TRUE (
истина) если левое значение
численно
меньше, чем правое
-
lt
- возвращает
TRUE
если левое значение
(строчное)
меньше, чем правое
-
>
- возвращает
TRUE если левое значение
численно
больше, чем правое
-
gt
- возвращает
TRUE
если левое значение
(строчное)
больше
, чем правое
-
<=
- возвращает
TRUE
если левое значение
численно
меньше или равно, чем правое
-
le
- возвращает
TRUE
если левое значение
(строчное)
меньше или равно
, чем правое
-
>=
- возвращает
TRUE
если левое значение
численно
больше
или равно
, чем правое
-
ge
- возвращает
TRUE
если левое значение
(строчное) больше или равно
, чем правое
Операторы равенства
-
== - возвращает
TRUE(
истина) если левое значение
численно равно правому
-
eg
- возвращает
TRUE
если левое значение
(строчное)
равно
правому
-
!=
- возвращает
TRUE
если левое значение
численно не
равно
правому
-
ne
- возвращает
TRUE
если левое значение
(строчное)
не
равно
правому
-
<=>
- возвращает
-1, если
< ;
0, если
= и
1, если
> , применим к
числам
-
cmr
- возвращает
-1
, если
<
;
0
, если
=
и
1
, если
>
, применим к
строкам
Операторы работы с битами
-
&
- возвращает побитовое
&&
, т.е. логическое
И (объединение)
-
I
- возвращает побитовое
II, т.е. логическое
ИЛИ
(выбор левого аргумента)
-
^
- возвращает побитовое
исключение ИЛИ
(левый и правый аргумент будет обработан)
Логические операторы И (&&) и ИЛИ (II)
-
&&
- если левый аргумент
верен ( true ), то
будет проверен и правый,
если
неверен (false) - правый тоже будет считаться не верным
и
не будет проверен
-
II
- если левый аргумент
неверен
(false) , то
будет
проверен правый, если
верен
( true ) - правый
не будет
проверяться
Оператор диапазона
Данный оператор обозначается двумя точками
"
..
" . Применение в разных контекстах (списковом
и скалярном) приводят к разным результатам его
работы. Так например в списковом контексте он
работает от левого значения списка к правому с
шагом - одна единица. Пример:
for $i (8..15)
{print "$i ";
} # получим следующее: 8 9 10 11 12 13
14 15
В скалярном контексте оператор ".." работает по результату
логического "&&" и "II", т.е.
если левый аргумент
TRUE , то "
..
" принимает также значение
TRUE
и правей тоже будет обработан
(если не хотите использовать его укажите "
...
") или наоборот левый
FALSE, то "
.." -
FALSE
и правый игнорируется и такое же подобие с ИЛИ
(
II).
Условеый оператор "?:"
Работает по принципу "верю-неверю". Если
слева от
"?" выражение "
верно", то выводится условие, записанное
до ":
", в противном случае (
не верно) - записанное
после "
:".
Операторы присваивания
Стандартным оператором присваивания является "=",
который без каких-либо изменений присваивает правое
значение переменной, находящейся слева от него.
Перечисленные ниже операторы выполняют аналогичные
присвоения, но с учетом дополнительных действий,
в зависимости от левого индекса:
- **=
-
+=, -=, .=
- *=
, /=, %=, x=
-
&=, I=, ^=
-
<<=, >>=
-
&&=, II=
Примечание: Приоритетность всех перечисленных
операторов одинакова с "=".
Оператор "запятая" (",")
В скалярном контексте он обрабатывает
левое выражение
и отбрасывает его значение,
потом обрабатывает
правое и возвращает его величину. В списковом контексте он
играет роль разделителя при перечислении
элементов и вставляет все элементы в список.
Оператор "NOT" (логическое НЕ)
Имеет одинаковое применение с "
!
" (
см. выше
), но с более
низким приоритетом.
Операторы:
Логическое И, ИЛИ и Исключающее ИЛИ
-
and
- эквивалент оператора "
&&" (
см. выше
), но имеет более
низкий приоритет и "
ограниченность
" действия. т.е он не вернётся к
левому аргументу, если он "false"
-
or
- работает по принципу предыдущего, но эквивалентен
"
II" (
см. выше
)
-
xor
- исключающее
ИЛИ, т.е обрабатывает и левый и правый
аргумент
|