Глава 9. Встроенные переменные
Коротко
Perl работает со множеством встроенных переменных. О некоторых из них речь уже шла — например, о безусловном фаворите среди специальных переменных Perl — переменной $_, используемой по умолчанию многими функциями:
while ($_ = <>) {
print $_;
}
Поскольку $_ используется по умолчанию и для чтения потока ввода, и для вывода, приведенный выше код совпадает с
while (<>) {print;}
Perl содержит много встроенных переменных, и в этой главе будет рассказано о всех.
Подсказка: В этой главе много материала, специфичного для Unix, поскольку многие встроенные переменные были введены для учета индивидуальных особенностей именно этой операционной системы.
Некоторые встроенные переменные предназначены только для чтения (такие случаи оговариваются при описании переменной специально). При попытке присвоения такой переменной нового значения, Perl выдаст сообщение об ошибке. С другой стороны, использовать некоторые переменные и вовсе не рекомендуется (а именно, хотя они и доступны для программиста, обращение к ним может вызвать проблемы) — на такие случаи также обращаетсся особое внимание.
Подсказка: Эта глава является кратким справочником по всем встроенным переменным Perl. Как результат, некоторые переменные ссылаются на свойства, которые описываются в этой книге дальше. Более того, некоторые переменные ссылаются на свойства, которые в этой книге либо вообще не обсуждаются, либо об их существовании только упоминаетя — в таких случаях за дополнительной информацией придется обратиться к документации, сопровождающей Perl. (Это означает, что программисту в повседневной практике нет необходимости использовать соответствующие свойства Perl.)
Итак, на этом введение завершается. После знакомства со справочной информацией из двух последующих разделов, можно переходить к основной части главы, описывающей встроенные переменные Perl.
Развернутые имена встроенных переменных
По большей части встроенные переменные Perl названы очень кратко и загадочно — например $] или $<. Однако, как правило, для них имеются эквивалентные развернутые имена, напоминающие в мнемонической (для владеющих английским языком) форме, что именно делает та или иная переменная. Развернутые имена встроенных переменных можно использовать, если поместить в начале сценария специальную прагму:
use English;
Она позволяет использовать для встроенных переменных, перечисленных в таблице 9.1, английские эквиваленты. Учтите, что некоторые встроенные переменные имеют несколько мнемонических эквивалентов.
Таблица 9.1. Развернутые эквиваленты имен встроенных переменных
Переменная |
Развернутая форма |
||
$’ |
$POSTMATCH |
||
$- |
$FORMAT_LINES_LEFT |
||
$! |
$OS_ERROR $ERRNO |
||
$" |
$LIST_SEPARATOR |
||
$# |
$OFMT |
||
$$ |
$PROCESS_ID $PID |
||
$% |
$FORMAT_PAGE_NUMBER |
||
$& |
$MATCH |
||
$( |
$REAL_GROUP_ID $GID |
||
$) |
$EFFECTIVE_GROUP_ID $EGID |
||
$* |
$MULTIPLE_MATCHING |
||
$, |
$OUTPUT_FIELD_SEPARATOR $OFS |
||
$. |
$INPUT_LINE_NUMBER $NR |
||
$/ |
$INPUT_RECORD_SEPARATOR $RS |
||
$: |
$FORMAT_LINE_BREAK_CHARACTERS |
||
$; |
$SUBSCRIPT_SEPARATOR $SUBSEP |
||
$? |
$CHILD_ERROR |
||
$@ |
$EVAL_ERROR |
||
$\ |
$OUTPUT_RECORD_SEPARATOR $ORS |
||
$] |
$PERL_VERSION |
||
$^ |
$FORMAT_TOP_NAME |
||
$^A |
$ACCUMULATOR |
||
$^D |
$DEBUGGING |
||
$^E |
$EXTENDED_OS_ERROR |
||
$^F |
$SYSTEM_FD_MAX |
||
$^I |
$INPLACE_EDIT |
||
$^L |
$FORMAT_FORMFEED |
||
$^O |
$OSNAME |
||
$^P |
$PERLDB |
||
$^T |
$BASETIME |
||
$^W |
$WARNING |
||
$^X |
$EXECUTABLE_NAME |
||
$_ |
$ARG |
||
$` |
$PREMATCH |
||
$| |
$OUTPUT_AUTOFLUSH |
||
$~ |
$FORMAT_NAME |
||
$+ |
$LAST_PAREN_MATCH |
||
$< |
$REAL_USER_ID $UID |
||
$= |
$FORMAT_LINES_PER_PAGE |
||
$> |
$EFFECTIVE_USER_ID $EUID |
||
$O |
$PROGRAM_NAME |
||
$ARGV |
нет синонима |
||
$nn |
нет синонима |
||
%ENV |
нет синонима |
||
%INC |
нет синонима |
||
%SIG |
нет синонима |
||
@_ |
нет синонима |
||
@ARGV |
нет синонима |
||
@INC |
нет синонима |
Настройка встроенных переменных на конкретные дескрипторы файлов
Многие встроенные переменные работают с текущим дескриптором файла (более подробно об этом рассказывается в главе 12). Однако, при наличии прагмы
use FileHandle;
в начале сценария, то переменные можно настраивать на работу с конкретным дескриптором файла. Для этой цели можно применить методы, которые выполняются с помощью конструкций вида
метод дескриптор выражение
или, используя немного другой синтаксис, как
дескриптор->метод(выражение);
Методы приводятся в таблице 9.2.
Таблица 9.2. Методы, настраивающие встроенные переменные на работу с конкретным дескриптором файла
Переменная |
Вызов метода |
||
$- |
format_lines_left HANDLE EXPR |
||
$% |
format_page_number HANDLE EXPR |
||
$, |
output_field_separator HANDLE EXPR |
||
$. |
Input_line_number HANDLE EXPR |
||
$/ |
input_record_separator HANDLE EXPR |
||
$: |
format_line_break_characters HANDLE EXPR |
||
$\ |
output_record_separator HANDLE EXPR |
||
$^ |
format_top_name HANDLE EXPR |
||
$^L |
format_formfeed HANDLE EXPR |
||
$| |
autoflush HANDLE EXPR |
||
$~ |
format_name HANDLE EXPR |
||
$= |
format_liner_per_page HANDLE EXPR |
Непосредственные решения
$’ — строка, следующая за совпадением
Синоним: $POSTMATCH
Переменная $’ содержит фрагмент заданного пользователем текста, который следует за фрагментом, сопоставленным шаблону в процессе последней операции поиска или замены. Пример:
$text = "earlynowlate";
$text =~ /now/;
print "Prematch: \"$`\" " .
"Match: \"$&\" " .
"Postmatch: \"$’\"\n";
Prematch: "early" Match: "now" Postmatch: "late"
Эта переменная доступна только для чтения.
$- — число строк, оставшихся на странице
Синоним: $FORMAT_LINES_LEFT
Переменная $- содержит число строк, которые остались на странице текущего потока вывода.
$! — текущая ошибка
Синонимы: $OS_ERROR, $ERRNO
Переменная $! выводит номер текущей ошибки в числовом контексте, и текстовую строку — сообщение об ошибке — при работе в строковом контексте. Пример:
use File::Copy;
# Попытка скопировать несуществующий файл
copy ("nonexistent.pl", "new.pl");
print $!;
No such file or directory
$"— разделитель полей массивов при интерполировании
Синоним: $LIST_SEPARATOR
Эта переменная идентична переменнлй $, (она рассматривается далее) за тем исключением, что относится не к массивам, выводимым по команде print, а к массивам, интерполируемым внутрь строк. А именно, $ " содержит символ, используемый как разделитель полей массивов, когда Perl интерполирует содержимое массива в строку, заключенную в двойные кавычки. По умолчанию используется пробел. Пример:
@array = (1, 2, 3);
$" = ’,’;
$text = "@array";
print $text;
1,2,3
$#— формат вывода чисел с плавающей точкой
Синоним: $OFMT
Переменная $# задает формат по умолчанию для вывода чисел с плавающей точкой с помощью команды print. Пример:
$pi = 3.14159265359;
$# = ’%.6g’;
print "$pi\n";
3.14159
Предупреждение: Использование переменной $# не рекомендуется.
$$— идентификатор процесса Perl
Синонимы: $PROCESS_ID, $PID
Переменная $$ содержит идентиификатор процесса интерпретатора Perl, выполняющего текущий сценарий.
$%— текущая страница вывода
Синоним: $FORMAT_PAGE_NUMBER
Переменная $% содержит номер текущей страницы для текущего потока вывода.
$&— совпадение с шаблоном поиска
Синоним: $MATCH
Переменная $& содержит фрагмент текста, сопоставленный шаблону при последней операции поиска или замены. Пример:
$text = "earlynowlate";
$text =~ /now/;
print "Prematch: \"$`\" " .
"Match: \"$&\" " .
"Postmatch: \"$’\"\n";
Prematch: "early" Match: "now" Postmatch: "late"
Эта переменная предназначена только для чтения.
$(— реальный идентификатор группы пользователей (real GID)
Синонимы: $REAL_GROUP_ID, $GID
Переменная $( содержит реальный идентификатор группы пользователей (real GID) для текущего процесса. Эта информация полезна только в среде Unix. Если операционная система поддерживает членство в нескольких группах одновременно, переменная $( содержит список групп, в которые входит пользователь, от имени которого запущен сценарий.
$)— текущий идентификатор группы пользователей (effective GID)
Синонимы: $EFFECTIVE_GROUP_ID, $EGID
Переменная $) содержит текущий идентификатор группы пользователей (effective GID) для текущего процесса. Эта информация полезна только в среде Unix. Если операционная система поддерживает членство в нескольких группах одновременно, переменная $( содержит список групп, в которые входит пользователь, от имени которого запущен сценарий.
Подсказка: В чем отличие текущей группы от реальной? Программа может быть запущена любым пользователем из другой группы, но права доступа она получает от группы владельца файла, то есть текущей группы.
$*— совпадение с шаблоном поиска
Синоним: $MULTIPLE_MATCHING
Переменная $* позволяет выполнять поиск в многострочных строках — то есть строках, содержащих символы новой строки \n. Если переменная $* установлена в 1, то метасимволы шаблона поиска ^ и $ сопоставляются позициям перед и после внутренних символов новой строки, если в 0 (значение по умолчанию) — только физическому началу и концу исследуемого текста. Пример:
$text = "Here \nis the\ntext.";
$text =~ /^is/;
print $&; # Совпадение не найдено
$* = 1;
$text =~ /^text/;
print $&; # Совпадение найдено
text
Предупреждение: Работа с переменной $* в Perl не приветствуется. Для этой цели обычно используются модификаторы m и s.
$,— разделитель полей вывода
Синонимы: $OUTPUT_FIELD_SEPARATOR, $OFS
Переменная $, содержит разделитель полей для оператора print. Следующий пример показывает, как использовать эту переменную:
$, = ’;’;
print 1, 2, 3;
1;2;3
$.— текущий номер строки ввода
Синонимы: $INPUT_LINE_NUMBER, $NR
Переменная $. содержит текущий номер строки ввода для последнего открытого дескриптора файла.
$/— разделитель входных записей
Синонимы: $INPUT_RECORD_SEPARATOR, $RS
Переменная $/ содержит разделитель входных записей. При чтении данных через дескриптор файла содержимое переменной $/ выступает в качестве ограничителя очередной записи. По умолчанию $/ содержит символ новой строки \n.
Рассмотрим следующий интересный пример. Обычно содержимое файла считывается построчно. Однако, если сделать переменную $/ неопределенной, то можно прочесть весь многострочный файл за один раз:
undef $/;
open HANDLE, "file.txt";
$text = <HANDLE>;
print $text;
Here’s
text from
a file.
$:— маркер разбивки строки
Синоним: $FORMAT_LINE_BREAK_CHARACTERS
Переменная $: содержит текст — маркер разбивки строки при выводе. После вывода содержимого $: Perl имеет право разбивать строку, чтобы заполнить поля формата.
$;— разделитель индексов
Синонимы: $SUBSCRIPT_SEPARATOR, $SUBSEP
Переменная $; позволяет эмулировать многомерные массивы с помощью хеш. Эта переменная содержит текст, выступающий в роли разделителя индексов, при передаче хешу индексов, заданных в стиле многомерных массивов. Совокупный ключ, получающийся при объединении индексов и разделителей в единую строку, служит ключом доступа к элементу. По умолчанию эта переменная содержит запятую. Ниже приводятся два эквивалентных выражения:
$hash{x,y,z}
$hash{join($;, x, y, z)}
Вот еще один пример использования хеша в роли массива — здесь в качестве индекса задан ключ 1,1,1:
$hash{"1$;1$;1"} = "Hello!";
print $hash{1,1,1};
Hello!
Однако вместо хеша предпочтительнее работать с «истинными» многомерными массивами (см. главу 14) — они быстрее для доступа и эффективнее в использовании памяти.
$?— статус последней системной операции
Синоним: $CHILD_ERROR
Переменная $? содержит статус (возможно, номер системной ошибки), возвращенный поледним закрытым каналом, вызовом внешней команды в строке, ограниченной обратными апострофами, или обращением к встроенныи системным операторам Perl.
$@— ошибка выполнения функции eval
Синоним: $EVAL_ERROR
Переменная $@ содержит сообщение об ошибке, которая возникла (если возникла) в процессе последнего обращения к функции eval. Если ошибок не было, эта переменная пуста.
$[— базовый индекс массивов
Синоним: нет.
Переменная $[ содержит число, присваиваемое первому индексу массива. По умолчанию она равна нулю, но вы можете присвоить ей другое значение.
Предупреждение: Использование переменной $[ не приветствуется в Perl.
$\— разделитель выходных записей
Синонимы: $OUTPUT_RECORD_SEPARATOR, $ORS
Переменная $\ содержит символ или строку символов, которые оператор print использует как разделитель выходных записей. Обычно это пустая строка, но ее можно переопределить:
$\ = "END_OF_OUTPUT";
print "Hello!";
Hello!END_OF_OUTPUT
$]— версия Perl
Синоним: $PERL_VERSION
Переменная $] содержит версию интерпретатора Perl, под которым выполняется сценарий. Пример:
print $];
5.00502
$^— текущий формат колонтитула страницы
Синоним: $FORMAT_TOP_NAME
Переменная $^ содержит текущий формат колонтитула страницы для текущего потока вывода.
$^A— накопитель команды write
Синоним: $ACCUMULATOR
Переменная $^A представляет собой накопитель для команды write. После обращения к ее формату, команда write выведет содержимое накопителя.
$^D— текущие флаги отладки
Синоним: $DEBUGGING
Переменная $^D содержит значение текущих флагов, управляющих отладкой сценария Perl.
$^E— информация об ошибке, специфичная для операционной системы
Синоним: $EXTENDED_OS_ERROR
Переменная $^E содержит дополнительную информацию об ошибке, возвращаемую в случае работы под управлением конкретной операционной системы. В большинстве операционных систем, за исключением VMS, OS/2, Win32 и интерпретатора MacPerl для компьютеров Macintosh, переменные $^E и $! содержат один и тот же текст. Вот пример, показывающий особенности операционной среды Windows:
use File::Copy;
# Попытка скопировать несуществующий файл
copy ("nonexistent.pl", "new.pl");
print $!;
print $^E;
No such file or directory
The system cannot find the file specified
$^F— максимальное количество дескрипторов файлов
Синоним: $SYSTEM_FD_MAX
Переменная $^F содержит максимальное количество дескрипторов файлов для операционной системы Unix (обычно 2).
$^H— флаги проверки синтаксиса
Синоним: нет.
Переменная $^H содержит текущий набор правил проверок синтаксиса Perl, заданных с помощью команды use strict и других прагм.
$^I— расширение файлов для редактирования «по месту»
Синоним: $INPLACE_EDIT
Переменная $^I содержит расширение файлов, для которых разрешено редактирование «на месте» (см описание ключа -i в главе 1). Если такой файл открыт как поток ввода, в него можно выводить данные, но в целях безопасности в момент открытия файла Perl создает его резервную копию. Чтобы запретить редактирование «на месте», надо сделать переменную $^I неопределенной (команда undef).
$^L— символ прогона страницы
Синоним: $FORMAT_FORMFEED
Переменная $^L содержит символ, который Perl использует при выводе формата для обоззначения конца страницы. Значение по умолчанию — символ \f.
$^M— буфер памяти «на крайний случай»
Синоним: нет.
Переменная $^M резервирует память, которая может использоваться Perl, когда его внутренние ресурсы исчерпаны. Вообще говоря, Perl не обрабатывает ситуацию недостатка памяти. Однако, есл при компиляции интерпретатора был задан ключ DPERL_EMERGEMCY_SBRK то можно зарезервировать на этот случай дополнительный буфер памяти (скажем, в 1Мб), выполнив команду:
$^M = ’ ‘ [ (2 ** 20);
$^O— имя операционной системы
Синоним: $OSNAME
Переменная $^O содержит имя операционной системы, для которой предназначен данный интерпретатор Perl. В случае операционной системы Unix, для которой интерпретатор обычно собирается самостоятельно, эта переменная помимо имени операционной системы может содержать локальное имя компьютера (не имеющее, как легко понять, отношения к операционной системе). Версии Perl, специально собранные для той или иной операционной системы, как правило, более надежны<$FВообще говоря, надежность обеспечивается компилятором, а не условиями сборки. Если Вы считаете себя профессионалом, то «ручная» сборка Perl может быть для Вас более предпочтительным вариантом — при этом, кроме всего прочего, можно задействовать дополнительные возможности. — Примеч. ред.>:
print $^O;
MSWin32
$^P— поддержка отладки
Синоним: $PERLDB
Переменная $^P содержит флаги, описывающие внутреннюю конфигурацию режима отладки. Вот описание значений некоторых битов:
$^R— результат вычисления утверждения в теле шаблона
Синоним: нет.
Переменная $^R содержит результат успешного сопоставления текста и шаблона для последнего вычисленного утверждения (assertion) шаблона команды поиска или замены текста (см. разделы «Мнимые символы в регулярных выражениях» и «Дополнительные конструкции в регулярных выражениях» в главе 6). В следующем примере утверждение (?{...}) в теле шаблона используется для выполнения некоторого кода Perl в середине регулярного выражения с последующим выводом результата, возвращаемого этим кодом и занесенного в переменную $^R:
$text = "text";
$text =~ /x(?{$variable1 = 5})/;
print $^R;
5
$^S— состояние интерпретатора
Синоним: нет.
Переменная $^S содержит текущее состояни интерпретатора. Если она равна истине, то интерпретатор выполняет код внутри команды eval, в противном случае переменная содержит ложь.
$^T— время запуска сценария на выполнение
Синоним: $BASETIME
Переменная $^T содержит время, когда сценарий был запущен на выполнение. Время измеряется в секундах, прошедших с 1 января 1970 года (стандартное время системы Unix). Пример:
print $^T;
909178645
$^W— режим вывода предупреждающих сообщений
Синоним: $WARNING
Переменная $^W содержит текущее состояния переключателя, управляющего выводом предупреждающих сообщений (см описание ключа -w в главе 1). Если при старте задан ключ -w, она содержит значение истина:
print $^W; # запускать как %perl5 -w warn.pl
1
$^X— имя программы-интерпретатора
Синоним: $EXECUTABLE_NAME
Переменная $^X содержит полный путь к интерпретатору Perl, выполняющему текущий сценарий:
print $^X;
/usr/bin/perl5
$_— аргумент по умолчанию
Синоним: $ARG
Переменная $_ используется многими операторами и функциями Perl в качестве параметра, если они вызваны без указания аргумента. Например, для оператора цикла while и оператора печати print $_используется в качестве параметра по умолчанию, поэтому код Perl
while ($_ = <>) {
print $_;
}
делает то же самое, что и код
while (<>) {
print;
}
Другие команды и функции, как уже указывалось в этой книге, также используют переменную $_ (например, операторы m/.../ и s/.../.../, функции chop и chomp), если пользователь не задал другого аргумента.
$` — строка, следующая перед совпадением
Синоним: $PREMATCH
Переменная $` содержит часть заданного пользователем текста, который следует перед фрагментом, сопоставленным шаблону в процессе последней операции поиска или замены. Пример:
$text = "earlynowlate";
$text =~ /now/;
print "Prematch: \"$`\" " .
"Match: \"$&\" " .
"Postmatch: \"$’\"\n";
Prematch: "early" Match: "now" Postmatch: "late"
Эта переменная предназначена только для чтения.
$| — управление буфером вывода
Синоним: $OUTPUT_AUTOFLUSH
Если переменная $| установлена в значение истина, Perl немедленно выводит данные в текущий поток вывода, не используя промежуточный буфер-накопитель. В момент, когда $| устанавливается в значение истина, Perl выводит в поток вывода текущее содержание буфера и будет делать то же самое для каждой последующей команды write или print.
Обычно эта переменная используется при работе с каналами, чтобы не задерживать пересылку данных. В следующем примере переменная $| связывается с конкретным каналом, а ее значение устанавливается в истину с помощью метода из таблицы 9.2:
pipe (READER, WRITER);
autoflush WRITER 1;
То же самое можно сделать с помощью команды
pipe (READER, WRITER);
WRITER->autoflush(1);
$~ — имя текущего формата отчетов
Синоним: $FORMAT_NAME
Переменная $~ содержит имя текущего формата, используемого для генерации отчета для текущего потока вывода.
$+ — фрагмент совпадения
Синоним: $LAST_PAREN_MATCH
Переменная $+ содержит фрагмент текста, сопоставленного шаблону в процессе последней операции поиска или замены. Он соответствует последней обработанной паре круглых скобок внутри тела шаблона. Пример:
$text = "Here is the text.";
$text =~ /{\w+) is the (\w+)/;
print $+;
text
Эта переменная предназначена только для чтения.
$< — реальный идентификатор пользователя (Real User ID)
Синонимы: $REAL_USER_ID, $UID
Переменная $< содержит реальный идентификатор пользователя для текущего процесса. Эта информация обычно имеет смысл только для операционной системы Unix. Пример:
print $<;
166
$= — текущий размер страницы
Синоним: $FORMAT_LINES_PER_PAGE
Переменная $= содержит размер страницы в строках текста (по умолчанию 60) для текущего пока вывода. Пример:
print $=;
60
$> — текущий идентификатор пользователя (Effective User ID)
Синонимы: $EFFECTIVE_USER_ID, $EUID
Переменная $> содержит текущий идентификатор пользователя для текущего процесса. Эта информация обычно имеет смысл только для операционной системы Unix. Пример:
print $>;
166
$O — имя программы
Синоним: $PROGRAM_NAME
Переменная $O содержит имя сценария, запущенного на выполнение. Пример:
print $O;
script.pl
$ARGV — имя входного файла
Синоним: нет.
Переменная $ARGV содержит имя файла, используемого для ввода через STDOUT с помощью команды <>. Например, если сценарий запущен с помощью команды
%perl read.pl file.txt
то переменная $ARGV содержит имя, переданное сценарию в командной строке:
$text = <>;
print $ARGV;
file.txt
$nn — nn-й фрагмент совпадения
Синоним: нет.
Нумерованные переменные вида $nn, после очередной успешной операции поиска или замены, содержат сопоставленные шаблону фрагменты текста. Последние соответствуют группам круглых скобок, указанных внутри тела шаблона и пронумерованных по порядку следования с учетом вложенности (более подробно об этом рассказано в главе 6). В следующем примере нумерованные переменные используются для изменения порядка слов в строке:
$text = "yes or no";
$text =~ s/{\w+) (\w+) (\w+)/$3 $2 $1/;
print $text;
no or yes
%ENV — переменные окружения
Синоним: нет.
Переменная %ENV представляет собой хеш и содержит значения переменных среды, заданных на момент запуска сценария. Ключами обычно служат имена переменных среды (но, вообще говоря, состав ключей зависит от операционной системы). Например, для операционной системы Unix можно ожидать следующих значений:
while ($key, $value) = each(%ENV) {
print "$key => $value\n";
}
SHELL => /bin/csh
HOME => /home/username
...
%INC — подключаемые файлы
Синоним: нет.
Переменная %INC представляет собой хеш, в котором для каждого файла, подключенного с помощью команд do или require имеется запись. Ключом является имя файла, а значением — путь к нему. (Этот хеш используется и самим Perl для проверки, не подключен ли уже соответствующий файл.)
%SIG — обработчики ситуаций
Синоним: нет.
Переменная %SIG представляет собой хеш, в котором хранятся обработчики различных ситуаций, возникающих в Perl. Например, так можно отключить вывод предупреждающих сообщений:
local $SIG{__WARN__} = sub {};
@_ — аргументы, переданные подпрограмме
Синоним: нет.
Формальные параметры подпрограмм обрабатываются с помощью массива @_, в который в момент вызова подпрограммы заносится список аргументов, переданных пользователем. В задачу подпрограммы входит извлечь параметры из этого массива, что и показано в следующем примере:
sub addem
{
$value1 = shift @_;
$value2 = shift @_;
print "$value1 + $value2 = " . ($value1+$value2) . "\n";
}
addem (2, 2);
2 + 2 = 4
@ARGV — аргументы, переданные в командной строке
Синоним: нет.
Массив @ARGV содержит список аргументов, переданных сценарию в момент его запуска. Допустим, сценарий запущен на выполнение командой
%perl script.pl a b c d
Если вывести элементы массива @ARGV, вот что мы увидим:
print join(", ", @ARGV);
a, b, c, d
Подсказка: Обратите внимание, что первый аргумент находится в элементе массива $ARGV[0]. Поэтому $#ARGV — это количество аргументов без единицы.
@INC — пути поиска подключаемых файлов
Синоним: нет.
Массив @INC содержит список каталогов, в которых Perl ищет файлы, подключаемые командами do, require и use. Пример:
print join(",\n", @INC);
/usr/local/lib/perl5/sun/5.00502,
/usr/local/lib/perl5/,
/usr/local/lib/perl5/site_perl/sun,
/usr/local/lib/perl5/site_perl,