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