Создание серверных приложений на языке PERL

         

Урок 8. Список. Массив. Работа


Урок 8. Список. Массив. Работа с массивом

Список — это упорядоченные скалярные данные. Массив - переменная, которая содержит список. Каждый элемент массива — это отдельная скалярная переменная с независимым скалярным значением.





Массивы могут иметь любое число элементов. Минимально возможный массив не имеет элементов вообще, тогда как максимально возможный может заполнять всю наличную память.

Список состоит из значений, отделенных друг от друга запятыми и заключенными в круглые скобки. Эти значения образуют элементы списка.

(1,2,perl,3.14159) - список из 4-х значений.

Элементы списка не обязательно должны быть константами. Это могут быть выражения, которые вычисляются при каждом использовании списка. Например:

($a,$a**$b,$b+33) -список из 3-х элементов.

Список можно присвоить особому типу переменных - массиву. Такая переменная начинается с символа "@", а не "$" как обычная скалярная переменная. Обращение к элементам массива идет через индекс массива. Каждому элементу массива соответствует скалярная переменная с именем массива.

Пора Вам рассказать о том, что оператор print способен выводить не только скалярные данные, но и списки. Приведенная ниже программа демонстрирует работу с массивом.

#!/usr/bin/perl print "Content-Type: text/html\n\n";

@ar=(1,2,3); $ar[0]++; print @ar,"<BR>"; print $ar[0],$ar[1],$ar[2];

Первый элемент массива имеет индекс 0, значит последний - общее число элементов минус единица. Можно присвоить какой-нибудь скалярной переменной массив. В таком случае в переменную запишется кол-во элементов этого массива. При присваивании скалярной переменной списка, в неё записывается последний эл-т списка. Проверим:

#!/usr/bin/perl print "Content-Type: text/html\n\n";

@array=(0,2,4.5,Perl); $ar=@array; $ar1=(0,2,4.5,Perl); print @array,"<br>"; print $ar,"<br>"; print $ar1,"<br>"

Списки можно присваивать не только массивам и скалярам, но и, собственно, спискам. Если в левом списке эл-тов больше чем в правом, последние эл-ты этого списка уничтожаются. Если в левом списке эл-тов меньше чем в правом, часть эл-тов правого списка ничему не присвоится. В списки можно вкладывать и массивы:

#!/usr/bin/perl print "Content-Type: text/html\n\n";

$d="22"; @ar=(3,2,1); ($a,$b,$c,$d)=@ar; print ($a,$b,$c,$d,"<BR>"); @ar1=(@ar,"It works!"); print @ar1;

Если в качестве значения индекса массива указать список элементов, можно получить все их значения в виде списка. Такое использование называется срезом массива. Отрицательное значение индекса обозначает номер позиции элемента с конца:

#!/usr/bin/perl print "Content-Type: text/html\n\n";

@array=(1,2,3,4); print @array[0,-3];

Оператор Foreach

foreach VAR (LIST) {operator}

Переменной VAR присваивается поочередно каждый элемент списка LIST и выполняется блок. Если VAR опущено, то элементы присваиваются встроенной переменной $_. Если в теле блока изменять значение VAR то это вызовет изменение и элементов списка т.к. VAR фактически указывает на текущий элемент списка. Вместо слова foreach можно писать просто for - это слова синонимы.

оператор ..

Элемент списка может включать операцию конструктора списка. Это два скалярных значения, разделенных двумя точками. Данная операция создает список значений, начиная с левого скалярного значения и кончая правым скалярным значением, с шагом 1.

Если правый скаляр меньше левого, то список будет пустым, так как в обратном направлении отсчет вести нельзя. Если последнее значение не соответствует целому числу шагов, то список заканчивается там, где приращение на единицу привело бы к появлению числа, не принадлежащего заданному диапазону. Ниже приведенная программа демонстрирует работу операторов foreach и "..":

#!/usr/bin/perl print "Content-Type: text/html\n\n";

@array=(1..10); foreach $a(@array){ print ($a,"<BR>"); }

* * * *

  • Как изменится длина 8-и элементного массива, если 2-ум его ячейкам присвоить пустую строку ("") ?
  • Если значения ячеек совпадают с номерами их индексов, то какое значение записано в 9-й ячейке массива?
  • Анологичный 9-и элементный массив. Какое значение будет записано в ячейке с номером "-1" ?
  • Какое число элеменотов вернет такая конструкция: ('3.8'..'9.1') ?


  • Напишите программу, выводящую все простые числа из диапазона (-28..53) включительно, используя конструктор списка и оператор Foreach. Какое минимальное кол-во переменных требуется для написания такой программы?

    [Содержание]  [Вступление]  [необходимое для начала изучения]  [урок 1]  [урок 2]  [урок 3]  [урок 4]  [урок 5]  [урок 6]  [урок 7]  [урок 8]  [урок 9]  [урок 10]  [урок 11]  [урок 12]  [урок 13]  [урок 14]  [урок 15]  [урок 16]  [урок 17]  [урок 18]  [урок 19]  [урок 20]  [урок 21]  [урок 22]  [урок 23]  [урок 24]  [урок 25]  [урок 26]  [урок 27]  [урок 28]  [правила хорошего тона]  [приложение A]  [приложение Б]  [приложение В]  [заключение]  [благодарности] 

    Copyright (c) ClericICN, 2002


    Содержание раздела