tie $somecode, CodeNRef => qq{print "This is my code\n"};
$somecode->( );
print tied $somecode;
####
package CodeNRef;
use overload q{""} => \&print_code;
sub TIESCALAR {
my( $class, $code ) = @_;
my $ref = eval qq{ sub { $code } };
return bless { code => $code, compiled => $ref }, $class;
}
sub print_code { shift()->{code} }
sub FETCH {
my $self = shift;
return $self->{compiled}
}
1;
####
package CodeNRef;
use overload
q{""} => \&print_code,
q{&{}} => \&call;
sub new {
my( $class, $code ) = @_;
my $ref = eval qq{ sub { $code } };
return bless { code => $code, compiled => $ref }, $class;
}
sub print_code { shift()->{code} }
sub call { shift()->{compiled} }
1;