Глава 2: Скалярные данные.
2.4 Скалярные операции и функции
Самая распространенная операция, выполняемая над скалярной переменной — присваивание, которое представляет собой способ задания значения этой переменной. Операция присваивания в Perl обозначается знаком равенства (почти как в С и ФОРТРАНе). С левой стороны ставится имя переменной, с правой — присваиваемое ей значение или выражение, при помощи которого это значение вычисляется, например:
$а =17; # присвоить переменной $а значение 17
$b = $а + 3; # присвоить $b текущее значение $а плюс 3 (20)
$b == $b * 2; # присвоить $b значение $b, умноженное на 2 (40)
Обратите внимание: в последней строке переменная $b используется дважды: один раз для получения значения (в правой части), а второй — для указания, куда поместить вычисленное выражение (в левой части). Это допустимый, надежный и довольно распространенный прием. Распространен он настолько, что через минуту мы увидим, как все это можно записать в сокращенном виде.
Возможно, вы заметили, что скалярные переменные всегда предваряются знаком $. В shell знак $ используют для получения значения, а при присваивании нового значения его не указывают. В Java и С этот символ вообще опускается. Если вы постоянно присваиваете одной или нескольким переменным новые значения, то неминуемо будете делать ошибки. (Наше решение заключалось в том, чтобы прекратить писать программы на shell, awk и С, но для вас этот путь может быть неприемлем.)
Скалярное присваивание не только является операцией, его можно использовать и в качестве значения, аналогично тому как это делается в С. Другими словами, выражение $а=3 имеет значение, аналогично тому как имеет некоторое значение выражение $а+3. Значением является та величина, которая присваивается, т.е. $а=3 имеет значение 3. Хотя на первый взгляд это может показаться несуразным, использование присваивания как значения полезно, если вы хотите присвоить переменной промежуточное значение в выражении или просто скопировать одно значение в несколько переменных. Например:
$b = 4 + ($а =3); # присвоить 3 переменной $а, затем прибавить к 4,
# в результате чего $b получит значение 7
$d = ($с = 5); # скопировать 5 в $с, а затем и в $d
$d = $с = 5; # то же самое, но без круглых скобок
Последнее выражение работает, потому что присваивание имеет ассоциативность справа.