in reply to opening missing file inside eval statement

You seem to be assuming that Perl by default* dies if an open fails. It doesn't (and be glad it doesn't). As one of the creators of Unix said "not being able to open a file is not exceptional". Hence, in C, and therefore also in Perl, open doesn't die (nor throws an exception) if a file cannot be opened. Its return value tells you whether it succeeded or not.

*But you can install autodie.