[Moscow.pm] Почему код так работает?

Dmitry E. Oboukhov unera на debian.org
Пт Май 30 10:44:41 PDT 2008


> Уважаемые коллеги!

> При обсуждении темы с объявлением именованных функций внутри других
> написал пример:

> use strict;
> use warnings;

> my $test = 10;
> warn 'main: ', \$test;

> my $func1 = sub {
> warn 'func1: ', \$test;
> sub func2 {
> warn 'func2: ', \$test;
> }
> };

> $func1->();
> func2();
> func2();
> func2();
> func2();
> func2();
> func2();

> Код выдает результат, который я не могу объяснить

> main: SCALAR(0x804eb30) at ../../test.pl line 5.
> func1: SCALAR(0x804eb30) at ../../test.pl line 8.
> func2: SCALAR(0x809c0d4) at ../../test.pl line 10.
> func2: SCALAR(0x809c0e0) at ../../test.pl line 10.
> func2: SCALAR(0x809c0d4) at ../../test.pl line 10.
> func2: SCALAR(0x809c0e0) at ../../test.pl line 10.
> func2: SCALAR(0x809c0d4) at ../../test.pl line 10.
> func2: SCALAR(0x809c0e0) at ../../test.pl line 10.


> Может кто-нибудь объяснить, почему код так работает?

я не пойму а что не так-то?
он та и должен работать


Подробная информация о списке рассылки Moscow-pm