Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re^3: Unify windows filenames

by graff (Chancellor)
on Sep 20, 2009 at 03:59 UTC ( #796345=note: print w/ replies, xml ) Need Help??


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

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.


Comment on Re^3: Unify windows filenames
Download Code
Re^4: Unify windows filenames
by Anonymous Monk on Sep 20, 2009 at 04:17 UTC
    I think the idea is to create File::Spec::Darwin
Re^4: Unify windows filenames
by Your Mother (Canon) on Sep 20, 2009 at 04:55 UTC

    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); }
        (I believe darwin is "unix enough" to fit within Unix.pm),

        I hear Schwern thinks so :) Unix.pm use to be more polluted than it is now, so I think File::Spec needs darwin entry to point to File::Spec::Mac

        my %module = ( darwin => 'Mac', MacOS => 'Mac', MSWin32 => 'Win32', os2 => 'OS2', VMS => 'VMS', epoc => 'Epoc', NetWare => 'Win32', # Yes, File::Spec::Win32 works on NetWar +e. symbian => 'Win32', # Yes, File::Spec::Win32 works on symbia +n. dos => 'OS2', # Yes, File::Spec::OS2 works on DJGPP. cygwin => 'Cygwin');

      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". ;-)

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://796345]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (9)
As of 2014-09-23 03:26 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (210 votes), past polls