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

Vladimir V. Perepelitsa inthrax на gmail.com
Пт Май 30 09:24:25 PDT 2008


Что самое интересное, что если пропустить код через -MO=Deparse и потом в 
таком виде выполнить, то все ок.

On Friday 30 May 2008 20:16:14 Denis Evdokimov wrote:
> #! /usr/bin/perl
> use strict;
> use warnings;
>
> my $test = 0;
> warn 'main: ', \$test, ' ', $test;
>
> my $func1 = sub {
>        $test .= 1;
>        warn 'func1: ', \$test, ' ', $test;
>        sub func2 {
>                $test .= 2;
>                warn 'func2: ', \$test, ' ', $test;
>        }
> };
>
> $func1->();
> func2();
> $func1->();
> func2();
> $func1->();
> func2();
> func2();
> func2();
> func2();
> warn $test;
>
> ##################
> main: SCALAR(0x182f478) 0 at 2.pl line 6.
> func1: SCALAR(0x182f478) 01 at 2.pl line 10.
> func2: SCALAR(0x18545b4) 2 at 2.pl line 13.
> func1: SCALAR(0x182f478) 011 at 2.pl line 10.
> func2: SCALAR(0x18545c0) 22 at 2.pl line 13.
> func1: SCALAR(0x182f478) 0111 at 2.pl line 10.
> func2: SCALAR(0x18545b4) 222 at 2.pl line 13.
> func2: SCALAR(0x18545c0) 2222 at 2.pl line 13.
> func2: SCALAR(0x18545b4) 22222 at 2.pl line 13.
> func2: SCALAR(0x18545c0) 222222 at 2.pl line 13.
> 0111 at 2.pl line 26.
>
>
> Что говорит нам о том, что $test в func2 никак не связана с $test во всей
> остальной программе



-- 
Vladimir Perepelitsa aka Mons Anderson
<inthrax на gmail.com> / #99779956


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