Функция lосаl ()
Функция local () также используется для объявления и инициализации переменных:
local EXPR;
local ($myvar, @mylist, %myhash);
local $pi = 3.14159;
local ($pi, $exp) = (3.14159, 2.71828);
но, в отличие от функции ту о она создает не локальные переменные, а временные значения для глобальных переменных внутри:
в зависимости от того, в каком месте вызвана для объявления переменных сама функция local (). Если функция local () применяется для описания нескольких переменных, они должны быть заключены в скобки. Если глобальная переменная, объявленная при помощи этой функции, ранее встречалась до объявления и имела некоторое значение, то это значение сохраняется в скрытом стеке и восстанавливается после выхода соответственно из подпрограммы, блока, функции eval (} или файла. Переменная, объявленная при помощи функции local (), или, точнее, ее временное значение, доступна для' любой функции, вызванной внутри подпрограммы, блока, функции eval о или файла, в которых сделано объявление. Такую переменную называют динамической, а ее область видимости — динамической областью видимости. В • названии отражается тот факт, что область видимости переменной динамически изменяется с каждым вызовом функции, получающей доступ к этой переменной.
Функция ту о является относительно новой, она появилась в версии Perl 5. Для создания действительно локальных переменных рекомендуется использовать именно функцию ту о, а не функцию local о. Впрочем, есть несколько исключений. О них мы расскажем ниже.
В следующем примере показано, чем отличаются переменные, объявленные
При ПОМОЩИ функций mу () и local () .
sub fl{
local ($x) = "aaaa";
my($y) = "bbbb";
print("fl: x = $x\n");
print("fl: y='$y\n\n");
f 2 (} ;
print("fl: x = $x\n");
print("fl: у = $y\n\n");
} • ' ' ' sub f2{
print("f2: x = $x\n");
print("f2: y=$y\n\n");
$x = "cccc";
$y = "dddd";
print("f2: x = $x\n");
print("f2: y=$y\n\n");
I
Результатом выполнения данного примера будет следующий вывод:
II л = aaaa
f. у = bbbb ,
2: x — aaaa с2: у =
f2: x = cccc £2: у = dddd
fl: x = cccc fl: у = bbbb
Как видно из приведенного результата, функция f2 () не имеет доступа к переменной $у, объявленной при помощи функции ту о внутри функции fi () , и, напротив, имеет доступ к переменной $х, объявленной внутри fl ()
при ПОМОЩИ функции local () .