当调用errstr时,这个DBI:db对象发生了什么?

时间:2012-07-31 20:00:03

标签: perl reference moose

我将当前类中的一个名为'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");
    }

这里发生了什么?

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

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

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

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

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

是db句柄的地址。