[Gllug] perl eval()

Alain Williams addw at phcomp.co.uk
Thu Jun 20 11:41:24 UTC 2002


On Thu, Jun 20, 2002 at 12:22:03PM +0100, will wrote:
> Hi all,
> 
> A bit OT but this seems like the best place to ask.
> 
> I have been experimenting with the perl DBI the last couple of days and have come upon a bit of a 
> problem.  I need to trap the errors returned when doing things like connecting to the database as I 
> don't want the script to die if there was an error.  The only way to do it that I have found so far 
> however is to wrap the piece of code that might fail in eval() 
> (http://search.cpan.org/doc/JWIED/Msql-Mysql-modules-1.2219/mysql/lib/DBD/mysql.pm).  In Perl in a 
> Nutshell it says about eval():
> 
> "Evaluates the expression or code in its argument at runtime as a separate Perl program..."
> 
> Does this mean that another interpreter is fired up to run the code in the eval?  This is a bit 
> worrying as the resources on the box are pretty minimal.  Is there a better way of trapping the 
> errors returned from the DBI that I am unaware of?

What I do is:
	my $warn = $SIG{__WARN__};      # Take & reset
        $SIG{__WARN__} = \&Nothing;
	$LynxDbh->do("$SqlVerb $ReturnTable SET" .
		.......
	 ) ||
                &Winge("$SqlVerb $ReturnTable for TNN '%s' from %s to %s, failed %s", $ttn,
                        $Fields[0], $Fields[1], $LynxDbh->errstr);

	$SIG{__WARN__} = $warn;

	.....

# This does nothing: use to suppress warnings.
sub Nothing {
        ;
}

So I still trap the error, but don't have it complain itself to stderr - my function Winge() does that.

-- 
Alain Williams

#include <std_disclaimer.h>


-- 
Gllug mailing list  -  Gllug at linux.co.uk
http://list.ftech.net/mailman/listinfo/gllug




More information about the GLLUG mailing list