Perl模块 - 共享数据库连接

时间:2013-04-26 23:31:10

标签: perl perl-module dbi

在"对象"之间共享$ dbh变量时,有人可以给出一些最好的方法吗?在不同的.pm文件中。

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

这是一种简单而优雅的方法吗?我研究过出口商和其他一些例子,但似乎都不是直截了当的。

谢谢!

2 个答案:

答案 0 :(得分: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的类......这取决于你,但那应该是一个这段代码,在整个项目中传播这个逻辑是一个坏主意。

答案 1 :(得分:-1)

如果您正在使用Moose来构建对象,则可以将数据库句柄封装在role中,并将其置于需要数据库访问的类中。