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

Warstone@list.ru warstone на list.ru
Пн Июн 20 07:49:42 PDT 2016


 http://search.cpan.org/~rjbs/perl-5.24.0/lib/overload.pm#Overloadable_Operations  

Simple assignment is not overloadable (the  '=' key is used for the  "Copy Constructor" ).

Был тут. Всмысле на оверлоад тоже смотрел.

>Понедельник, 20 июня 2016, 16:52 +03:00 от Dmitry Karasik <dmitry на karasik.eu.org>:
>
>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 mailing list
>moscow-pm на pm.org |  http://moscow.pm.org

----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20160620/acf5cd49/attachment.html>


Подробная информация о списке рассылки Moscow-pm