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