Check if your filesystem is case sensitive or case tolerant (insensitive) in Perl 6
Branch: master
Clone or download
labster Merge pull request #5 from samcv/SPDX-license
Use SPDX identifier in license field of META6.json
Latest commit b6ab64f May 2, 2017
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib/File/Spec
t track spec rename of $*OS to $*KERNEL.name Dec 29, 2015
.travis.yml Add Travis CI Dec 20, 2015
LICENSE add license and panda Apr 14, 2013
META6.json
README.md documentation + a test Apr 14, 2013

README.md

p6-File-Spec-Case

Check if your filesystem is case sensitive or case tolerant (insensitive)

SYNOPSIS

use File::Spec::Case;
say File::Spec::Case.tolerant;  #tests case tolerance in $*CWD
my $folder = "/path/to/folder";
say "case sensitive"
    if File::Spec::Case.sensitive($folder, :no-write);
say "$folder is case-{ File::Spec::insensitive($folder) ?? 'in' !! ''}sensitive";

DESCRIPTION

Given a directory, this module attempts to determine whether that particular part of the filesystem is case sensitive or insensitive. In order to be platform independendent, this module interacts with the filesystem to attempt to determine case, because nowadays it's entirely possible to support multiple case filesystems on Windows, Linux, and Mac OS X.

This module splits little-used functionality off from File::Spec, and has moved to its own module if you need it. Unlike in Perl 5, it now applies only to a specific directory -- with symlinks and multiple partitions, you can't assume anything beyond that.

METHODS

tolerant

method tolerant (Str:D $path = $*CWD, :$no_write = False )

Method tolerant now requires a path (as compared to Perl 5 File::Spec->case_tolerant), below which it tests for case sensitivity. The default path it tests is $*CWD. A :no-write parameter may be passed if you want to disable writing of test files (which is tried last).

File::Spec::Case.tolerant('foo/bar');
File::Spec::Case.tolerant('/etc', :no-write);

It will find case (in)sensitivity if any of the following are true, in increasing order of desperation:

  • The $path passed contains <alpha> and no symbolic links.
  • The $path contains <alpha> after the last symlink.
  • Any folders in the path (under the last symlink, if applicable) contain a file matching <alpha>.
  • Any folders in the path (under the last symlink, if applicable) are writable.

Otherwise, it returns the platform default.

insensitive

A synonym for .tolerant.

sensitive

An antonym for .tolerant -- that is, it returns not tolerant. Takes the same arguments as tolerant.

default-case-tolerant

The method of last resort for .tolerant, this returns the default value for whether the platform is insensitive to case. If passed an OS string, it will look for the default on that OS instead.

The default is essentially what you'll get if you do a default install of your operating system.

always-case-tolerant

Returns True if your OS is on the list of þe olde Turing machine systems of operating with case tolerance, False otherwise. If you pass another OS string, it will check that instead of your own OS.

This is used as a shortcut in .tolerant for machines which never support case-sensitive file naming.

SEE ALSO

AUTHOR

Brent "Labster" Laabs, 2013.

Contact the author at bslaabs@gmail.com or as labster on #perl6. File bug reports on github.

COPYRIGHT

This code is free software, licensed under the same terms as Perl 6; see the LICENSE file for details.