So part of the problem (apart from my inability to get this to work at all) is that the warn statements are outside the $code->() call. Is there a way I can append them inside the subroutine itself?
You may find interesting this post. You can edit the source of the subroutines and evaluate it into code again:
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;
Outputs:
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); }
Hope this helps
citromatik
In reply to Re: Rewriting sub code on import to add logging
by citromatik
in thread Rewriting sub code on import to add logging
by gryphon
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |