Приглашаем посетить
Культурология (cult-lib.ru)

Шаг 5 - Типы данных и переменных

Шаг 5 - Типы данных и переменных

Полночь. Самое время сесть за комп :) Приступим.

Для начала мы познакомимся с функцией printf. Это тоже функция вывода, как и print, но выводит она форматированые данные. Пример:

#!/usr/bin/perl -w
printf("Десятичное:%d\nСимвол:%c\nШестнадцетиричное:%x\nВосьмиричное:%o\nДвоичное:%b", 12,12,12,12,12);

Первым параметром этой функции служит шаблон. В шаблоне символом % задаётся формат вывода:

Как видите число 12 было представлено во всех этих видах.

В Perl нет специальной формы определения типа данных как в Си. В языке Perl данные могут быть числом или строкой символов. И в зависимости от контекста они свободно конвертируются интерпретатором из одной формы в другую. Числа в Perl могут быть:

Истиным Perl считает любое число не равное 0. Строковое значение рассматривается как истинное, если оно не пустое "" или не '0'.

Perl поддерживает три типа переменных: скаляры, массивы и ассоциативные массивы. Как и в языке C, имена переменных пишутся с различением строчных и заглавных букв. Таким образом, имена VAR, Var и var описывают различные переменные. Скрипт может иметь скалярную переменную под именем var и переменную-массив, также названную var. Они будут различаться в языке Perl в соответствии с контекстом. В Perl нет специального оператора объявления переменной, она определяется при первом ее использовании. Переменные можно определять как глобальные (видимые из любой точки программы), так и с помощью функции my как локальные (видимые в определенной части программы - блоке). Для того, чтобы объявить переменную глобальной достаточно её просто не объявить :) В языке Perl имена скалярных переменных всегда начинаются со знака доллара ($). Скаляр может хранить как число ($var = 666), так и строку ($var = "Вася Пупкин - ламер!"). Имена массивов начинаются со знака @. Заполнить массив можно так: @days = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat'). А получить доступ к элементу массива так: $days[2]. Можно обратится и к части массива: @weekdays = @days[1..5]. Или к нескольким элементам сразу: @weekend = @days[0,6]. Как и во многих других языках программирования, нумерация элементов массива начинается с нуля. Мы этого всего ещё коснёмся глубже, но позже. На примерах потом будет понятнее. А пока рассмотрим последний тип переменных - ассоциативный массив или хэш.

Программка из предыдущего шага выбирала нам из хэша переменные окружения. Хэши аналогичны обычным массивам в том отношении, что они представляют собой список скалярных переменных. Различие состоит в том, что любой хэш состоит из пар "ключ-значение". Зная имя ключа, можно получить его значение. Пример из жизни: зная фамилию человека, можно найти в телефоном справочнике его номер. Посмотрите ещё раз как это делала программка из предыдущего шага...

Имена ассоциативных массивов начинаются со знака (%), а обращение к элементам происходит так... Давайте лучше на примере :)

%phones; 				#объявляем хэш-телефонный справочник
$phones{'Пожарная служба'} = "01";	#Присваиваем элементу Пожарная служба значение 01
$phones{'Отделение милиции'} = "02";
$phones{'Скорая помощь'} = "03";

Теперь мы можем получить номер отделения милиции следующим образом - $phones{'Отделение милиции'}. Хэш может быть декларирован напрямую как список пар ключ-значение:

%phones = ("Пожарная служба", "01",
	"Отделение милиции", "02",
	"Скорая помощь", "03");

Думаю нам полезно будет рассмотреть некоторые функции работы с хэшами:

Есть ещё незнакомые моменты в printenv.pl, но уже многое прояснилось :) Ещё больше прояснится в следующем шаге. И напоследок обещаное объяснение различий между двойными и одинарными кавычками. В строки, ограниченые двойными кавычками, Perl вставляет переменные и спецсимволы, а всё, что в одинарных расценивается как "строка-константа". Т.е. если вы напишите так:

$part = "не";
print "Я $part хочу знать Perl!\n";

Будет выведенно "Я не хочу знать Perl!". А если напишите так:

$part = "не";
print 'Я $part хочу знать Perl!\n';

Будет выведенно "Я $part хочу знать Perl!\n".

З.Ы. Забыл вот ещё о чём: у переменной может быть ещё одно состояние - undef, или если по русски - неопределена. В Perl неопределенные(undefined) переменные трактуются как ложные. Для проверки "определённости" переменной даже функция специальная есть - defined(). Эта функция принимает параметром переменную, и если она определена, то возвращает 1, в противном случае 0.


Предыдущий Шаг | Следующий Шаг | Оглавление