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);