package Repl; use warnings; use strict; # don't run in BEGIN blocks or we won't know what functions # we have defined use Orig; use Exporter; use vars qw( @ISA @EXPORT_OK); @ISA = qw(Exporter); for ( @Orig::EXPORT_OK) { no strict 'refs'; # check if we redefine this function # maybe it might not hurt to check for a function ref? if (${"Repl::"}{$_}) { # yes, save a SUPER:: copy so we can call it later *{"SUPER::" . $_} = \&{"Orig::". $_}; # now replace the original function with our new one no warnings 'redefine'; *{"Orig::" . $_} = \&$_; } else { # *{$_} = \&{"Orig::". $_}; } } @EXPORT_OK = ( qw( newfunc ), @Orig::EXPORT_OK ); # no warnings 'redefine' - not required here as we didn't import it; sub repl { print "&Repl::repl runs $/"; # finish with our original SUPER::repl(); } sub newfunc { print "&Repl::newfunc runs $/"; } 1;