Справочник по Perl : Функции, относящиеся к области видимости переменных

смотрим также

Материал из Справочник Web-языков

Перейти к: навигация, поиск


Содержание

import

Встпвляет пространство имен одного модуля в другой. Это не встроенная функция, а всего лищь метод, наследуемый от модуля (параметр МОДУЛЬ), которому необходимо экспортировать свои имена (параметр СПИСОК) в другой модуль.

import МОДУЛЬ СПИСОК

local

Функция local() используется для объявления и инициализации одной или нескольких переменных:

local EXPR 
local ($myvar, $@mylist, %myhash); 
local $pi = 3.14159; 
local ($pi, $exp) = (3.14159, 2.71828);

но, в отличие от функции my() она создает не локальные переменные, а временные значения для глобальных переменных внутри:

  • подпрограммы;
  • заключенного в фигурные скобки блока операторов;
  • выражения, пареданного на выполнение функции eval();
  • файла;

В зависимости от того, в каком месте вызвана для объявления переменных сама функция local(). Если функция local() применяется для описания нескольких переменных, они должны быть заключены в скобки. Если глобальня перемнная, объявленная при помощи этой функции, ранее встречалась до объявления и имела некоторое значение, то это значение сохраняется в скрытом стеке и восстанавливается после выхода соответственно из подпрограммы, блока, функции eval() или файла. Переменная, объявленная при помощи функции local(), или, точнее, ее временное значение, доступна для любой функции, вызванной внутри подпрограммы, блока, функции eval() или файла, в которых сделано объявление. Такую переменную называют динамической, а ее область видимости - динамической областью видимости. В названии отражается тот факт, что область видимости переменной динамически изменяется с каждым вызовом функции, получающей доступ к этой переменной.

Пример:

sub f1{
  local ($x) = "aaaa";
  my($y)     = "bbbb";
  print("f1: x = $xn");
  print("f1: y = $ynn");
  f2();
  print("f1: x = $xn");
  print("f1: y = $ynn");
}
sub f2{
  print("f2: x = $xn");
  print("f2: y = $ynn");
  $x = "cccc";
  $y = "dddd";
  print("f2: x = $xn");
  print("f2: y = $ynn");
}
f1;

Результатом выполнения данного примера будет следующий вывод:

f1: x = aaaa 
f1: y = bbbb

f2: x = aaaa 
f2: y =

f2: x = cccc 
f2: y = dddd

f1: x = cccc 
f1: y = bbbb

Как видно из приведенного результата, функция f2() не имеет доступа к переменной $y, объявленной при помощи функции my() внутри функции f1(), и,напртив, имеет доступ к переменной $x, объявленной внутри f1() при помощи функции local().

my

Функция my() используется для объявления одной или нескольких переменных локальными:

my EXPR

и ограничивает их область действия:

  • подпрограммой;
  • заключенным в фигурные скобки блоком операторов;
  • выражением, пареданным на выполнение функции eval();
  • файлом, в зависимости от того, в каком месте вызвана для объявления переменных сама функция my().

Если выражение EXPR содержит список переменных, то он должен быть заключен в скобки:

my ($myvar, @mylist, %myhash);

Одновременно с объявлением переменные могут быть инициализированны:

my $pi = 3.14159; 
my ($pi, $exp) = (3.14159, 2.71828);

Переменные, объявленные при помощи функции my(), доступны в своей области действия только для подпрограмм, определенных в этой области. Для подпрограмм, определенных за ее пределами, они недоступны. Такие переменные называются лексическими, а саму область видимости - лексической или статической областью видимости.

Пример:

sub f1{
  local ($x) = "aaaa";
  my($y)     = "bbbb";
  print("f1: x = $xn");
  print("f1: y = $ynn");
  f2();
  print("f1: x = $xn");
  print("f1: y = $ynn");
}
sub f2{
  print("f2: x = $xn");
  print("f2: y = $ynn");
  $x = "cccc";
  $y = "dddd";
  print("f2: x = $xn");
  print("f2: y = $ynn");
}
f1;

Результатом выполнения данного примера будет следующий вывод:

f1: x = aaaa 
f1: y = bbbb

f2: x = aaaa 
f2: y =

f2: x = cccc 
f2: y = dddd

f1: x = cccc 
f1: y = bbbb

Как видно из приведенного результата, функция f2() не имеет доступа к переменной $y, объявленной при помощи функции my() внутри функции f1(), и,напртив, имеет доступ к переменной $x, объявленной внутри f1() при помощи функции local().

package

Определяет отдельное глобальное пространство имен (пакет): все неопределенные динамические идентификаторы (включая те, которые объявлены через local(), но не my() ) будут храниться в нем. Для доступа к ним вне пакета следует указывать префикс, представляющий имя пакета с последующими двумя символами двоеточий "::". Область видимости переменных пакета распространяется до конца блока операторов, в котором расположен пакет или до нового объявления пакета. Если опущено имя пакета, то предписывает, чтобы все индентификаторы были определены, включая имена функций.

package [ИМЯ_ПАКЕТА]

use

Загружает модуль во время компиляции; если модуль не доступен, то компиляция всей программы прекращается.

use МОДУЛЬ СПИСОК
use МОДУЛЬ
use МОДУЛЬ ВЕРСИЯ СПИСОК
use ВЕРСИЯ
Источник — «http://www.spravkaweb.ru/perl/showvar/»
Добавить страницу в закладки:
РАЗРЕШАЕТСЯ перепечатывать и копировать информацию ТОЛЬКО ПРИ РАЗМЕЩЕНИИ ссылки на оригинал!
(<A href="http://www.spravkaweb.ru/">Справочник Web-языков</A>)
другие проекты
Rambler\'s Top100 Индекс цитирования