windowsperlpathcase-sensitivecwd

Using Perl on Windows, how can I ensure I get the path in the correct case following a chdir?


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:


Solution

  • #!/usr/bin/perl
    
    use warnings; use strict;
    use Cwd;
    use File::Spec::Functions qw( canonpath );
    use Win32;
    
    print canonpath( cwd ), "\n";
    
    chdir '../source';
    
    print canonpath( cwd ), "\n";
    
    print canonpath( Win32::GetLongPathName( cwd ) ), "\n";
    
    C:\DOCUME~1\...\LOCALS~1\Temp\t\Source> t
    C:\DOCUME~1\...\LOCALS~1\Temp\t\Source
    C:\DOCUME~1\...\LOCALS~1\Temp\t\source
    C:\Documents and Settings\...\Local Settings\Temp\t\Source