Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked

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/ 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.

Replies are listed 'Best First'.
Re^4: Unify windows filenames
by Your Mother (Bishop) 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/" aside (I believe darwin is "unix enough" to fit within, 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,

        I hear Schwern thinks so :) 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.


      Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)
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

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://796345]
[Eily]: choroba but does $name = $1 solve the issue ?
[Eily]: if so, most subs start with my (VARIABLES) = @_ anyway
[moritz]: for short subs, I sometimes let them work on $_[0] directly
[Eily]: moritz but that should be fine unless you modify them

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (7)
As of 2018-02-22 17:24 GMT
Find Nodes?
    Voting Booth?
    When it is dark outside I am happiest to see ...

    Results (296 votes). Check out past polls.