sub make_report1 {
my $dbh = &_get_dbh;
&_do_make_report($dbh);
$dbh->disconnect;
1;
}
sub _do_make_report {
my $dbh = shift;
## etc...
}
sub make_all_reports {
# connect to the database
my $dbh = &_get_dbh;
&_do_make_summary_report($dbh);
&_do_make_report1($dbh);
&_do_make_report1($dbh);
...
# close the database connection
$dbh->disconnect;
# return happy and healthy
return (1);
}
####
package your_package;
sub AUTOLOAD {
no strict qw(refs);
our $AUTOLOAD;
$AUTOLOAD =~ m{ (.*) :: (.*?) $ }x;
my $dispatch_name = "$1::_do_$2";
if (defined &{$dispatch_name}) {
*$AUTOLOAD = sub {
my $dbh = &_get_dbh;
my $rc = &$dispatch_name(@_);
$dbh->disconnect();
return $rc;
};
goto &$AUTOLOAD;
}
else {
croak("Unable to autogenerate method for '$AUTOLOAD': no such function '$dispatch_name'");
}
}
####
$your_package::DBH = undef;
sub _get_dbh() {
defined($your_package::DBH)
and return $your_package::DBH;
$your_package::DBH = DBI->connect...
return $your_package::DBH;
}