Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Re^4: Unify windows filenames

by Your Mother (Archbishop)
on Sep 20, 2009 at 04:55 UTC ( [id://796353]=note: print w/replies, xml ) Need Help??


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

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. :(

Replies are listed 'Best First'.
Re^5: Unify windows filenames
by graff (Chancellor) on Sep 20, 2009 at 15:19 UTC
    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');
        my %module = ( darwin => 'Mac', MacOS => 'Mac', ...
        No. Really, not that. "Mac" in that context refers to "Classic" (pre-macosx, ie. OS-9), which is absolutely a different animal and doesn't work like darwin at all.
Re^5: Unify windows filenames
by afoken (Chancellor) on Sep 23, 2009 at 04:18 UTC

    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
Domain Nodelet?
Node Status?
node history
Node Type: note [id://796353]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others surveying the Monastery: (4)
As of 2024-03-29 01:57 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found