perl -e "if ('0E0') { print qq[hi\n] }"
hi

OE0 as a string evaluates to true. If you use it as a bareword / numeric then it's false, which is what your eval example below is doing.

Adam


On 13-11-07 11:29 AM, Xinhuan Zheng wrote:
one correct - In both cases, the return value is evaluated to false.

How do you distinguish?

- xinhuan

From: Xinhuan Zheng <xzh...@christianbook.com
<mailto:xzh...@christianbook.com>>
Date: Thursday, November 7, 2013 11:12 AM
To: Perrin Harkins <phark...@gmail.com <mailto:phark...@gmail.com>>
Cc: mod_perl list <modperl@perl.apache.org <mailto:modperl@perl.apache.org>>
Subject: Re: Apache::DBI connect

I don't actually understand why you did that.  What was wrong with the normal 
ping?

With Oracle DRCP, even though ping succeeds, the connection to the
server process is actually terminated. Or ora_ping() may return 0E0
"zero but true" and undef. I don't know. ora_ping() is foreign to me. I
made the change based on what Apache::DBI the document said.

In any case, there's no need to change the Apache::DBI code, even with your "select 
1 from dual" test.   It returns a true value (0E0) if it succeeds and a false value 
(undef) if it fails.

In both cases, the return value is evaluated to true:

200: if ($Connected{$Idx} and (!$needping or eval{$Connected{$Idx}->ping}))

eval{0E0} and eval{undef} both return true. I did test that. How do you
distinguish?

Did your script succeed in reconnecting after it lost the connection?

Yes.

Yes, I haven't forgotten about that, but I haven't had time to work on it yet.  
You can try fixing it yourself by looking at the code in Apache::DBI that 
checks if the server is starting under apache 1.x.  Otherwise, I will 
eventually get to it.

I don't understand that piece of code. I can't do the change. Hope you
can help.

- xinhuan

From: Perrin Harkins <phark...@gmail.com <mailto:phark...@gmail.com>>
Date: Thursday, November 7, 2013 11:00 AM
To: Xinhuan Zheng <xzh...@christianbook.com
<mailto:xzh...@christianbook.com>>
Cc: mod_perl list <modperl@perl.apache.org <mailto:modperl@perl.apache.org>>
Subject: Re: Apache::DBI connect

On Thu, Nov 7, 2013 at 9:46 AM, Xinhuan Zheng <xzh...@christianbook.com
<mailto:xzh...@christianbook.com>> wrote:
The $ok is undef. In the case if the test does succeed (like the first select), 
$ok returns 0E0.

That all sounds good.  0E0 is a true value in Perl.  It means "zero but
true."  And undef is a false value.  You don't need to test for undef.

Since I changed DBD::Oracle subroutine ping to use 'select 1 from dual',

I don't actually understand why you did that.  What was wrong with the
normal ping?

In any case, there's no need to change the Apache::DBI code, even with
your "select 1 from dual" test.  It returns a true value (0E0) if it
succeeds and a false value (undef) if it fails.

Did your script succeed in reconnecting after it lost the connection?

I have another request. The Apache::DBI cached a dead database handle for apache 
version 1.3.42 if  startup.pl <http://startup.pl> create a database handle. The 
apache
child processes inherits this dead handle. It doesn't cause application
error but it does take memory space. If there is many apache processes,
that's not good. Can you please identify and change the code for this
problem?

Yes, I haven't forgotten about that, but I haven't had time to work on
it yet.  You can try fixing it yourself by looking at the code in
Apache::DBI that checks if the server is starting under apache 1.x.
  Otherwise, I will eventually get to it.

- Perrin


Reply via email to