Сегодня наши программки обретут интерактивность, в какой-то степени. В Perl есть переменные имеющие специальное значение. Многие из них доступны только для чтения, то есть при попытке присвоения такой переменной какого-либо значения происходит ошибка. Значение некоторых из них вы поймёте и оцените позже, а пока давайте рассмотрим их по порядку.
$_ В эту переменную по умолчанию происходит ввод, присваивание, в нее складываются результаты поиска по заданному образцу.
$. Эта переменная содержит номер строки, которая была почитана последней из файла, который был прочитан последним. Она также доступна только для чтения.
$/ Содержит символ, по которому разделяются вводимые записи. По умолчанию содержит символ перевода строки.
$| По умолчанию имеет значение 0. Если содержит ненулевое значение, то происходит сброс буферов каждый раз после осуществления вывода (на печать, на экран и т.д.).
$, Содержит символ-разделитель полей для оператора печати.
$ Содержит символ-разделитель записей для оператора печати. Вы можете определить $ вместо того, чтобы печатать \n в конце печати.
$" Подобна переменной $,. Но используется при обращении к списку величин в двойных кавычках (или другой строке, которая требует интерпретации). По умолчанию содержит символ пробел.
$; Содержит символ-разделитель для эмуляции многомерных хэшей (по умолчанию - \034).
$# Формат для печати чисел. Первоначально содержит значение %.20g.
$% Содержит номер текущей выводимой страницы.
$= Содержит длину текущей страницы (количество печатных срок), обычно содержит значение 60.
$- Содержит значение, определяющее количество оставшихся на странице строк, например количество еще не напечатанных строк для печатного канала вывода.
$~ Содержит имя текущего формата сообщений. Обычно имя дескриптора файла.
$^ Содержит имя текущего формата заголовка страницы. Обычно содержит имя дескриптора файла с добавлением в конце _TOP.
$: Содержит множество символов после которых вывод сроки может быть прерван и начат снова после перевода строки.
$! Если эта переменная используется в числовом контексте, то содержит текущее значение errno (номер ошибки) со всеми обычными сообщениями. В строковом контексте содержит соответствующее системное сообщение об ошибке.
$@ Содержит сообщение о синтаксической ошибке, допущенной во время исполнения последней команды eval(). Если содержит значение 0, то команда была исполнена корректно.
$$ Содержит идентификатор текущего процесса.
$< Содержит идентификатор пользователя (UID), которому принадлежит текущий процесс.
$> Содержит эффективный UID текущего процесса.
$( Содержит идентификатор группы (GID) пользователя, которому принадлежит текущий процесс.
$) Содержит эффективный GID текущего процесса.
$0 Содержит имя файла, в котором находится исполняемая программа.
$ARGV Содержит имя текущего файла, из которого происходит чтение.
@ARGV Содержит массив аргументов командной строки, которые были переданы программе.
@INC Содержит список точек входа в программу, в которых используются конструкции do, require и use.
%INC Содержит входы для каждого файла, который включается посредством использования операторов do или require. Ключами являются имена файлов, а значениями места их расположения.
%ENV Содержит текущее окружение процесса. Изменением содержимого хэша можно изменить окружение порожденного (дочернего) процесса.
%SIG Этот хэш используется для установки обработчиков различных сигналов.
Пока сильно не заморачивайтесь. Вам ещё предстоит не раз столкнуться с каждой из этих переменных. А на примерах легче понимается. Переменные $$, $<, $>, $(, $) под виндой нам не нужны вообще. А интересны нам - $_, $., @ARGV, %ENV, %SIG, $!, $@. Внимательный читатель уже заметил, встречавшиеся нам ещё в 4-ом шаге, переменные $_ и %ENV. Так вот, хэш %ENV содержит в себе переменные окружения. Попробуйте выполнить print $ENV{'PATH'} и он выведет вам переменную окружения PATH. У сервера есть свои переменные окружения, например, REMOTE_ADDR. Она содержит IP адрес, подключившегося к серверу хоста. Без переменной $_ можно бы было обойтись в примере из 4-го шага, если переписать его так
#!/usr/bin/perl -w print "Content-Type: text/plain\n\n"; foreach $key (keys(%ENV)) { $val = $ENV{$key}; print "$key=\"$val\"\n"; }
Не указав в цикле foreach (о нём мы поговорим в следующем шаге) переменную для присваивания результата работы функции keys(%ENV), мы фактически сказали Perl присваивать результат переменной по умолчанию - $_. Эта переменная очень удобна и часто поволяет упростить программу, в чём вы ещё не раз убедитесь.
А теперь о @ARGV и "интерактивности". Один из методов управления работой программы - это параметры передаваемые ей в командной строке при запуске. Все они хранятся в массиве @ARGV. print $ARGV[0] выведет вам первый параметр, если он есть.
Для этого шага, пожалуй, всё. До встречи в следующем.