package Bar; sub override_Foo { *Foo::new = \&Bar::new; *Foo::method2 = \&Bar::method2; # etc. } 1; #### package Bar; use Exporter; @Bar::ISA=qw(Exporter); @Bar::EXPORT=qw(new method2); sub override_Foo { package Foo; # how dare we! Bar->import; } 1; # and in main: use Foo; use Bar; Bar->override_Foo();