Локальные переменные в подпрограммах
Областью видимости или областью действия переменной мы будем называть часть программы, где данная переменная может быть использована. В языке Perl, как мы знаем, нет обязательного явного описания переменных. Точкой определения переменной является место, где она впервые встречается в программе. Область действия большинства переменных ограничена пакетом. Исключение составляют некоторые специальные предопределенные глобальные переменные интерпретатора perl.
Пакет – это механизм, позволяющий создать свое пространство имен для некоторого отрезка программы (этот отрезок может включать всю программу). Каждый фрагмент кода Perl-программы относится к соответствующему пакету.
(Пакеты рассматриваются в части 12, а специальные переменные – в части 14)
Таким образом, переменная, впервые встретившаяся – в некоторой подпрограмме, становится доступной во всем пакете, к которому эта подпрограмма принадлежит. Любая переменная в Perl по умолчанию считается глобальной, но эта глобальность ограничена рамками пакета. Иногда бывает необходимо ограничить область действия переменной рамками подпрограммы или блока, в которых она определена. Такие переменные называются локальными. В языке Perl существуют два способа описания локальных переменных – при помощи функций my() и local ().
Функция mу()
Функция mу() используется для объявления одной или нескольких переменных локальными:
my EXPR
…и ограничивает их область действия:
- подпрограммой;
- заключенным в фигурные скобки блоком операторов;
- выражением, переданным на выполнение функции eval ();
- файлом, в зависимости от того, в каком месте вызвана для объявления переменных сама функция my ().
Если выражение EXPR содержит список переменных, то он должен быть заключен в скобки:
my ($myvar, @mylist, %myhash);
Одновременно с объявлением переменные могут быть инициализированы:
my $pi = 3.14159; mу ($pi, $exp) = (3.14159, 2.71828);
Переменные, объявленные при помощи функции ту (), доступны в своей области действия только для подпрограмм, определенных в этой области. Для подпрограмм, определенных за ее пределами, они недоступны. Такие переменные называют лексическими, а саму область видимости – лексической или статической областью видимости.