Скрипт CGI, отображающий переменные окружения.
Ниже приведён пример скрипта, который выводит имена и значения переменных окружения.
Напомним: Perl хранит все доступные ему переменные окружения в хэше (ассоциативный массив) %ENV. Ключи %ENV - это имена переменных окружения, а соответствующие им значения - текущие значения этих переменных.
Код скрипта:
Давайте теперь подробно распишем как он работает. Для начала пронумеруем строки:
01: #!/usr/bin/perl -wT
02: $|=1;
03: print "Content-type: text/html\n\n";
04: print <<HTML;
05: <HTML>
06: <HEAD>
07: <TITLE>Окружение сервера</TITLE>
08: </HEAD>
09: <CENTER><H2>Окружение сервера</H2></CENTER>
10: <BODY>
11: HTML
12: print qq($_ - $ENV{$_}<BR>) for sort keys %ENV;
13: print qq(
14: </BODY>
15: </HTML>
16: );
Теперь рассмотрим каждую строчку:
- Строка 1
- Обычная строка с указанием пути к интерпретатору и переключателей. Здесь мы включаем предупреждения переключателем -w. Хотя переключатель -w для этого скрипта не очень нужен, его использование - просто хорошая традиция. По этой же традиции включена проверка на загрязнение (переключатель -T). Гораздо лучше и безопаснее установить в самом начале максимум защиты и предупреждений, а затем, после проверки, ослабить защиту, где это возможно. Вообще, в CGI рекомендуется устанавливать столько мер безопасности, сколько возможно.
- Строка 2
- Производит автосброс буфера, так что мы можем увидеть результаты сразу после получения.
- Строка 3
- Выводит в Web-клиент информацию заголовка. Благодаря этому клиент будет ожидать файл, содержащий текст в формате HTML.
- Строка 4
- Начинает включённый документ с разделителя HTML.
- Строки 5-10
- Строки HTML, выводимые во включённом документе.
- Строка 11
- Признак конца включённого документа. Запомните, что он должен стоять в начале строки и в отдельной строке.
- Строка 12
- Сам механизм скрипта. Здесь выводятся все пары ключей и значений, содержащихся в
%ENV. Эти пары перечисляются в алфавитном порядке для удобства чтения. - Строки 13-16
- Оператор print(), который закрывает дескрипторы HTML <BODY> и <HTML>.