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

Игорь Гердлер igor на gerdler.ru
Пт Май 30 07:50:28 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.

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

Игорь Гердлер (ginnie)


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