Consider the following code:
print cwd . "\n";
$str= "../source"; # note the lower case 's'
chdir($str);
print cwd . "\n";
If my current directory is c:\parentdir\Source (note the capital 'S'), the output of this will be:
c:/parentdir/Source c:/parentdir/source
This causes problems in a subroutine of mine that cares about the correct case of folder names. $str is passed in to my subroutine, so I can't know ahead of time whether it has the correct case. How do I determine the case-correct name of a path that matches $str?
More detail here:
- I realize that
../sourceis a pathological example, but it serves to illustrate the problem. It occurs even if$stris requesting a folder other than the current one. - I have tried numerous options, including
rel2abs, a glob search on$str, and others, but they all seem to return "source" instead of "Source". - I could search
$str/..for all directories, convert them all to absolute paths and compare them to an absolute path version of$str, but that seems like a hack. I was hoping for something more elegant.