Yes, that makes much more sense. Your problem is that the -e is setting $! when the file doesn't exist. It's staying set when you get back to your homepage.cgi. And apparently your x.pl script is returning undef. I'd check the logic in x.pl to see if that new if statement causes a return.
Update: To elaborate, if you want to do manual error checking like that, it's necessary for you to return something useful from the file you do. Otherwise, the last expression evaluated in the file will be your return value. If that value is undef, you can't tell it apart from those times when do returns undef because of an error or a non-existent file.
-sauoq
"My two cents aren't worth a dime.";
| [reply] [Watch: Dir/Any] [d/l] [select] |
It doesn't cause a return, but it is the last bit of code executed in x.cgi. By why would the file not existing cause x.cgi to return undef? How can this be resolved?
| [reply] [Watch: Dir/Any] |
I was updating as you replied. The last expression evaluated is the value returned by do. If it is undef, then you can't tell it apart from the times when do returns an undef because the file doesn't compile or doesn't exist.
If that if clause is the last thing being evaluated, and the file doesn't exist, it is evaluating to undef and being returned. (And setting $! to boot.) You can probably take care of it with else { return 0 } or similar.
-sauoq
"My two cents aren't worth a dime.";
| [reply] [Watch: Dir/Any] [d/l] [select] |