Список лучших игроков
Затем данные из Flash-ролика передаются в программу, где для их временного хранения используется переменная $get_data:
#Получаем переданные данные.
$get_data
=
$ENV{
'QUERY_STRING'
};
Когда данные пересылаются через сеть, они обычно кодируются таким образом, чтобы не допустить их некорректную передачу. Буквы не кодируются в отличие от пробелов, которые передаются как знак "+", и небуквенно-цифровых символов, передающихся как символьные последовательности, например:
%OA
Чтобы раскодировать данные, необходимо дополнить программу следующими строками:
#Преобразуем закодированные символы.
$get_data
=
~ s
/
%
([\dA
-
Fa
-
f][\dA
-
Fa
-
f])
/
pack (
"C"
,hex($l))
/
eg; #get_data
=
~ tr
/
\
+
/
/
;
Далее нужно получить текущее время, измеренное на Unix-сервере в секундах, прошедших с 01.01.1970. Эти данные вы будете использовать как то время, когда был получен результат. Лучше оперировать именно этим показателем, а не временем, которое показывает сам Flash-ролик: игроки могут находиться в разных часовых поясах, а у некоторых из них может быть неправильно установлено время на их компьютерах.
# Вносим в базу данных время, оказываемое сервером, в секундах.
$server_time
=
time();
Следующий шаг – организация цикла, который берет последовательность символов, хранящуюся в переменной $get_data, и разделяет ее на части. Например, такая последовательность имеет вид: name=Gary&score=967. Она разделяется на два элемента: до и после символа &, а затем каждый из этих элементов подразделяется еще на два – на ключ и на значение, теперь уже благодаря символу =.
# Обрабатываем полученные данные и создаем массив.
@split_data
=
split(
"&"
,$get_data);
foreach $data_item (@split_data)
{
($key, $value)
=
split(
"="
,$data_item)
$info{$key}
=
Svalue;
}
Текстовой базой данных, где хранятся лучшие результаты, служит файл Highscore.txt. Чтобы запустить этот файл, загрузите его и настройте таким образом, чтобы с помощью программ на языке Perl можно было вводить в него информацию. Для этого предназначены следующие кодовые строки:
#Определяем имя файла, который будет содержать базу данных.
$filename
=
"highscore.txt"
;
#Открываем базу данных.
open(OUTFILE,
""
$filename") || exit;
После того как файл будет открыт, программа внесет в него единичные записи, содержащие набранные очки, имя игрока и время, например:
967
&Gary&
978887513
.
#Вносим информацию в базу данных.
print OUTFILE
"$info{'score'}&$info{'name'}&$server_time\n"
;
Программа Submitscore.pl заканчивает свою работу, закрывая текстовый файл и пересылая определенную информацию во Flash. В данном случае переменной resultText присваивается символьная строка ОК.
#Закрываем базу данных.
Close(OUTFILE);
#Подтверждаем ввод данных,
print
"resultText=OK\n"
;
#Завершаем программу,
exit;
Программа Getscores.pl несколько сложнее, чем Submitscore.pl. В ее задачу входит просмотр базы данных, удаление устаревших записей и затем выдача списка десяти лучших результатов. Начало этой программы аналогично началу Submitscore.pl. Далее файл открывает базу данных и перебирает все ее записи с использованием переменной типа "массив" @score_text.
#!/usr/bin/perl
#Устанавливаем метку для текстового документа, получаемого на выходе.
print
"Content-type: text/html\n\n"
;
#Указываем имя файла, содержащего базу данных.
$filename
=
"highscore.txt"
;
#Просматриваем записи базы данных,
open(DATABASE, $filename) || exit;
@score_text
=
database;
close(DATABASE);