На этом шаге мы рассмотрим различные операцтт присваивания.
Присваивание переменной какого-либо значения, определенного литералом, или присваивание одной переменной значения другой переменной является наиболее часто выполняемым действием в программе, написанной на любом языке программирования. В одних языках это действие определяется с помощью оператора, а в других - с помощью операции. Отличие заключается в том, что в языках, где присваивание является операцией, оно может использоваться в выражениях как его составная часть, так как любая операция вычисляет определенное значение, тогда как оператор всего лишь производит действие. В языке Perl присваивание является операцией, которая возвращает правильное lvalue. Что это такое, мы разъясним ниже.
Операция присваивания = является бинарной операцией, правый операнд которой может быть любым правильным выражением, тогда как левый операнд должен определять область памяти, куда операция присваивания помещает вычисленное значение правого операнда. В этом случае и говорят, что левый операнд должен быть правильным lvalue (от английского left value - левое значение). А что мы можем использовать в программе для обозначения области памяти? Правильно, переменные. Следовательно, в качестве левого операнда операции присваивания можно использовать переменную любого типа или элемент любого массива. (В языке Perl существуют и другие объекты, которые можно использовать в качестве левого операнда операции присваивания.) Следующая операция простого присваивания
$а = $b + 3;
($а = $b) = 3;
Синтаксические правила языка Perl позволяют осуществлять присваивание одного и того же значения нескольким переменным в одном выражении:
$var1 = $var2 = $var1[0] = 34;
Очень часто при реализации вычислительных алгоритмов приходится осуществлять разнообразные вычисления с использованием значения некоторой переменной и результат присваивать этой же переменной. Например, увеличить на 3 значение переменной $а и результат присвоить этой же переменной $а. Это действие можно реализовать следующей операцией присваивания:
$а = $а + 3;
Однако, язык Perl предлагает более эффективный способ решения подобных проблем, предоставляя в распоряжение программиста бинарную операцию составного присваивания +=, которая прибавляет к значению левого операнда, представляющего правильное lvalue, значение правого операнда и результат присваивает переменной, представленной левым операндом. Таким образом, оператор составного присваивания
$а += 3; # Результат: $а = $а+3
Для всех бинарных операций языка Perl существуют соответствующие составные операции присваивания. Все они, вместе с примерами их использования, собраны в таблице 1.
Операция | Пример | Эквивалент с операцией простого присваивания |
---|---|---|
**= | $а **= 3; | $а = $а ** 3; |
+= | $а += 3; | $а = $а + 3; |
-= | $а -= 3; | $а = $а - 3; |
.= | $а .= "а"; | $а = $а . "а "; |
*= | $а *= 3; | $а = $а * 3; |
/= | $а /= 3; | $а = $а / 3; |
%= | $а %= 3; | $а = $а % 3; |
x= | $а x= 3; | $а = $а x 3; |
&= | $а &= $b; | $а = $а & $b; |
|= | $а |= 3; | $а = $а | 3; |
^= | $а ^= 3; | $а = $а ^ 3; |
<<= | $а <<= 3; | $а = $а << 3; |
>>= | $а >>= 3; | $а = $а >> 3; |
&&= | $а &&= $b > 1; | $а = $а && $b > 1; |
||= | $а ||= $b == 0; | $а = $а || $b ==0; |
Возвращаемым значением каждой из составных операций присваивания, как и в случае простого присваивания, является переменная левого операнда (правильное lvalue), поэтому их можно использовать в любом операнде других операций присваивания:
$b = 1; $а = ($b += 3); # Результат: $а = $b = 4 $а += ($b += 3); # Результат: $а = $а+$b+3 ( ($а += 2) **= 2) -= 1; # Результат: $а = ($а+2)**2-1
$а += 2 **= 2 -= 1;
2 -= 1;
На следующем шаге мы рассмотрим операции связывания.