Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why am I getting 0E0 for the return value of the DBI "execute" method?

Tags:

perl

dbi

I have written a sample Perl program to delete data from a database table.

This is the code I have written,

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";
    }
}

If I have executed the above it should print successful message and then the number of rows deleted.

If the table was empty it was printing 0E0 instead of 0. I don't know how it is returning the value like this?

Can someone please explain me how it was working?

like image 860
adhi .b Avatar asked Jul 28 '16 12:07

adhi .b


1 Answers

It is done in this way to allow to test whether the operation was successful. The reason is that '0E0' (as a string) is a true value, but 0 is a false value in Perl. Therefore:

  1. you can test the return value in if to determine whether the operation was successful (true means success),

  2. but you can also use the return value as a number to know the exact number of deleted rows, since 0E0 evaluates to 0 when used as a number.

If you need just the number of deleted rows, you can use $res + 0 or $res * 1. But only after you have tested that the operation was successful.

like image 65
Ruslan Batdalov Avatar answered Sep 18 '22 18:09

Ruslan Batdalov