Язык программирования Perl | страница 38
>
('One', $x, $x+$y-$z, 2*5) # список литералов и выражений
() # пустой список
Списочный литерал может содержать операцию диапазона, которая записывается в виде двух скалярных значений, разделенных двумя точками:
>
начальное_значение .. конечное_значение
В списочном контексте эта операция возвращает список значений. Возвращаемый список начинается со значения левого операнда, которое в цикле увеличивается на единицу, пока не будет достигнуто значение правого операнда. Приведем примеры:
>
5 .. 10 # возвратит список (5, 6, 7, 8, 9, 10)
5.3 .. 7.1 # возвратит список (5.3, 6.3), т. к. 7.3 > 7.1
7 .. 5 # возвратит пустой список (), т. к. 5 < 7
$m .. $n # диапазон, заданный значениями от $m до $n
Если операция диапазона применяется к строкам, то значения списка генерируются по правилам операции автоинкремента. С ее помощью удобно записывать различные списочные литералы:
>
(-2 .. 2) # список чисел (-2, -1, 0, 1, 2)
(25, 53, 77 .. 79) # список (25, 53, 77, 78, 79)
('A'..'Z','a'..'z') # список заглавных и строчных букв
($start .. $finish) # список значений от $start до $finish
Если списочный литерал состоит только из имен переменных, то он может стоять в левой части операции присваивания, в правой части которой будет список присваиваемых значений. Переменным, стоящим слева от знака "равно", последовательно присваиваются значения соответствующих элементов списка из правой части операции.
>
($a, $b, $c) = (10 .. 12); # $a = 10; $b = 11; $c = 12;
($day, $month, $year) = (18, 12, 1987); # день рождения Perl
($m, $n) = ($n, $m); # поменять местами значения $n и $m
Если в списке слева от знака присваивания переменных больше, чем значений в списке в правой части, то оставшиеся переменные получают неопределенные значения:
>
($hh, $mm, $ss, $ms) = (10, 20, 30); # $ms не определено
Если в левой части присваивания переменных меньше, чем значений в правой, то лишние значения не используются.
>
($hh, $mm, $ss) = (10, 20, 30, 400); # 400 отброшено
Если в левой части присваивания стоит не список, а скалярная переменная, то устанавливается скалярный контекст, в котором литеральный список возвращает значение своего последнего элемента:
>
$scalar = (10, 20, 30, 400); # то же, что $scalar = 400;
Значение списка может храниться в переменной, называемой массив. Перед именем переменной-массива стоит разыменовывающий префикс @ (напоминающий своим видом, что это array - "массив"). Одновременно с переменной-массивом в программе может существовать скалярная переменная с таким же именем, но с префиксом $, так как имена скаляров и массивов хранятся в разных таблицах имен (symbol tables).