in reply to Re: Unify windows filenames
in thread Unify windows filenames

The latest File::Spec is always available under http://search.cpan.org/dist/PathTools

Replies are listed 'Best First'.
Re^3: Unify windows filenames
by graff (Chancellor) on Sep 20, 2009 at 03:59 UTC
    Ah -- right, of course. Okay, I got that, and it isn't fixed. Guess I should report to the maintainer -- I think the fix in "File/Spec/Unix.pm is pretty simple:
    193c193 < sub case_tolerant { 0 } --- > sub case_tolerant { ( $^O eq 'darwin' ) ? 1 : 0 }

    There's even more strangeness about the darwin path/name "logic": the bash shell's file-name completion function is case-sensitive, even though the underlying OS file-name handling is not. So for most of the command-line stuff I do (which is most of what I do), it feels (and I have to type) as if the file names are case-sensitive, even though they aren't. Go figure.

      Even this isn't enough. You can have a case sensitive file tree on Darwin, you just have to ask for it as it's not the default. :(

        Well, I'll certainly want to learn more about that -- I had no idea. (I wonder what sorts of mac-specific magic would break when you tweak that...)

        Meanwhile, Anonymonk's notion of "File/Spec/darwin.pm" aside (I believe darwin is "unix enough" to fit within Unix.pm), perhaps something like the following would handle the range of situations, given that we are talking about unix-based and unix-like systems, all of which must have a path called "/tmp":

        sub case_tolerant { my $t1 = (stat "/tmp")[1]; my $t2 = (stat "/TMP")[1]; (defined($t2) and $t2 == $t1); }

        There is a conceptual error in File::Spec: It assumes that the ENTIRE operating system is either case sensitive or not. This was acceptable for "old" operating systems that could mount only their native file systems, but modern systems can mount foreign file systems, each with different behaviour. Linux' ext2/3/4 are clearly case sensitive, FAT is case insensitive even under linux. VFAT and NTFS usually are case insensitive but case preserving, but there is a mount option ("posix") that "allows two files that only differ in case" - so VFAT and NTFS can be case sensitive.

        The correct return value for File::Spec::case_tolerant() should be "it depends" for most operating systems. You need to test each directory along the path, and the answer may be different for each directory.

        Alexander

        --
        Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)
      I think the idea is to create File::Spec::Darwin