2

在不同 .pm 文件中的“对象”之间共享 $dbh 变量时,有人可以给我一些指导。

例如,我的主模块说 Foo.pm 有一个新的构造函数等,我可以给它一个 dbh 或创建一个 dbh,然后通过将它作为参数传递给 Bar.pm 的新构造函数来共享它,然后重新在 Bar->new 中分配,但这似乎我正在做很多工作来管理这个变量。

这是一种简单而优雅的方法吗?我研究了 Exporter 和其他一些示例,但似乎没有一个是直截了当的。

谢谢!

4

2 回答 2

2

我想你真正想要的是从与它一起工作的代码中控制 $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 的类......这取决于你,但这应该是一段代码,在你的项目中传播这个逻辑是一个坏主意。

于 2013-04-27T10:56:24.213 回答
-1

如果您使用Moose来构建您的对象,您可以将您的数据库句柄封装在一个角色中,并将其放入需要访问数据库的类中。

于 2013-04-27T06:02:49.810 回答