パッケージには 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 は単なる関数パッケージであり、クラスではありません。しかし、クライアントがMyPackageを呼び出すスコープを離れるときに、RAIIを使用したい-> connect、disconnectが呼び出されます。MyPackage のオブジェクトを返さないため、DESTROY 関数を呼び出すことができません。新しいメソッドを追加するなど、インターフェースとクライアントコードを変更したくないので、DBハンドルから継承し、そのDESTROYメソッドをオーバーライドする方法があると思います.DESTROYメソッドでは、MyPackageを呼び出すことができます- >切断します。
それは実行可能ですか、それとも誰かが他の良い解決策を考えるのを手伝ってくれますか? どうもありがとうございました。