|P is for Practical|
Win32::StrictFileNames does that
That seems to make use of GetLongPathName(), too.
It won't build successfully for me using mingw - all tests die with the following diagnostic:
t/7-rmdir.t ... Can't load 'C:\sisyphusion\Win32-StrictFileNames-0.01\blib\arch/ auto/Win32/StrictFileNames/StrictFileNames.dll' for module Win32::StrictFileNames: load_file:Invalid access to memory location at C:/MinGW/perl512/lib/DynaLoader.pm line 200.
at t/7-rmdir.t line 8
Update: And similar errors when building using an MS compiler (MSVC++-7.0) instead of gcc.
Also, I notice that the author provides, on his own ppm repo, packages for this module only for perls 5.6 and 5.8. (I don't know if that's because they pose a problem with later versions of perl.)
Does use Win32::StrictFileNames; catch *all* instances of case-mismatch (eg with '-e', 'open') ?
Looks like an interesting module to re-visit if I get the time (before I forget all about it :-).
For the moment, the Win32::GetLongPathName() function will suffice.
And interesting that, going by your example, the module itself works irrespective of the case that's used when loading it.