2016-07-28 25 views
5

私はデータベーステーブルからデータを削除するサンプルPerlプログラムを書いています。 DBIの "execute"メソッドの戻り値として0E0が返されるのはなぜですか?

この

は、私はそれ以上の成功のメッセージと、その後削除された行の数を印刷する必要があります実行している場合は

use DBI; 

my $dbh = DBI->connect("DBI:Pg:host=192.168.12.23;port=5432;", "adhi");                     
if ($dbh) { 

    print "Connected successfully\n"; 

    my $exe = $dbh->prepare("delete from perl_test.test"); 
    my $res = $exe->execute(); 
    if ($res) { 
     print "deleted the table successfully of rows: $res\n"; 
    } 
} 

、私が書いたコードです。

テーブルが空の場合は、0の代わりに0E0を印刷していました。 このような値をどのように戻しているのかわかりません。

誰かがどのように動作していたか教えていただけますか?

+1

"*私は' 'do'メソッドを使ってクエリを実行していますが*あなたのプログラム*は' do'メソッドを使わないので、その文を削除しました。 Perlコードを読みやすくするために、特に助けを求める前に、あなたのPerlコードを適切にインデントしてください。 – Borodin

+0

ありがとうBorodin。私はそれを変更します。 –

答えて

9

このようにして、操作が成功したかどうかをテストできます。その理由は、'0E0'(文字列として)は真の値ですが、0はPerlでは偽の値です。したがって:

  1. あなたは、(真の成功を意味する)操作が成功したかどうかを判断するためにifに戻り値をテストする

  2. しかし、あなたはまた、正確に知っている数として戻り値を使用することができますすることができます削除された行の数.0E0は数値として使用されたときに0と評価されるため。あなたが削除された行の数だけが必要な場合は

、あなたは$res + 0$res * 1を使用することができます。しかし、操作が成功したことをテストした後でなければなりません。

関連する問題