Операции присваивания
Для всех бинарных операций языка Perl существуют соответствующие составные операции присваивания. Все они, вместе с примерами их использования, собраны в табл. 4.2.
Таблица 4.2. Составные операции присваивания.
Операция | Пример | Эквивалент с операцией простого присваивания |
---|---|---|
**= | $а **= 3; | $а = $а ** 3; |
+= | $а += 3; | $а = $а + 3; |
- = | $а -= 3; | $а = $а -3; |
.= | $а.= "а"; | $а = $а. "а"; |
*= | $а *= 3; | $а = $а * 3; |
/= | $а /= 3; | $а = $а / 3; |
%= | $а %= 3; | $а = $а % 3; |
х= | $а х= 3; | $а = $а х 3; |
&= | $а &= $b; | $а = $а & $b; |
|= | $а |= 3; | $а = $а | 3; |
^= | $а ^= 3; | $а = $а ^ 3; |
<<= | $а <<= 3; | $а = $а " 3; |
>> = | $а >>= 3; | $а = $а " 3; |
&&= | ||
||= | $а ||= $b == 0; | $а = $а || $b == 0; |
Возвращаемым значением каждой из составных операций присваивания, как и в случае простого присваивания, является переменная левого Операнда (правильное lvalue), поэтому их можно использовать в любом операнде других операций присваивания (пример 4.11).
$b = 1; | |
$а = ($Ь +=3); | # Результат: $а = $b = 4 |
$а += ($Ь += 3); | # Результат: $а = $а+$b+3 |
(($а += 2) **= 2) -= 1; | # Результат: $а = ($а+2)**2-1 |
Замечание
При использовании операции присваивания (простой или составной) в качестве левого операнда другой операции присваивания обязательно ее заключение в круглые скобки. Иначе может сгенерироваться синтаксическая ошибка, или выражение будет интерпретировано не так, как задумывалось. При наличии нескольких операций присваивания в одном выражении без скобок интерпретатор perl начинает его разбор справа. Например, если последнее выражение примера 4.11 записать без скобок.
$а += 2 **= 2 -= 1;
…то при его синтаксическом анализе интерпретатор сначала выделит операцию присваивания:
2 -= 1;
…и сообщит об ошибке, так как ее синтаксис ошибочен (левый операнд не является переменной или элементом массива).