#!/usr/bin/perl
sub urldecode{
local($val)=@_;
$val=~s/\+/ /g;
$val=~s/%([0-9A-H]{2})/pack('C',hex($1))/ge;
return $val;
}
Это одна из самых важных функций, которая встречается практически в каждом скрипте. Она переводит строку запроса из закодированного для передачи в URL формата в обычный. Подробнее о URL формате в справочных материалах. Реализовано при помощи оператора подстановки: сначала в строке все плюсы заменяем на пробелы, а затем раскодируем все символы, записанные в шестнадцетиричном коде.
print "Content-Type: text/html\n\n";
print " <HTML> <HEAD> <TITLE>CGI-Vraiables </TITLE> </HEAD>\n";
print " <BODY>\n";
Это необходимая "головная" часть генерируемой страницы.
print "Ваш запрос: $ENV{'REQUEST_STRING'} <BR>\n";
print "Декодированный запрос: ";
print "&urldecode($ENV{'REQUEST_STRING'})";
Под параметры в Perl выделяется специальный хэш %ENV, в котором ключами являются имена переменных, а данными их значения. Таким образом, эта часть программы выводит строку запроса и ее же декодированную при помощи функции urldecode.
print " <BR>\n";
print " <HR>\n";
print "Переменные CGI: <BR>\n";
print " <B>REQUEST_METHOD </B>=$ENV{'REQUEST_METHOD'} <BR>\n";
print " <B>QUERY_STRING </B>=$ENV{'QUERY_STRING'}
\n";
print " <B>CONTENT_LENGTH </B>=$ENV{'CONTENT_LENGTH'}
\n";
print " <B>GATEWAY_INTERFACE </B>=$ENV{'GATEWAY_INTERFACE'} <BR>\n";
print " <B>REMOTE_ADDR </B>=$ENV{'REMOTE_ADDR'} <BR>\n";
print " <B>REMOTE_HOST </B>=$ENV{'REMOTE_HOST'} <BR>\n";
print " <B>SCRIPT_NAME </B>=$ENV{'SCRIPT_NAME'} <BR>\n";
print " <B>SCRIPT_FILENAME </B>=$ENV{'SCRIPT_FILENAME'} <BR>\n";
print " <B>SERVER_NAME </B>=$ENV{'SERVER_NAME'} <BR>\n";
print " <B>SERVER_PORT </B>=$ENV{'SERVER_PORT'} <BR>\n";
print " <B>SERVER_PROTOCOL </B>=$ENV{'SERVER_PROTOCOL'} <BR>\n";
print " <B>SERVER_SOFTWARE </B>=$ENV{'SERVER_SOFTWARE'} <BR>\n";
print " <B>HTTP_ACCEPT </B>=$ENV{'HTTP_ACCEPT'} <BR>\n";
print " <B>HTTP_USER_AGENT </B>=$ENV{'HTTP_USER_AGENT'} <BR>\n";
print " <B>HTTP_HOST=$ENV{'HTTP_HOST'} <BR>\n";
print " <HR>\n";
Эта часть прграммы выводит основные переменные окружения.
print "Все переменные среды: <BR>\n"
foreach $env_var (keys %ENV) {
print " <I>$env_var=$ENV{$env_var} </I> <BR>\n";
}
А этот цикл проходит весь хэш и выводит значения всех параметров.
print " </BODY> </HTML>\n";
И, наконец, заканчиваем документ.
Как это работает можно посмотреть здесь.