Приглашаем посетить
Иванов В.И. (ivanov.lit-info.ru)

Perl, который оценят все.

Хеши

Хеши (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 можно создать множество других полезных программок. Не останавливайтесь на приведенных примерах, попробуйте что-нибудь свое, посмотрите рекомендованные книги, и вы увидите, как велики возможности этого замечательного языка программирования.

Назад | Оглавление