Perl 什么';当调用errstr时,这个DBI:db对象会发生什么情况?

Perl 什么';当调用errstr时,这个DBI:db对象会发生什么情况?,perl,reference,moose,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错误:DBI::db=HASH(0x

我正在将当前类中名为“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错误:DBI::db=HASH(0xaf43130)->errstr

但是,这会起作用,并返回正确的错误字符串:

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

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

这里发生了什么?

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

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

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

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

您试图在字符串中插入函数调用

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

$self->log->warn("Warning SQL error: ".$dbh->errstr) if ($@);
这部分错误: DBI::db=HASH(0xaf43130)


是数据库句柄的地址。

您试图在字符串中插入函数调用

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

$self->log->warn("Warning SQL error: ".$dbh->errstr) if ($@);
这部分错误: DBI::db=HASH(0xaf43130)

是数据库句柄的地址