我将当前类中的一个名为'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");
}
这里发生了什么?
答案 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句柄的地址。