[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