0

我将当前类中的一个名为 'dbc' 的属性委托为 DBIx::Connector,以便我可以从内部方法调用 $self->dbc->dbh,但是我并没有真正理解我看到的一些行为在 DBI::db 实例上调用 'errstr' 方法时:

这个:

eval {
    $dbh->do($sql);
};

$self->log->warn("Warning SQL error: $dbh->errstr") if ($@);

返回WARN - Warning SQL error: DBI::db=HASH(0xaf43130)->errstr

但是,这可行,并返回正确的错误字符串:

eval {
        $dbh->do($sql);
    };

    if($@){
        my $errstr = $dbh->errstr;
        $self->log->warn("Warning SQL error: $errstr");
    }

这里发生了什么事?

4

2 回答 2

4

Perl 不会在双引号字符串中插入方法调用。 $dbh->errstr正在调用一个方法。尝试:

$self->log->warn("Warning SQL error: " . $dbh->errstr) if $@;
于 2012-07-31T20:07:11.693 回答
2

您正在尝试在字符串中插入函数调用。

尝试将警告字符串与函数调用连接起来。

$self->log->warn("Warning SQL error: ".$dbh->errstr) if ($@);

这部分错误:DBI::db=HASH(0xaf43130)

是 db 句柄的地址。

于 2012-07-31T20:07:24.340 回答