Tuesday, September 7, 2010

Perl: функция our

Функция our объединяет аспекты use vars и my. Т.е. она создает глобальную переменную (если она еще не была создана), а также алиас к этой переменной, доступный в лексической области видимости объявления our.

Глобальная переменная после создания становится видимой отовсюду с использованием полного имени, например $Foo::Bar. А вот алиас видим только в той лексической области видимости, где он создается - как и при использовании my.
package A;
use strict;
{
our $var; # $var теперь ссылается на $A::var
$var = 42;
}

say $var; # ошибка: "global symbol $var requires explicit package name"
say $A::var; # $A::var доступна всегда

{
our $var; # Та же самая переменная $var, в текущей области видимости
$var *= 2;
say $var; # 84
}