adhi .b adhi .b - 2 months ago 6x
Perl Question

what is the return value of do( ) method supplied by the DBI in perl?


I have written a sample code to delete the data from the table in the database,In that I have used the
method to execute the query.
This is the code I have written,

use DBI;
my $dbh = DBI->connect("DBI:Pg:host=;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
instead of
.?,I don't know how it is returning the value like this?

Someone please explain me how it was working.Thanks in advance.


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.

More about true and false values: True and false