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 ><[email protected]>: > >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
-- Moscow.pm mailing list [email protected] | http://moscow.pm.org
