Язык программирования Perl
Язык программирования Perl читать книгу онлайн
Курс знакомит с языком программирования Perl, с его принципами, основными возможностями и особенностями в объёме, достаточном, чтобы начать разрабатывать прикладные и системные задачи, включая программирование для сети Интернет.
Курс является достаточно подробным введением в язык программирования Perl. Описывается уникальная культура Perl и особенности, отличающие его от других языков программирования и во многом обусловившие его популярность. Рассматриваются основные средства программирования на языке Perl версии 5.8. Разбираются богатые возможности языка для создания самых разных приложений, а также особый стиль программирования на Perl. Курс ориентирован на студентов, начинающих программистов или разработчиков, применяющих другие языки и желающих писать прикладные или системные программы на Perl.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
$date_and_time = localtime;
($sec, $min, $hour, # секунды, минуты, часы
$mday, $mon, $year, # день, месяц, год,
$wday, $yday, $isdst) # день недели, день года, часовая зона
= localtime;
В состав списочного литерала могут входить массивы и другие списочные литералы - тогда они заменяются списком своих значений. Но результирующий массив будет одномерным, так как вложенные списки в Perl не предусмотрены. Массивы массивов организуются с помощью ссылок, что будет изучено в лекции 11. Вот примеры такой инициализации массива:
@small = (3, 4, 5); # этот массив будет вставлен в список
@big = (1, 2, @small, 6 .. 9); # то же, что @big = (1 .. 9);
@big = ((1, 2), (3 .. 5), (6 .. 9)); # то же, что и выше
С помощью списка можно легко добавить новые элементы в начало или в конец существующего массива:
@array = ($new_element, @array); # добавить элемент в начало
@array = (@array, $new_element); # добавить элемент в конец
@all = (@first, @second); # объединить два массива в один
Присваивая массив списочному литералу, можно извлечь начальные элементы из массива в скалярные переменные, поместив оставшиеся элементы в исходный массив:
($element1, @array) = @array; # извлечь элемент из начала
Массив в левой части присваивания имеет смысл ставить только в конце списка, поскольку он поглощает все значения, и стоящие после него переменные получат неопределенные значения:
(@array,$a,$b) = (1,2,3,4,5); # все 5 чисел попадут в @array
Элементы массива - это скалярные величины, доступ к которым происходит по их порядковому номеру (индексу). Поскольку элемент массива - это скаляр, то его обозначение состоит из разыменовывающего префикса $ перед именем массива, за которым в квадратных скобках стоит индекс. Индексы элементов массива задаются целыми числами, начиная с нуля. (Номер начального индекса массивов раньше мог задаваться значением специальной переменной $[, но сейчас эта возможность считается устаревшей, поэтому поступать так не рекомендуется.) Вот так выглядит в программе обращение к элементам массива:
@array # переменная-массив, хранящая список
$array[0] # первый элемент массива с индексом 0
$array[1] # второй элемент массива с индексом 1
$array[$i] # i-й элемент массива, считая с 0
$array # скаляр, не имеющий отношения к массиву @array
Если требуется обращаться к элементам массива, начиная с последнего, то используются отрицательные значения индексов:
$array[-1] # последний элемент, то есть 1-й от конца
$array[-2] # предпоследний элемент, то есть 2-й от конца
$array[-$n] # n-й элемент массива, считая с конца
Индекс последнего элемента массива, который всегда на единицу меньше размера массива, можно узнать, указав специальный префикс $# перед именем массива:
$last_index = $#array; # индекс последнего элемента @array
Так, например, можно выбрать элемент массива с помощью встроенного генератора случайных чисел rand, который возвращает дробное число от 0 до числа, указанного ему в качестве аргумента. Ограничим случайные числа номером последнего индекса в массиве и будем округлять их до целых значений функцией int:
$random_element = $array[int(rand($#array))];
В $#array можно присвоить новое значение последнего индекса, при этом размер массива изменится. Но такое действие обычно не требуется, так как массив при необходимости увеличивается автоматически. Размер массива в Perl не ограничивается, то есть массив может занимать всю отведенную программе память.
В операции присваивания отдельные элементы массива рассматриваются как обычные скаляры. Ниже приведены примеры, по-разному выполняющие одно и то же присваивание элементам массива:
$birthday[0] = 18; $birthday[1] = 12; $birthday[2] = 1987;
($birthday[0], $birthday[1], $birthday[2]) = (18, 12, 1987);
(Хотя более естественно для подобного присваивания воспользоваться срезом массива: @birthday[0, 1, 2] = (18, 12, 1987), но о срезах пойдет речь чуть позже в этой лекции.)
Если попытаться присвоить значение элементу с индексом больше текущего размера массива, массив автоматически увеличивается до необходимой длины, а добавленные элементы получают неопределенное значение:
$birthday[5] = 'Perl'; # размер @birthday теперь 5
# значение $birthday[3] и $birthday[4] не определено
При попытке обратиться к элементу массива с несуществующим индексом будет возвращено неопределенное значение, но ошибки во время выполнения программы не возникнет.
$array[$#array+100] # неопределенно
При использовании в качестве индекса массива дробного числа будет взята его целая часть, то есть $array[3.5] рассматривается как $array[3].
Часто требуется последовательно перебрать все элементы массива, от первого до последнего, для обработки или вывода их значений. Это можно сделать вполне традиционным образом, с помощью цикла for, как это записывается в языках C или Java, а именно:
for (my $i = 0; $i < scalar @array; $i++) {
print "$array[$i] ";
}
Perl предлагает для подобных действий более удобный способ с использованием цикла foreach, в котором все элементы массива поочередно совмещаются с указанной скалярной переменной. Эта переменная на время выполнения цикла становится синонимом очередного элемента массива, поэтому ее значение доступно не только для чтения, но и для изменения. Только что приведенный пример можно переписать так:
foreach my $element (@array) { # $element это синоним
print "$element "; # очередного элемента $array[$i]