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?
In reply to Error Handling Misconception by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |