Perl: специальные переменные
Язык Perl определяет некоторые специальные переменные, обычно с префиксом $, @ или %, например: $_.
Многие специальные переменные имеют длинное английское имя; переменная ошибки ОС $! может быть записана как $OS_ERROR.
Если вы хотите использовать специальные переменные с английскими именами, вам нужно добавить следующее в начале программы:use English;Это позволяет использовать описательные английские имена специальных переменных.
Наиболее часто используемая специальная переменная — $_, она содержит содержимое ввода и сопоставления с шаблоном по умолчанию. Пример:
Пример
Запуск приведённой выше программы даёт следующий вывод:
Google Example Taobao
В следующем примере мы не используем $_ для вывода содержимого:
Пример
Запуск приведённой выше программы даёт следующий вывод:
Google Example Taobao
В примере сначала выводится "Google", затем выводится "Example", и наконец выводится "Taobao".
В цикле итерации текущая строка цикла помещается в $_, затем выводится через print. Кроме того, print по умолчанию использует $_, если переменная вывода не указана.
Ниже приведены случаи, когда Perl подразумевает использование $_, даже если это явно не написано:
- Различные унарные функции, включая такие функции, как ord() и int(), а также все операторы проверки файлов ("-f", "-d"), кроме "-t"; "-t" по умолчанию работает со STDIN.
- Различные списочные функции, такие как print() и unlink().
- Операции сопоставления с образцом "m//", "s///" и "tr///", когда оператор "=~" не используется.
- Переменная итерации по умолчанию для цикла "foreach", когда другая переменная не указана.
- Неявная переменная итерации для функций grep() и map().
- Когда "while" имеет только одно условие и это условие проверяет результат операции "<>", $_ является местом по умолчанию для сохранения входной записи. Это происходит только в условии проверки "while". (Мнемоника: знак подчёркивания можно опускать в некоторых операциях.)
Типы специальных переменных
В соответствии с особенностями использования специальных переменных их можно разделить на следующие категории:
Глобальные скалярные специальные переменные.
Глобальные специальные переменные-массивы.
Глобальные специальные переменные-хэши.
Глобальные специальные файловые дескрипторы.
Глобальные специальные константы.
Специальные переменные регулярных выражений.
Специальные переменные файловых дескрипторов.
Глобальные специальные скалярные переменные
Ниже перечислены все специальные скалярные переменные, включая как специальные символы, так и английские формы:
| $_ | Содержимое по умолчанию для ввода и сопоставления с шаблоном. |
| $ARG | |
| $. | Текущий номер строки последнего читавшегося файлового дескриптора. |
| $NR | |
| $/ | Разделитель входных записей, по умолчанию — символ новой строки. Если этой переменной присвоено значение undef, чтение будет продолжаться до конца файла. |
| $RS | |
| $, | Разделитель полей вывода. |
| $OFS | |
| $\ | Разделитель записей вывода. |
| $ORS | |
| $" | Эта переменная похожа на $,, но применяется при интерполяции значений массива и среза в строки в двойных кавычках (или аналогичные интерполируемые строки). По умолчанию — пробел. |
| $LIST_SEPARATOR | |
| $; | Разделитель, используемый при эмуляции многомерных массивов. По умолчанию — "\034". |
| $SUBSCRIPT_SEPARATOR | |
| $^L | Символ перевода страницы, отправляемый в канал вывода. По умолчанию — "\f". |
| $FORMAT_FORMFEED | |
| $: | Текущий набор символов, после которых строка может быть разорвана для заполнения полей продолжения (начинающихся с ^) в формате. По умолчанию — "\n"". |
| $FORMAT_LINE_BREAK_CHARACTERS | |
| $^A | Переменная, используемая для хранения форматированных данных перед печатью. |
| $ACCUMULATOR | |
| $# | Формат вывода чисел по умолчанию при печати чисел (устаревший). |
| $OFMT | |
| $? | Возвращает статус последней внешней команды. |
| $CHILD_ERROR | |
| $! | Числовое значение этой переменной — это значение errno, а строковое значение — соответствующая системная строка ошибки. |
| $OS_ERROR или $ERRNO | |
| $@ | Сообщение об ошибке от команды eval. Если пусто, это означает, что последняя команда eval выполнилась успешно. |
| $EVAL_ERROR | |
| $$ | Номер процесса текущего выполняемого Perl-скрипта. |
| $PROCESS_ID или $PID | |
| $< | Реальный идентификатор пользователя текущего процесса. |
| $REAL_USER_ID или $UID | |
| $> | Эффективный идентификатор пользователя текущего процесса. |
| $EFFECTIVE_USER_ID или $EUID | |
| $( | Реальный идентификатор группы текущего процесса. |
| $REAL_GROUP_ID или $GID | |
| $) | Эффективный идентификатор группы текущего процесса. |
| $EFFECTIVE_GROUP_ID или $EGID | |
| $0 | Содержит имя файла выполняемого скрипта. |
| $PROGRAM_NAME | |
| $[ | Индекс первого элемента массива, по умолчанию равен 0. |
| $] | Номер версии Perl. |
| $PERL_VERSION | |
| $^D | Значение флага отладки. |
| $DEBUGGING | |
| $^E | Расширенная информация об ошибках операционной системы в средах, отличных от UNIX. |
| $EXTENDED_OS_ERROR | |
| $^F | Максимальный номер файлового дескриптора. |
| $SYSTEM_FD_MAX | |
| $^H | Статус проверки синтаксиса, активированный компилятором. |
| $^I | Значение встроенного управляющего редактора. |
| $INPLACE_EDIT | |
| $^M | Размер альтернативного пула памяти. |
| $^O | Имя операционной системы. |
| $OSNAME | |
| $^P | Внутренняя переменная, задающая текущее значение отладки. |
| $PERLDB | |
| $^T | Время начала выполнения скрипта в секундах, отсчитываемое от начала нового века. |
| $BASETIME | |
| $^W | Текущее значение переключателя предупреждений. |
| $WARNING | |
| $^X | Имя исполняемого двоичного файла Perl. |
| $EXECUTABLE_NAME | |
| $ARGV | Текущее имя файла при чтении из файлового дескриптора по умолчанию. |
Специальные переменные глобальных массивов
| @ARGV | Список аргументов командной строки, переданных скрипту. |
| @INC | Список каталогов для поиска при импорте модулей. |
| @F | Массив входных данных командной строки. |
Глобальные специальные хеш-переменные
|
%INC |
Хеш %INC содержит все файлы, включённые с помощью операторов do или require. Ключ — имя файла, а значение — путь к файлу. |
%ENV |
Содержит текущие переменные окружения. |
%SIG |
Список сигналов и способы их обработки. |
Глобальные специальные файловые дескрипторы
ARGV |
Специальный файловый дескриптор, который перебирает все имена файлов в переменной-массиве @ARGV. |
STDERR |
Дескриптор стандартного вывода ошибок. |
STDIN |
Дескриптор стандартного ввода. |
STDOUT |
Дескриптор стандартного вывода. |
DATA |
Специальный файловый дескриптор ссылается на любое содержимое после маркера __END__ в файле, включая содержимое скрипта. Или он ссылается на всё содержимое после маркера __DATA__ в файле; __DATA__ существует до тех пор, пока вы читаете данные в том же пакете. |
_ (подчёркивание) |
Специальный файловый дескриптор, используемый для кэширования информации о файле (fstat, stat и lstat). |
Глобальные специальные константы
__END__ |
Логический конец скрипта; следующий текст игнорируется. |
__FILE__ |
Текущее имя файла. |
__LINE__ |
Текущий номер строки. |
__PACKAGE__ |
Имя текущего пакета; имя пакета по умолчанию — main. |
Специальные переменные регулярных выражений
$n |
Содержит n-ю подстроку последнего совпадения с шаблоном. |
$& |
Строка предыдущего успешного совпадения с шаблоном. |
$MATCH |
|
$` |
Содержимое перед подстрокой предыдущего успешного совпадения. |
$PREMATCH |
|
$' |
Содержимое после подстроки предыдущего успешного совпадения. |
|
$POSTMATCH |
|
|
$+ |
Последняя скобка, соответствующая формату предыдущего поиска по регулярному выражению. Например: /Version: (.*)|Revision: (.*)/ && ($rev = $+); |
|
$LAST_PAREN_MATCH |
Специальные переменные дескриптора файла
|
$| |
Если установлено в ноль, функция fflush автоматически вызывается после каждого вызова write или print, сбрасывая записанное содержимое обратно в файл. |
|
$OUTPUT_AUTOFLUSH |
|
|
$% |
Текущий номер страницы вывода. |
|
$FORMAT_PAGE_NUMBER |
|
|
$= |
Текущая длина страницы. По умолчанию — 60. |
|
$FORMAT_LINES_PER_PAGE |
|
|
$- |
Количество строк, оставшихся на текущей странице. |
|
$FORMAT_LINES_LEFT |
|
|
$~ |
Имя текущего формата вывода отчета. Значение по умолчанию — имя файлового дескриптора. |
|
$FORMAT_NAME |
|
|
$^ |
Имя текущего формата заголовка отчета. Значение по умолчанию — имя файлового дескриптора с суффиксом "_TOP". |
|
$FORMAT_TOP_NAME |