use B; use 5.008001; =pod =head1 SYNOPSIS no strict 'refs'; my $pointer = &{"a great evil"}( 0x1800000, 1_000_000 ); print $pointer->{'text'}; =cut { no strict 'refs'; # ARG1 address to dereference # ARG2 length of string to construct *{"a great evil"} = sub { my $address = 0 + shift; my $length = 0 + shift; # Create a host life form. We're about to violate use it as # a template my $host_string = "an innocuous string"; # Clone the host life form to form a suitable environment # for oursynthetic strings. my $sv = unpack 'P12', pack 'L', 0 + \ $host_string; my $xpv = unpack 'P12', substr $sv, 0, 4; # Now implant our alien spawn into the host string substr $sv, 0, 4, pack 'P', $xpv; substr $xpv, 0, 4, pack 'L', 0 + $address; substr $xpv, 4, 4, pack 'L', 0 + $length; substr $xpv, 8, 4, pack 'L', 1 + $length; my $new_sv = \ unpack 'L', pack 'P', $sv; # Be sure to keep references to $sv and $xpv around so the backing SV # isn't deallocated. # Let the alien out into the general population. +{ text => bless( $new_sv, 'B::PV')->object_2svref, _backend => [ \ $sv, \ $xpv ] }; }; }