День добрый.
Локализация $DB::single работает без проблем, но если брать ссылку на неё, то 
возникают проблемы:
The localization of $DB::single works fine, but the reference to it does not 
work:
        {
                $DB::single = 7; my $x = \$DB::single;
                print "Before: ". \$DB::single ." <<$x $$x\n";
                local $DB::single = 0;
                print "After: ". \$DB::single ." <<$x $$x\n";
        }

The output/Вывод
Before: SCALAR(0x10f8310) <<SCALAR(0x10f8310) 7
After: SCALAR(0x110cbc8) <<SCALAR(0x10f8310) 0

В то время как:
Where as works fine:
        {
                $DB::z = 7; my $x = \$DB::z;
                print "Before: ". \$DB::z ." <<$x $$x\n";
                local $DB::z = 0;
                print "After: ". \$DB::z ." <<$x $$x\n";
        }
The output:/Вывод
Before: SCALAR(0x134d398) <<SCALAR(0x134d398) 7
After: SCALAR(0x1239bc8) <<SCALAR(0x134d398) 7

Тут видно, что в первом примере память выделена: Новый адрес $DB::single 
является: SCALAR(0x110cbc8)
Но когда присваиваем новое значение в $DB::single, то значение по старому 
адресу ((SCALAR(0x10f8310)) меняется тоже
Во втором примере мы видим, что выделение памяти происходит по той же схеме, но 
значение 7 сохранено как и ожидалось.
We see that in *first* example the new variable is created: The new address of 
$DB::single is SCALAR(0x110cbc8)
but when assigning to $DB::single the value by old reference (SCALAR(0x10f8310) 
changed too.
In *second* example we see that addressing works in same manner, but value 7 is 
preserved as expected.

Почему значение $DB::single по старой ссылке меняется?
Why the value of $DB::single by old reference is not preserved?

PS. Можно отвечать на русском.
-- 
Moscow.pm mailing list
moscow-pm@pm.org | http://moscow.pm.org

Ответить