Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Документация, учебники по Perl.doc
Скачиваний:
3
Добавлен:
29.10.2018
Размер:
1.83 Mб
Скачать

Строковые данные

Данные, содержащие строку символов, называют строковыми (или стрингами). Простейшие примеры:

$name='Roman'; $town="Moscow"; $country=Russia;

Обратите внимание на последний пример. В нем отсутствуют кавычки, но это не ошибка. Perl позволяет их не писать, но при запуске такого скрипта с ключом -w вы получите предупреждение о том, что 'возможно совпадение с именем функции в будущих версиях'. Это значит, что если в Perl появится функция Russia, то в $country будет занесено значение, которое она (функция) вернет, а не строчка Russia. Отсюда правило: лучше кавычки или апострофы указывать, это позволит избежать лишних предупреждений и возможных ошибок.

Уместно будет напомнить, что все, что находится в кавычках, подлежит преобразованию, т. е. замене имен переменных на их значения, \n (и подобных) на соответствующие спецсимволы.

Списки значений и массивы

Список - это несколько скалярных величин. Массив - переменная, которая содержит этот список. Для обозначения массивов используют символ '@'.

@names = ('Москва', 'Екатеринбург', 'Питер'); # заносит три имени в массив @digits = (0..9); # 0,1,2,3,4...9

Как видите, при помощи оператора '..' можно включать сразу несколько величин. Для доступа к элементам массива используется индекс в квадратных скобках. Первый элемент массива имеет номер 0. И самое главное! Если вам нужен один элемент, то имя должно начинаться на '$', обозначая скалярную величину. Впрочем, лучшее объяснение - это примеры:

@names = ('Москва', 'Екатеринбург', 'Питер'); # заносит три имени в массив @digits = (0..9); # 0,1,2,3,4...9 @names2 = (@names,'Киев'); # теперь у нас массив из 4 имен print $names2[1]' # Perl заметьте, использует знак '$' @somedigits=@digits[1..3,6,7..9]; # теперь у нас 1,2,3,6,7,8,9 # ведь первый элемент - нулевой индекс print @somedigits; # распечатаем... # 1236789 $,=" "; # установим разделитель print @somedigits; # распечатаем более красиво # 1 2 3 6 7 8 9

В этом примере использовалась предопределенная переменная '$,'. Значение, занесенное в нее, будет разделителем при печати. Это особенно удобно в нашем случае, т. к. в функцию print передается несколько значений.

Хеши

Хеши (Hash) являются одной из самых удачных находок языка Perl и применяются в программах чрезвычайно широко. Более того, они почти не имеют аналогов в других языках программирования. Что же это такое? Хеш представляет собой набор пар "ключ-значение". При этом как ключ, так и значение могут иметь любой тип: числовой, строковый и т. д. Ключ используется для доступа к значению.

При обращении к значению, соответствующему неизвестному ключу, возвращается значение undef.

Примеры работы с хэшем:

Действие

Синтаксис

Объявление переменной типа хэш

%MyHash;

Присвоение значения ключу.

Если заданный ключ отсутствует, создается новая пара

$MyHash{‘NewKey’}=$NewValue;

Изменение значения

$MyHash{‘NewKey’}+=3;

Чтение значения

$Result=$MyHash{‘NewKey’};

Файловый ввод/вывод. Простейший счетчик посещений

Практически ни один сценарий не может обойтись без операций ввода/вывода. В настоящем примере рассмотрены основные принципы осуществления этой операции на языке Perl. При работе с Perl надо учитывать, что он ведет свое происхождение от Unix и несет отчетливый отпечаток ее идеологии. Это ярко проявляется в подходе к операциям файлового ввода/вывода как к операциям с потоками.

Начнем с создания и открытия файлов. Обе эти операции осуществляются одной и той же функцией - open. В простейшем случае ее вызов выглядит так:

open("Имя потока", "имя файла");

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

Первое, что обращает на себя внимание, - отсутствие указания в явном виде на то, для какой именно цели файл открывается. Так, если файл уже существует, должен ли он быть очищен или нет. Можно в этот файл записывать информацию, или он предназначен только для чтения? Естественно, при использовании функции open все это на самом деле указывается, но в виде символов, добавляемых перед именем файла. Для этого применяются всего три символа, причем некоторые могут комбинироваться между собой.

Когда файл открыт, вывод из него выполняется крайне просто - присвоением переменной значения. Еще раз напомним, что язык Perl определяет типы данных самостоятельно. На практике такой способ чтения данных эквивалентен простому чтению строки. Несколько строк за один вызов прочитать нельзя (хотя в принципе можно присвоить переменной все содержимое файла). Поэтому приходится выполнять чтение в цикле. Впрочем, в простейшем счетчике нам достаточно прочитать только одну строку.

Наконец настало время посмотреть на текст программы простейшего счетчика посещений. Первая строка программы - обязательный комментарий, указывающий путь к интерпретатору Perl. Понятно, что в зависимости от его реального расположения на диске она может меняться.

То, что приведено здесь, является настолько упрощенным вариантом, что его даже нельзя назвать счетчиком посещений. Это только счетчик показов страницы. Так, он будет срабатывать при любой перезагрузке страницы, даже если она выполняется одним и тем же пользователем, причем непрерывно. Кроме того, поскольку этот счетчик работает с фиксированным именем файла, его нельзя установить на несколько страниц сразу.

Текст программы счетчика

#!/usr/bin/perl

#Простейший счетчик. При каждом вызове увеличивает

#значение, хранящееся в файле с именем count.cnt

#на единицу и возвращает новое значение.

#Авторы — Леонид Садофьев, Лариса Работнова

$counterfile="count.cnt";

#имя файла, содержащего значение счетчика

unless (open(COUNTER,"+<$counterfile"))

#если не удалось открыть файл

{

$counter=0;

#обнуляем значение счетчика

}

else

#если файл открыт успешно,

{

$counter=<COUNTER>;

#читаем значение счетчика

#(кстати, именно так и читается весь файл)

}

close(COUNTER);

#закрываем файл

$counter=$counter+1;

#увеличиваем счетчик на единицу

open(COUNTER,"+>$counterfile");

#открываем файл со сбросом содержимого

print COUNTER $counter;

#записываем новое значение счетчика

close (COUNTER);

#закрываем файл

print "Content-type: text/html\n\n";

#вот так должен начинаться ответ CGI-сценария.

#Пустая строка — обязательна

print <<EOF

#Теперь можно генерировать HTML страницу

<html>

<head>

<title>Counter value</title>

</head>

<BODY>

<center>

<br>

$counter

<br>

</body>

</html>

Счетчик может быть вызван через директиву включения типа

<!—#include virtual="cgi-bin/visitor.cgi"—> или

с помощью тэга HTML image src.

(Или <!—#exec cgi=.... — >) Естественно, на вашем

сервере счетчик может быть размещен в другом каталоге,

а не только в cgi-bin.

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

   В книге приводятся начальные сведения по новому языку программирования Perl. Данный язык получил широкое распространение в связи с развитием компьютерной сети Интернет. Все примеры в книге проверены для Perl версии 5.003 операционной системы Unix FreeBSD 2.1.0. Для программистов, системных администраторов и пользователей компьютеров.

(C) Маслов Владимир Викторович.