use B::Deparse; sub something { my ( $self, $param ) = @_; return _stuff($param); } my $subref = \&something; my $code = B::Deparse->new->coderef2text($subref); print "Before editing &something:\n",$code; $code =~ s/\{/\{\nlog_msg('starting sub');\n/; *something = eval "sub $code"; $code = B::Deparse->new->coderef2text(\&subref); print "\nAfter editing &something:\n",$code; #### Before editing &something: { use warnings; use strict 'refs'; my($self, $param) = @_; return _stuff($param); } After editing &something: { use warnings; use strict 'refs'; log_msg('starting sub'); my($self, $param) = @_; return _stuff($param); }