http://qs321.pair.com?node_id=99493

Cirollo has asked for the wisdom of the Perl Monks concerning the following question:

I've bumped into a rather odd problem when trying to use some of the aggregate DBI functions, like selectcol_arrayref. Since many of them return array references, I tend to dereference the array when I call the method. For example,
@ary = @{$dbh->selectcol_arrayref($sql)};
My problem occurs when the statement in $sql returns zero rows. Consider the following script:
#!/usr/bin/perl -w use strict; use DBI; $\ = "\n"; # Input dbname, user & pass on the command line my ($dbname, $dbuser, $dbpass) = @ARGV; my $dbh = DBI->connect("DBI:Oracle:$dbname", $dbuser, $dbpass, {RaiseE +rror => 1}) or die $DBI::errstr; # This query returns no rows my $sql = qq~ SELECT dummy FROM dual WHERE dummy = '1' ~; # This works just fine... my $ref = $dbh->selectcol_arrayref($sql) or die $dbh->errstr, $!; print "\$ref is defined: $ref" if defined $ref; print for @$ref; # But this one dies! my @ary = @{$dbh->selectcol_arrayref($sql)} or die $dbh->errstr, $!; print for @ary;
In the second attempt to make the query, $dbh->errstr is undef, meaning that the DB query worked fine. But, </code>$!</code> contains this:
No such file or directory at ./dbtest.pl line 17.
If I remove the die, everything works the way I want it to, but I would like to know why it is dying to begin with.