|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Artem Chuprina 2:5020/400 14 Nov 2003 23:23:17 To : tsypatsypa%forest.pu.ru@f266.n5030. Subject : Re: will not stay shared -------------------------------------------------------------------------------- Хмутро. tfpr> Внизу тестовый скриптик. В оригинале b() вызывается рекурсивно. tfpr> b() определена внутри а() для того, чтобы некоторые переменные держать tfpr> снаружи b(),потому что передавать параметрами весь необходимый зоопарк tfpr> лень, но не делать их глобальными. В a() в начале ещё некотороая tfpr> инициализация должна происходить. tfpr> Всё работает, но ругается: tfpr> Variable "$a" will not stay shared at ./t.pl line 10. tfpr> Как удовлетворить транслятор? tfpr> И. tfpr> #!/usr/bin/perl tfpr> use strict; tfpr> use warnings; tfpr> sub a () { tfpr> my $a = 1; tfpr> sub b () { tfpr> $a++; tfpr> } tfpr> b(); tfpr> b(); tfpr> $a; tfpr> } tfpr> print a(), "\n";; Могут быть засады с долговременным выполнением этого безобразия, когда функции периодически переопределяются. Определение b() заменить на my $sub_b = sub { $a++ }; а вызовы, соответственно, на $sub_b->(); И по возможности избегать имен переменных $a и $b... -- Artem Chuprina RFC2822: <ran@ran.pp.ru>, FIDO: 2:5020/122.256, ICQ: 13038757 --- ifmail v.2.15dev5.1 * Origin: Leninsky 45 home network (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/1147799513b6f.html, оценка из 5, голосов 10
|