Термы и операторы списка
Операторы в Perl-е имеют различный приоритет.
Операторы, заимствованные из C, сохранили между собой ту же иерархию, что и в C.
Термы имеют самый большой приоритет, они содержат переменные, кавычки, выражения в скобках, функции с их параметрами. Если за списковым оператором ( например, print()) или унарным оператором ( например, chdir()) следует список аргументов, заключенный в скобки, то эта последовательность имеет самый высокий приоритет, подобно функции с аргументами.
Аналогично термам обрабатываются последовательности do{} и eval{}.
Оператор "стрелка"
Оператор ``стрелка". Также, как в С и С++ ``->"" является инфиксным оператором ссылки.
Если правая часть является [...] или {...} подпрограммой, тогда левая часть должна быть символьной ссылкой на массив или хэш. Если правая часть - это имя метода или скалярная переменная содержащая имя метода, то левая часть должна быть объектом или именем класса.
Операторы ++ и - -
Эти операторы работают также как и в С. То есть, если они стоят перед переменной, то они увеличивают или уменьшают переменную до возвращения значения. Если они стоят после переменной, то увеличение или уменьшение переменной происходит после возврата значения. Если переменная содержит в себе число или употребляется в скалярном контексте, то использование ++ дает обычное увеличение значения. Если же переменная употреблялась только в строковом контексте, не является пустой строкой и содержит символы a-z,A-Z,0..9, то происходит строковое увеличение значения переменной:
print ++($foo = "99"); - напечатает 100 print ++($foo = "a0"); - напечатает a1 print ++($foo = "Az"); - напечатает Ba print ++($foo = "zz"); - напечатает aaa
Экспоненциальный оператор
В Perl-е двойная звездочка ** является экспоненциальным оператором. Он требует к себе даже больше внимания, чем унарный минус: -2**4 это -(2**4), но не (-2)**4.
Символьные унарные операторы
Унарный ! означает логическое отрицание.
Унарный минус, в случае числового значения переменной, обозначает обычное арифметическое отрицание. Если операндом является идентификатор, то возвращается строка, состоящая из знака минус и идентификатора. Если строка начинается со знака + или -, то возвращается строка, начинающаяся с противоположного знака. Унарная тильда ``~"" обозначает побитовое отрицание.
Унарный плюс не имеет влияния даже на строки. Он используется для отделения имя функции от выражения заключенного в скобки, которое иначе рассматривается как список аргументов.
rand (10) * 20; - (rand10) * 20; rand +(10) * 20; - rand(10 * 20);
Унарный бэкслэш / обозначает ссылку на то, что стоит за ним.
Операторы связки
Знак равенства с тильдой ``=~""связывает выражение слева с определенным шаблоном. Некоторые операторы обрабатывают и модифицируют переменную $_. Эти же операции иногда желательно бывает выполнить над другой переменной. Правый аргумент это образец поиска, подстановки или трансляции, левый аргумент - это то, что должно быть подставлено вместо $_. Возвращаемая величина показывает успех операции.
Бинарное ``!~"" это тоже самое, что и ``=~"", только возвращаемая величина является отрицательной в логическом смысле.
Бинарные операторы
Звездочка * - умножение двух чисел.
Cлэш / - деление числа на число.
Процент % - вычисляет модуль двух чисел, x - оператор повторения. В скалярном контексте возвращает строку, состоящую из многократно повторенного левого операнда, причем повторяется он то количество раз, которое стоит справа. В списковом контексте он многократно повторяет список.
print "a" x 80; напечатает букву a 80 раз. @ones = (1) x 80; массив из восьмидесяти единиц. @ones = (5) x @ones сделает все элементы равными пяти.
Бинарный плюс - операция сложения двух чисел. Бинарный минус - операция вычитания двух чисел. Бинарная точка - конкатенация строк.
Операторы сдвига
Двоичный сдвиг осуществляется, как и во многих других языках программирования, с помощью операторов "<<" и ">>". При применении этих операторов значения левых аргументов сдвигаются в соответствующую сторону на количество разрядов, указанное в правых аргументах. Аргументы должны быть целочисленными.
Операторы сравнения
"<" | возвращает TRUE если левый аргумент численно меньше, чем правый. | ">" | возвращает TRUE если правый аргумент численно меньше, чем левый. | "<=" | возвращает TRUE если правый аргумент численно меньше или равен левому. | ">=" | возвращает TRUE если левый аргумент численно меньше или равен правому. | "gt" | возвращает TRUE если левый аргумент меньше (в строковом контексте), чем правый. | "lt" | возвращает TRUE если правый аргумент меньше (в строковом контексте), чем левый. |
На поведение операторов lt и gt влияют установки системного языка, если операционная система способна работать с несколькими языками. По этой причине операторы должны корректно работать со строками на языках, отличных от US ASCII, что в системе UNIX задается указанием свойств LC_COLLATE системного locale.
Операторы эквивалентности
== | возвращает TRUE, если левый аргумент численно эквивалентен правому. | != | возвращает TRUE, если левый аргумент численно неэквивалентен правому. | <=> | возвращает -1, 0 или 1 в зависимости от того, численно меньше, равен или больше левый аргумент правого. | eq | возвращает TRUE, если левый аргумент эквивалентен правому (в строковом контексте). | ne | возвращает TRUE, если левый аргумент неэквивалентен правому (в строковом контексте). | cmp | возвращает -1, 0 или 1 в зависимости от того, меньше равен или больше левый аргумент правого (в строковом контексте). |
Побитовое И, побитовое ИЛИ и Исключающее ИЛИ
Бинарное & возвращает объединенные побитово операнды.
Бинарное | возвращает перемноженные побитово операнды.
Бинарное ^ возвращает исключенные побитово операнды.
1 2
8 8 8
| |