为什么回滚方法不适用于DBI句柄?

Fre*_*idt 4 perl module rollback dbi

出于某种原因,我遇到了DBI句柄的麻烦.基本上发生的事情是我在perl模块中创建了一个特殊的连接函数并从执行切换:

do 'foo.pl'
Run Code Online (Sandbox Code Playgroud)

use Foo;
Run Code Online (Sandbox Code Playgroud)

然后我做

$dbh = Foo->connect;
Run Code Online (Sandbox Code Playgroud)

现在由于某种原因我不断收到错误:

无法通过../Foo.pm第171行的包"Foo"找到对象方法"回滚".

所以奇怪的是$ dbh绝对不是Foo,它只是在foo中定义的.无论如何,到目前为止我还没有遇到任何麻烦.有什么想法吗?

编辑:@Axeman:connect原来不存在.在我们使用之前我们使用的字符串之前:

do 'foo.pl';
$dbh = DBI->connect($DBConnectString);
Run Code Online (Sandbox Code Playgroud)

这样connect的事情就是这样的

sub connect {
    my $dbh = DBI->connect('blah');
    return $dbh;
}
Run Code Online (Sandbox Code Playgroud)

Ovi*_*vid 7

我们需要看到Foo中的实际代码能够回答这个问题.您可能希望阅读文档中的DBI子类,以了解如何正确执行此操作.

基本上,你需要Foo正确地继承DBI(再次,你需要阅读文档),或者你需要声明一个connect函数来正确委托给DBI :: connect方法.但要注意为OO代码编写一个产品包装器.以这种方式维持状态变得非常困难.