[Moscow.pm] Копирование магии 1 раз

Dmitry Karasik dmitry на karasik.eu.org
Пн Июн 20 06:52:51 PDT 2016


On Mon, Jun 20, 2016 at 03:02:47PM +0300, Warstone на list.ru 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