|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Alexander Kostiuchenko 2:463/672.419 08 Jun 2004 15:53:47 To : yurik shestakov Subject : name from reference -------------------------------------------------------------------------------- Как-то раз (а точнее 08 Jun 04 в 17:19) yurik shestakov писал(а) к Alexander Kostiuchenko: AK>> Была мысль вместо аттрибутов писать ext { my $a; my @b; ... } AK>> (реализация примерно следующая: sub ext(&) { # use PadWalker my AK>> $vars = peek_sub( $_[0] ); my $pad = peek_my(1); ${$pad->{$_}} = AK>> ext("$_") for grep {/^$/} keys %$vars; # for scalars ... # for AK>> other types } ys> Чего-то я не уловил сути в данной реализации, особенно две вещи: ys> 1) grep {/^$/} keys %$vars -- ты чего тут хочешь получить? имена всех скалярных переменных (естессно, вместо $ там \$) ys> 2) не понятно, что сделает ext("$_"). пример вызова функции, осуществляющей биндинг (у меня ext(&) по-другому называется, имена случайно совпали, когда код в самом письме правил) AK>> Оказалось - PadWalker не умеет создавать переменные caller'a, AK>> только модифицировать. Да и strict пришлось бы отключать... ys> IMHO без грубого вмешательства во внутренности Perl такое ys> не провернуть. Вот как раз и было интересно, как вмешаться.... AK>> Более-менее подходит вариант с local our $name. Хотя это не совсем AK>> то - из-за "побочного эффекта" с dynamical scoping. Так что вопрос AK>> все еще в силе. ys> p.s. Что-то у меня такое чувство, что без tie тут не обойтись. У tie недостаток есть - нельзя обьявить сразу несколько связанных переменных (т.е. сделать аналог my ($a,$b,@c) : Tied). И фиг бы с ним, если б хоть в этом случае была возможность избежать передачи строки с именем переменной. А с local our тоже проблема вылезла - в 5.6 для таких переменных аттрибуты просто игнорируются (не вызывается обработчик; в 5.8 все работает). -- mailto: random at binet.kiev.ua //Александр --- * Origin: useless (2:463/672.419) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/402940c5e122.html, оценка из 5, голосов 10
|