Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Введение в Веб программирование.doc
Скачиваний:
81
Добавлен:
07.11.2018
Размер:
4.42 Mб
Скачать

Типы данных

Perl оперирует следующими типами данных - скалярами, массивами, ассоциативными массивами (хешами). Особенностью Perl является то, что типы применяемых переменных не объявляются.

Их названия начинаются со знака $ - для скалярных переменных, @ -для массивов, % - хешей. Имена $varName и @varName различны.

Скалярные переменные могут принимать числовые и строковые значения, например

#Пример 3.3 : Вывод значений переменных

$str=”Результат:”;

$a = 2;

$b = 6;

$c = $a . $b; # ”.” — операция конкатенации двух строк

$d = $c / 2;

print $str, $d; # — результат равен 13

Будет выведено:

Результат:13

Массив — это список скаляров. Каждый элемент массива — это скалярная переменная, которой можно присваивать значение. Все массивы в языке Perl— динамические. О проблемах распределения памяти заботится интерпретатор. Рассмотрим пример:

#Ghbvth 3.4 : Вывод значений массивов

@emptyArray = ();

@numberArray = (12, 014, 0x0c, 34.34, 23.3E-3);

@stringArray = ("This", "is", 'an', "array", 'of', "strings");

@mixedArray = ("This ", 10, " is ", 'a', " mixed array ", ' of ', " items");

print "Here is an empty array:" . @emptyArray ."\n";

print @numberArray; print "\n";

print @stringArray; print "\n";

print @mixedArray; print "\n";

Будет выведено:

Here is an empty array:0

12121234.340.0233

Thisisanarrayofstrings

This 10 is a mixed array of items

Здесь символ "\n" выводится отдельно от массива. Если вместо этого использовать контактенацию и вывести print @numberArray . "\n";, то Perl истолкует @numberArray в скалярном контексте и выведет не элементы массива, а их число. Так и происходит вывод массива @emptyArray, в результате чего выводится число элементов 0.

В следующем примере массив используется в скалярном контексте в котором значением массива является число элементов.

@array = (1..5);

$numberOfElements = @array;

$doubleTheSize = 2 * @array;

print "The number of array elements is: " . $numberOfElements . "\n";

print "Double the number of array elements is: " . $doubleTheSize . "\n";

Будет выведено:

The number of array elements is: 5

Double the number of array elements is:10

Два массива можно объединить в одном:

@smallArrayOne = (5..10);

@smallArrayTwo = (1..5);

@largeArray = (@smallArrayOne, @smallArrayTwo);

print @largeArray;

Будет выведено:

123455678910

Как и в C++, нумерация элементов массива начинается с нуля, однако здесь можно использовать отрицательные индексы, чтобы вести отсчет от конца массива. Например:

@array = (1..5);

print @array; print "\n";

print $array[-1]; print $array[-2];

print $array[-3]; print $array[-4];

print $array[-5]; print "\n";

Будет выведено:

12345

54321

Можно использовать подмассивы данного массива:

@array = ("One", "Two", "Three", "Four");

($first, $third) = @array[0, 2];

@half = @array[2, 3];

print("\@array=@array\n");

print("\$first=$first \$third=$third\n");

print("\@half=@half\n");

@array[0, 3] = @array[3, 0];

print("\@array=@array\n");

Будет выведено:

@array=One Two Three Four

$first=One $third=Three

@half=Three Four

@array=Four Two Three One

В отличие от других языков программирования, в массиве на Perl можно объединять скаляры разных типов данных. В следующем примере массивы объединяются в результирующий массив.

@A=(1,2,3);

@B = (4, 5, 6);

@C = (7, 8, 9);

@D = (@A, @B, @C);

print @D;

Результирующий массив D будет содержать числовые значения от 1 до 9

Встроенная функция qw() используется для объединения нескольких скалярных значений в массив например:

@passwords = qw(pas1 pas2 pas3);

Проведя такую операцию, затем можно обращаться к каждому из скаляров с помощью индексных ссылок. В рассматриваемом примере $passwords[0] имеет значение pas1, $passwords[1] — pas2, а $passwords[2] —pas3.

Вcтроенная функция sort(() использует массивы как аргументы и возвращает массив, в отсортированном виде. Результатом операции print sort(‘Beta’,’Gamma’,’Alpha’); будет последовательность AlphaBetaGamma. Функция join() имеет два входных параметра — строку и массив строк. Она возвращает строку, которая состоит из всех элементов массива, разделенных значением входной строки, т. е. print join (‘:’,’Name’,’Address’,’Phone’); и выдает на печать Name : Address : Phone. Функцию push() можно использовать, чтобы добавить к уже существующему массиву какой-нибудь элемент, не создавая при этом дополнительный массив. Например:

#Пример 3.10 : добавление элемента в массив

@b = (”Beta”, ”Gamma”, ”Alpha”);

push @b, ”Tetta”; # добавим в массив @b новый элемент

@w = sort @b; # отсортируем массив @b по алфавиту

$i=0; # инициализируем переменную $c

foreach (@w) {

print ”$w[$i]\n”; # выведем отсортированные значения

$i++;

}

Будет выведено:

Alpha

Beta

Gamma

Tetta

Как ранее указывалось, дескриптор <STDIN> возвращает в скалярном виде значение введенной строки. Примененный массиву, он каждому его отдельному элементу присваивает значение очередной введенной строки, пока не будет введен признак конца файла Ctrl+Z. Таким образом, если ввести три строки и операцию конца файла [Ctrl + Z], то массив будет состоять из трех элементов, которые являются строками и заканчиваются символами перехода на новую строку.

#!/usr/local/bin/perl -w

#пример3.12- ввод и вывод строк

print "Enter an array elements:";

@a =<STDIN>;

print "Array: @a \n";

Будет выведено:

Enter an array elements: aaaa<ввод>

bbbb<ввод>

cccc<ввод>

Ctrl+Z

Array: aaaa

bbbb

cccc