Hmmm. I would say both $! and the filename are very important to include in the error message, if only because malforming the filename in some way is an extremely common problem and can occur in many ways.
What is especially insiduous and hard to track, is when a file exists with the malformed name. Now that is a real pain in the butt.
Here are some common ways of malforming filenames:
1 - path missing. This often occurs when using the result directly from readdir or File::Find::find without adding the path.
2 - linebreak in filename. This typically occurs when newbies capture the output of `ls` or `dir` instead of using readdir as they should and forget to chomp.
3 - Wrong case. Perl, like Unix, is case sensitive, but users raised on Windows and Mac systems tend to forget this.
4 - Concatenating a file name in the wrong way, for example:
my $path = '/usr/home/jones';
my $file = 'foo.txt';
my $filename = $path . $file.
This will result in the nonexistent filename /usr/home/jonesfoo.txt, but is hard to catch.
5 - Using unescaped backslashes on Windows (extremely common). Filenames like "C:\terry\new.html" are a common source of Windows/Perl nightmares (Perl reads it as "C: TAB erry NEWLINE ew.html"). Use ordinary slashes under Windows and save yourself endless hassle as well as making your code more portable as a side effect.
I hope this helps someone.
Regards,
Helgi Briem
|