Типы и структуры данных в Perl. Переменные, массивы и хэши

Ни один язык программирования не обходится без переменных. Переменная — это поименованная область памяти, содержащая те или иные данные, к которым программа может многократно обращаться и при необходимости модифицировать их.
Perl поддерживает три типа переменных: скаляры, массивы и хэши (или, иначе, ассоциативные массивы).
Скалярные переменные предназначены для хранения таких значений, как числа и строки. Идентификаторы (названия) скалярных переменных должны начинаться знаком доллара ($).
# Десятичные значения
$a = 514; # Присваиваем переменной $a значение 514
$b = 33.6; # Присваиваем переменной $b значение 33,6
$c = 2.16e3; # Присваиваем переменной $c значение 2160

# Шестнадцатеричное значение
$d = 0x2f; # Присваиваем переменной $d шестнадцатеричное значение 2F

Восьмеричное значение
$f = 0128; # Присваиваем переменной $d восьмеричное значение 128

# Строковые значения
$s = 'строка';
$t = "строка";
Символ решетки (#), как вы уже наверняка догадались, начинает комментарий в языке Perl.
В строковых значениях, заключенных в двойные кавычки, обрабатываются escape-последовательности и имена переменных:
$a = 'длинная';
$b = 'строка';
$c = '$a\t$b'; # Значение переменной: '$a\t$b'
$d = "$a\t$b"; # Значение переменной: 'длинная строка'
(Escape-последовательность \t кодирует символ табуляции.)
Переменные в Perl являются нетипизированными. Это означает, что одна и та же переменная в процессе работы программы может хранить значения различных типов (например, числа и строки):
$y = 5; # Текущее значение переменной $y: 5
$y = 'игрек'; # Текущее значение переменной $y: 'игрек'
Буквально представленные фиксированные значения, такие как 5 или 'игрек', фигурирующие в наших примерах, называются литералами. Между тем, мы можем присвоить какой-либо переменной значение другой переменной; значение, возвращаемое некоей подпрограммой и т. д.:
$pi = 3.14159265; # Заносим число "пи" в переменную $pi
$y = $pi; # А теперь присвоим переменной $y значение
# переменной $pi. Отныне у нас две переменных
# с одинаковыми значениями
Массив — это структура данных, позволяющая организовать упорядоченное множество значений. Один и тот же массив в Perl, в отличие от C/C++, может содержать данные различных типов — к примеру, числа и строки одновременно.
Идентификаторы массивов должны начинаться с символа «@»:
@cities = ('Москва', 'Санкт-Петербург', 'Новосибирск');
Этот массив состоит из трех элементов. Обратиться к тому или иному элементу массива можно при помощи номера — индекса. Элементы массива нумеруются с нуля, поэтому индекс последнего элемента массива всегда на единицу меньше общего числа элементов, составляющих массив. Все массивы в Perl являются динамическими — количество элементов в каждом из них можно изменить в любой момент по ходу выполнения программы. Обратиться к определенному элементу массива можно следующим образом:
$SPb = $cities[1]; # Читаем второй элемент массива
$cities[3] = 'Екатеринбург'; # Добавляем к массиву четвертый элемент
Обратите внимание, что в вышеприведенном примере при обращении к определенному элементу массива в идентификаторе используется не «собака», а знак доллара, поскольку элементы массива являются скалярными значениями.
Хэш от обычного массива отличается тем, что его индексами (а точнее, ключами — так правильнее с терминологической точки зрения) могут являться данные произвольного типа, а не обязательно порядковые номера. Иными словами, ассоциативный массив олицетворяет таблицу, состоящую из некоторого количества пар имя — значение.
$population{'Москва'} = 10383; # Население Москвы - 10383 тыс.
$population{'Петербург'} = 4661; # Население Петербурга - 4661 тыс.
$population{'Новосибирск'} = 1426; # Население Новосибирска - 1426 тыс.
В вышеприведенном примере мы создали хэш с именем %population (ссылка на весь хэш должна начинаться именно со знака процента). Ключами этого ассоциативного массива выступают названия трех крупнейших городов России, а соответствующими значениями — величины численности населения в каждом из этих городов.
Вывести все элементы массива или хэша можно при помощи уже знакомого нам оператора print:
print @cities; # Будет выведено: 'МоскваСанкт-ПетербургНовосибирск'
print %population; # Будет выведено: 'Петербург4661Новосибирск1426
?Москва10383'
По умолчанию вывод данных осуществляется «сплошным текстом» без каких бы то ни было разделителей. Однако при помощи служебной переменной $, мы можем указать интерпретатору Perl использовать в качестве разделителя любую последовательность символов.
$, = ', ';
print @cities; # Будет выведено: 'Москва, Санкт-Петербург, Новосибирск'
При необходимости мы можем работать только с ключами или только со значениями ассоциативного массива. Так, функция keys() возвращает множество всех ключей хэша, а функция values() — множество его значений:
$, = ', ';
print keys(%population); # Будет выведено: 'Петербург, Новосибирск,
? Москва'
print values(%population); # Будет выведено: '4661, 1426, 10383'
Множества всех ключей и всех значений хэша фактически являются, как вы понимаете, массивами.


© 2008-2018 ОптимизацияВебСайтов.ру


Любое использование текстового и графического контента сайта без активной ссылки на источник не доскается.