How is -e $file true when $image is the empty string '' or even undef?
-e (or any of the other filetest functions documented here) accepts either a filehandle or a directory handle as its argument. When $image is empty or undefined, the assignment my $file = "$dir/$image"; initialises $file to just $dir/, which -e accepts as a directory handle — and since that directory exists, -e returns true.
(Note that if warnings are enabled, the concatenation of a string with undef will result in a warning like this:
Use of uninitialized value $image in concatenation (.) or string at -e + line...
which is a useful indicator that something is wrong.)
Your suggested fix — checking that $image has a true value — looks good to me. Another possibility is to confirm that $file is not a directory:
if (!-d $image && -e $image) { print "Yes image exists\n"; } else { print "No image doesn't exist\n"; }
Hope that helps,
| Athanasius <°(((>< contra mundum | Iustus alius egestas vitae, eros Piratica, |
In reply to Re: Check if file exists
by Athanasius
in thread Check if file exists
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |