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;