Анимация
JavaScript
|
Главная Библионтека в этом примере перемеппой $а присваивается зпачепие персики. Остальные фрукты из правого списка присваиваются массиву Переменной $с не достается значения, так как все значения "вобрал" в себя массив Переменная $с стано- вится неопределенной (undef). Важно помнить, что если слева от оператора присваивания находится больше переменных, чем справа, избыточные переменные получают значение undef. Если справа больше элементов, чем слева, избыточные элементы справа просто игнорируются. Вот пример: не используется ($t,Su,$v)=qw{ куропатка дрозд кардинал перепелка ); присваивается undef белка дятел суслик В первой строке переменным $t, $u и $v присваиваются значение йз списка, находящегося в правой части оператора присваивания. Избыточный элемент правой части (перепелка) попросту не используется в выражении. Во второй строке переменным $а , $Ь и $с присваиваются значения из списка, находящегося в правой части оператора присваивания, а переменной $d значения "не хватило" (последний элемент суслик присваивается переменной $с). Следовательно, значение $d становится неон-ределенным (undef). Доступ к элементам массива Выше была описана методика работы с массивами и списками. Теперь рассмотрим вопрос доступа к их индивидуальным элементам. Такой доступ необходим для выполнения поиска элементов в массивах, изменения их значения, а также для добавления и удаления элементов. Простейший способ получить доступ к содержимому всего массива - использовать его имя в двойных кавычках: print "«аггау; В этом примере будут распечатаны все элементы массива гау, разделенные пробелами. Доступ к индивидуальным элементам массива осуществляется посредством их индексов. Индекс элементов массива начинается с 0 и с каждым элементом увеличивается на 1. Каждому элементу массива соответствует свое значение индекса, например: Jtrees
Количество элементов массива ограничено лишь количеством доступной оперативной памяти. Для доступа к определенному элементу используется синтаксис %тя тссаъа{янпвкс\. Массив не обязательно должен существовать при обращении к его элементам. При необходимости массив создается автоматически. Ниже приведено несколько примеров работы с отдельными элементами массива: Чть I. :нcEl Perl §trees=qw{ Кедр ) ; pdut $trees[0]; f Печатает "ffi6" pdnt $trees[3]; f Шатает "Язеть". $!trBe£[4]=C0C; Как видите, когда речь идет об индивидуальных элементах массива в их на- звании используется символ $. Но ведь этот символ используется для обозначения скаляров, скажете вы. Символ $ в конструкции $trees[3] говорит о том, что это отдельный скаляр, находящийся в массиве Strees. Скаляры нотому и обозначаются символом доллара, что содержат только одно значение. Это важный момент. В начале этого занятия вы узнали, что скаляры и массивы могут иметь одинаковые имена, но при этом не быть связанными друг с другом. Perl усматривает разницу между скаляром Strees и элементом массива номер которого задается в квадратных скобках. Он нонимает, что речь идет о нервом элементе массива gtrees, а вовсе не о скалярной переменной $trees. Perl может онерировать с нодгрунпой внутри массива, называемой сечением (slice). Сечение массива обозначается символом 6, свидетельствующим о том, что это группа элементов и квадратными скобками с перечислением индивидуальных элементов массива, например: etrees=qw( дуб Кедр Клен Яблоня Вищня Сосна Пфсик Ель ); etrees[3,4,6]; * Фруктовые деревья gconifers=§trees[5,7] I Хвойные деревья Определение размера массива Часто требуется определить размер массива, или индекс его последнего элемента. Подобная задача возникает при добавлении или удалении элементов массива. В Perl для рещения этой задачи нредусмотрено несколько снособов. Первый - использование снециальной переменной Цимя кйсснва. Она возвращает последний допустимый индекс массива, например: etrees=qw( Кедр Клен Ябловя Вишня Сосна Перснк Ель ); print SJtrees; В этом массиве восемь элементов, но, так как нумерация массивов начинается с нуля, печатается индекс 7. Изменение значения переменное rees изменяет длину массива. Уменьшение значения приводит к удалению элементов с большими индексами, а увеличение - добавляет в массив новые элементы. Новые элементы имеют неопределенное значение (undef), Другой способ нахождения размера массива - использование имени массива в скалярном контексте (т.е. там, где в выражении ожидается скаляр), например: $в1ге=ваггау; Переменная $size теперь содержит количество элементов массива гау. На этом примере мы продемонстрировали, как используется концепция контекста в Perl. О контексте мы поговорим в следующем разделе. При работе с массивами можно также использовать отрицательные индексы, котрые соответствуют элементам, расположенным с конца массива. Например, ?аггау[-1]- последний элемент массива Sarray, $аггау(-2]- следующий с конца и т.д. Подробнее о контексте Что же .такое контекст? Контекст - это некое окружение элемента, помогающее понять, что он собой представляет. Если мы видим человека в одежде хирурга в больнице - скорее всего, он врач, а на бале-маскараде - один из гостей.. Люди используют Контекст для определения смысла слов. Например, слово угол может иметь несколько значений, в зависимости от окружающих его слов, или контекста: • магазин за углом; • прямой угол; . • :. снять угол. Одно и то же слово, а значения разные. Значение слова зависит от окружающих его слов. Точно так же Perl реагирует на контекст. Функции и операторы Perl ведут себя по-разному в зависимости от контекста. Два наиболее важных контекста Perl - это контекст списка и скалярный контекст. Например, оператор присваивания (символ =) можно применять и к массивам, и к скалярам. Тип выражения, находящегося слева (список или скаляр), определяет контекст выражения, находящегося справа. Посмотрите на этот фрагмент кода: $а=$Ь; * Слева скаляр, следовательно, контекст скалярный. efoo=§bar; I Слева массив, контекст списка. (?a)=efoo; t Слева список, опять контекст списка. $b=ebarj # Слева скаляр, скалярный контекст. Последняя строка представляет особый интерес, потому что массивы в скалярном контексте возвращают количество элементов массива. Сравните, как используются переменные $а и в следующих строках кода (обратите внимание, оба оператора присваивания делают практически одно и то же): ef oo=qv( Bqip Шхм К:жа Л1сщц ) ; $a=efoo; $b=$foo; print "SaSn-; print "SbVn"; После выполнения этого кода переменная $а имеет значение 4, а - 3. Почему так происходит? Массив Sfoo в скалярном контексте возвращает количество своих элементов, которое присваивается переменной $а. А переменной $Ь присваивается значение индекса последнего элемента (не забывайте, что нумерация индекса массива начинается с нуля). Учитывая, что массив в скалярном контексте возвращает количество своих элементов, легко проверить, пустой массив или нет: emydata=qw( Овес Пшеница Рожь Ячмень ); if (emydata) { print "В массиве есть данные t\n"; Здесь массив используется в скалярном контексте, в результате выражение возвращает количество элементов массива, в нашем случае - 4. Условное выражение в операторе if равно 4, а значит, оно истинно и тело блока выполняется. 70 Часть I. ОcнcEl Perl 0 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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |