int conceal(int var) CODE: SvREFCNT_inc((SV *) var); RETVAL = var; OUTPUT: RETVAL SV * reveal(char *str_or_addr) CODE: char *hex; int addr = (hex = rindex(str_or_addr, 'x')) ? strtol(++hex, NULL, 16) : atoi(str_or_addr); RETVAL = newRV((SV *) addr); SvREFCNT_dec((SV *) addr); OUTPUT: RETVAL #### use Devel::Reference; my $x = [1,2,3]; my $addr = Devel::Reference::conceal($x); # the refcount of [1,2,3] is now 2 undef $x; # the refcount of [1,2,3] is now 1 my $y = Devel::Reference::reveal($addr); # the refcount of [1,2,3] REMAINS at 1 print "@$y\n"; # "1 2 3"