Skip to content

Instantly share code, notes, and snippets.

@toddr
Forked from dur-randir/mg_overload_table.pl
Created May 24, 2017 18:11
Show Gist options
  • Select an option

  • Save toddr/172e3b1d3962f236ef3bc9434f7d73eb to your computer and use it in GitHub Desktop.

Select an option

Save toddr/172e3b1d3962f236ef3bc9434f7d73eb to your computer and use it in GitHub Desktop.
package Z;
use Devel::Peek ();
use overload "+"=>sub {42};
die "fail" unless 42 == bless({}) + 1;
Devel::Peek::Dump \%Z::;
use Inline C => <<END;
void foo(SV* targ) {
if (!SvOK(targ)) return;
if (SvROK(targ)) targ = SvRV(targ);
if (SvMAGICAL(targ) && mg_find(targ, PERL_MAGIC_overload_table)) {
warn("sv_unmagic");
sv_unmagic(targ, PERL_MAGIC_overload_table);
}
}
END
foo(\%Z::);
Devel::Peek::Dump \%Z::;
die "fail" unless 42 == bless({}) + 1;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment