On Mon, Jun 20, 2016 at 03:02:47PM +0300, [email protected] wrote:
>  Может кто уже реализовывал...
> 
> Итак... Есть магия. PERL_MAGIC_ext У нее перебит svt_get. В текущей 
> реализации задается магия через
> $var = 1;
> magic($var);
> 
> Это неудобно. Хочется так: $var = magic(); Но так не работает, так как 
> svt_get должна сделать sv_setsv на магическую переменную. И потом в sassign 
> ее скопируют без магии. Вернее не так... Если туда передать другую магическую 
> переменную, то на ней опять-таки позовется svt_get и будет бесконечный цикл.
> 
> Можно, конечно, перехватить sassign, anonhash, anonarray но кто знает - какие 
> еще опы надо перехватывать и это уже совсем из области черной магии.
> 
> Может быть кто-то сталкивался с похожей задачей копирования магии?..

Я как-то рылся и уперся в эту же проблему, все источники говорят с один голос 
что магия не копируется.
Обошел по другому, вообще без магии, оверлоадом. Вот и Variable::Magic делает 
это в два захода.
Но может быть прокатит нечто вроде такого?

   use Variable::Magic qw(wizard cast);
   my $w = wizard(...);
   use overload '=' => sub { cast $_[0], $w };

-- 
Sincerely,
        Dmitry Karasik

-- 
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить