在不同 .pm 文件中的“对象”之间共享 $dbh 变量时,有人可以给我一些指导。
例如,我的主模块说 Foo.pm 有一个新的构造函数等,我可以给它一个 dbh 或创建一个 dbh,然后通过将它作为参数传递给 Bar.pm 的新构造函数来共享它,然后重新在 Bar->new 中分配,但这似乎我正在做很多工作来管理这个变量。
这是一种简单而优雅的方法吗?我研究了 Exporter 和其他一些示例,但似乎没有一个是直截了当的。
谢谢!
在不同 .pm 文件中的“对象”之间共享 $dbh 变量时,有人可以给我一些指导。
例如,我的主模块说 Foo.pm 有一个新的构造函数等,我可以给它一个 dbh 或创建一个 dbh,然后通过将它作为参数传递给 Bar.pm 的新构造函数来共享它,然后重新在 Bar->new 中分配,但这似乎我正在做很多工作来管理这个变量。
这是一种简单而优雅的方法吗?我研究了 Exporter 和其他一些示例,但似乎没有一个是直截了当的。
谢谢!
我想你真正想要的是从与它一起工作的代码中控制 $dbh 创建。最简单的方法是,嗯,
my $dbh;
sub get_dbh {
if ( $dbh is bad ) {
reconnect or whatever
}
return $dbh || die;
}
然后在你的代码中访问它就像
get_dbh()->do("your sql");
您可以将该get_dbh()
函数放在一个单独的模块中,然后从项目中的任何位置调用它——与 perl 一样,它只会被包含一次,并且它的局部静态变量 $dbh 将仅存在于 perl 进程中的一个副本中。
有许多可能的方法来实现这一点,编写一个如上所述的函数(并且可能传递对该函数的引用而不是传递 $dbh)就是其中之一。还有很多其他的,取决于你的设计和个人喜好——一个单例类,一个与上述函数相关的变量,甚至是一个模仿 DBI 的类......这取决于你,但这应该是一段代码,在你的项目中传播这个逻辑是一个坏主意。