Вход/Регистрация
Язык программирования Perl
вернуться

Шохирев Михаил Васильевич

Шрифт:

qw(это очень удобно) # вместо ('это', 'очень', 'удобно')

qw/John Paul

George Ringo/ # список слов, расположенный на 2 строках

Элементами списочного литерала могут быть не только строки и числа, но также скалярные переменные и выражения. Пустой список не содержит элементов и представляется списочным литералом без значений (одними круглыми скобками).

('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).

@variable # массив для хранения списка

$variable # скаляр для хранения строки или числа

Списочное значение помещается в массив с помощью операции присваивания. Присваивание выполняется по-разному в зависимости от контекста, который определяется левым операндом присваивания. Если в левой части присваивания стоит массив или список, то и в правой части ожидается список. Например:

@empty = ; # пустой массив после присвоения пустого списка

@months = (1 .. 12); # массив со списком номеров месяцев

@days = qw(Пн Вт Ср Чт Пт Сб Вс); # массив дней недели

  • Читать дальше
  • 1
  • ...
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: