in file FOO/Bar/Baz.pm package FOO::Bar::Baz; sub some_function { login(); } in file FOO/Bar.pl package FOO::Bar; sub login { # something interesting } #### --- in the new module FOO/Bar.pm package FOO::Bar sub login { } --- in FOO/Bar/Baz.pm package FOO::Bar::Baz use FOO::Bar; sub some_function { FOO::Bar::login(); } --- in the script (remove the login function and proceed as normal) #### --- in FOO/Bar/Baz.pm my %function_table; sub set_callback { my ($key, $function) = @_; $function_table{$key} = $function; } sub some_function { if (defined $function_table{'login'}) { $function_table{'login'}->(); } else { die "No callback declared for login"; } } --- in FOO/Bar.pl use FOO::Bar; sub login { } FOO::Bar->set_callback('login', \&login);