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 に答える