该包有一个 DBI->connect 的包装器:
Package MyPackage;
our $dbh;
sub connect {
$dbh = DBI->connect(...)
return $dbh;
}
sub disconnect {
$dbh->disconnect;
#some other things...
}
In the client program:
{
my $dbh = MyPackage->connect(...)
}
MyPackage 只是一个函数包,它不是一个类。但现在我想使用 RAII,当离开客户端调用 MyPackage->connect 的范围时,调用断开连接。无法调用 DESTROY 函数,因为我们不返回 MyPackage 的对象。我不想更改接口和客户端代码,例如添加新方法,所以我认为也许有一种方法可以从 DB 句柄继承并覆盖它的 DESTROY 方法。在 DESTROY 方法中,它可以调用 MyPackage- >断开连接。
这是可行的还是有人可以帮助想出任何其他好的解决方案?非常感谢你。