This wont work unless all your code is in main:: (and even then its a delicate situation at best)
#!/usr/bin/perl
sub main::croak {
print "I croaked";
}
{
package Test;
use Carp;
sub myfunc {
croak("I am dying");
}
}
eval {
Test::myfunc();
};
print $@ if $@;
*myfunc = \&Test::myfunc;
eval {
myfunc();
};
print $@ if $@;
__OUTPUT__
I am dying at test.pl line 18
I am dying at test.pl line 26
However, what you are talking about is not unlike the ideas behind MockObjects, see
Test::MockObject and
Test::MockModule for more info.