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

Alexander Lourier aml на rulezz.ru
Пт Май 30 12:01:05 PDT 2008


В сообщении от 30 мая 2008 18:50 Игорь Гердлер написал(a):

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

Чудеса еще чудесатее. Несмотря на то, что \$test каждый раз другая, она 
указывает на один и тот же скаляр (но не тот, который объявлен как my $test):

use strict;
use warnings;

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


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

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

$ ./test.pl 
main: SCALAR(0x814f6a8) at ./test.pl line 7.
func1: SCALAR(0x814f6a8) at ./test.pl line 11.
func2: SCALAR(0x818aa98)1 at ./test.pl line 13.
func2: SCALAR(0x818aaa4)2 at ./test.pl line 13.
func2: SCALAR(0x818aa98)3 at ./test.pl line 13.
func2: SCALAR(0x818aaa4)4 at ./test.pl line 13.
func2: SCALAR(0x818aa98)5 at ./test.pl line 13.
func2: SCALAR(0x818aaa4)6 at ./test.pl line 13.

> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
> http://mail.pm.org/mailman/listinfo/moscow-pm

-- 
Alexander Lourier, http://aml.rulezz.ru


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