use Foo;
package Foo;
{
no warnings "redefine";
sub foo { 'different foo' }
}
package resume_former_namespace;
...
####
#!/usr/bin/perl
use warnings;
use strict;
use Foo;
use Sub::Override;
sub fixed_foo { "I'm overridden foo" }
my $override = Sub::Override->new;
$override->replace( 'Foo::foo' => \&fixed_foo ); # maybe 'foo'
print "Foo::Ridden: ", Foo::foo(), $/;
print "Foo::Ridden: ", Foo::bar, $/;
print " ::Ridden: ", foo(), $/;
$override->restore;
print " ::Orig: ", foo(), $/;
####
package Foo;
use Exporter;
our @ISA = 'Exporter';
our @EXPORT = qw/ foo bar /;
sub foo { "I'm foo" }
sub bar { foo() . 'bar' }
1;
####
Foo::Ridden: I'm overridden foo
Foo::Ridden: I'm overridden foobar
::Ridden: I'm foo
::Orig: I'm foo
####
Foo::Ridden: I'm foo
Foo::Ridden: I'm foobar
::Ridden: I'm overridden foo
::Orig: I'm foo