my $old = \&IWL::Script::setScript; *IWL::Script::setScript = sub { ...; goto &$old; }; #### # Untested. use Scalar::Util 'reftype'; use 5.010; # For ~~. my $old = \&IWL::Script::setScript; *setScript = sub { my ($self, $param) = @_; $param = $p2js->covert($param) if reftype($param) ~~ 'CODE'; @_ = ($self, $param); # or: #splice @_, 1, 1, $p2js->convert($param) # if reftype($param) ~~ 'CODE'; goto &$old; };