Список лучших игроков
Затем данные из 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);