gpt4 book ai didi

perl - 无法通过包子类化 DBI 定位对象方法

转载 作者:行者123 更新时间:2023-12-01 08:40:11 31 4
gpt4 key购买 nike

这是我第一次尝试使用 perl 进行子类化,我想知道为什么会出现这个简单的错误...
“无法通过/home/dblibs/WebDB.pm 第 19 行的包“WebDB::st”找到对象方法“prepare”。”。似乎找到模块 WebDB ok,但不是::st
中的准备子例程首先这是我的包(两个包都在一个文件中,WebDB.pm)

package WebDB;
use strict;
use DBI;

sub connect {
my $dbh = (DBI->connect ("DBI:mysql:test:127.0.0.1", "root","",
{ PrintError => 1, RaiseError => 0 }));
return bless $dbh, 'WebDB::st';
}

package WebDB::st;
our @ISA = qw(::st);
sub prepare {
my ($self, $str, @args) = @_;
$self->SUPER::prepare("/* userid:$ENV{USER} */ $str", @args);
}


1;

我还尝试将“我们的 @ISA = qw(;;st)”替换为“使用基本 'WebDB'”和同样的问题。我认为这可能是我忽略的非常简单的事情。非常感谢!简

最佳答案

子类化 DBI 必须恰到好处才能正常工作。阅读 Subclassing the DBI仔细正确地设置 RootClass(或在您的根类上显式调用 connect 并将 @ISA 设置为 DBI)。确保您有 WebDB::st 子类 DBI::st 和 WebDB::db 子类 DBI::db (即使没有方法被覆盖)。无需反悔。

避免使用base;它有一些不幸的行为导致它被弃用,特别是在与不在它们自己的文件中的类一起使用时。显式设置 @ISA 或使用较新的 parent pragma:

package WebDB;
use parent 'DBI';
...
package WebDB::db;
use parent -norequire => 'DBI::db';
...
package WebDB::st;
use parent -norequire => 'DBI::st';
...

关于perl - 无法通过包子类化 DBI 定位对象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4136099/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com