http://www.perlmonks.org?node_id=288749

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

Hi all,

Warning: I have never used eval to error-handle before. I've been avoiding it for more than a year now. I thought I had seen enough examples to be sure how it worked. Obviously I was wrong.

I have code that both creates and loops over objects. The details of the objects shouldn't matter too much, I think. I normally use this object like so:

my $object = My::Class->new(); while (my $value = $object->next_val() ) { # do cool stuff }

But I am using this object in a CGI, and I thought I had best catch problems gracefully, with some nice error explanation rather than just a 500 error. I wanted to use syntax like:

my $object = My::Class->new(); while (my $value = eval { $object->next_val() } ) { if ($@) { print "Error: $@\n"; next(); } # do cool stuff }

This didn't quite work as I expected, though, and I'm not sure why. This code works just fine if the eval succeeds, but it never gets to my error-handling code, even if the eval fails. I have also tested adding the same error-handling code after my while loop.

So, I seem to have some misconception about how eval should behave: can anybody point it out to me, please?