我想 - 在OS X上敏感地工作.是否可能?

gjt*_*ian 5 macos perl case-sensitive case-insensitive

我正在开发一个使用该-e标志的脚本,如

unless (-e $fileName)
{
  ...
}
Run Code Online (Sandbox Code Playgroud)

这在OS X上工作正常.或者说,它无法正常工作.我希望它区分大小写.该脚本也在Linux机器上运行,-e检查失败 - 正确! - 因为区分大小写.

我尝试使用替代路径open <FILEHANDLE, '$fileName'),但似乎这也是不区分大小写的.

编辑:感谢下面回答的所有人.我知道HFS +不区分大小写,但我认为我可以以某种方式"强迫"它.我最终通过执行以下操作来强制检查:

opendir my($dh), $dirName or die "Couldn't open dir '$dirName'";
my @refFiles = readdir $dh;
closedir $dh;

foreach $refFile (@refFiles)
{
    if ($refFile eq $refFileName)
    {
        $found = 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

着名的口头禅:"它不漂亮,但它有效."

Chr*_*sen 6

缺乏区分大小写的是由于文件系统使用的是(HFS +),而不是Perl函数-eopen,也不是底层的stat(2)打开(2)的系统调用.

默认情况下,HFS +文件系统不区分大小写; 但是,您可以选择在初始化新文件系统时创建区分大小写的HFS +卷(使用" 磁盘工具"," diskutil "或"*newfs_hfs*"等):只需选择"区分大小写"版本.

我已经看到(从一个区分大小写的)启动卷运行时出现(写得不好)程序故障的报告,因此我建议您使用单独的卷来处理区分大小写的工作.例如,使用"Mac OS Extended(区分大小写,日志记录)"文件系统创建磁盘映像(即"稀疏磁盘包映像"),并在需要执行区分大小写的工作时挂载它(例如open ~/case-sensitive.sparsebundle,然后cd /Volumes/Case-sensitive/foobar执行从那里你的案例敏感工作).


Kyl*_*nes 5

默认情况下,HFS +不区分大小写,所以-e必须也是如此,因为它使用文件系统原语来进行检查.在不区分大小写的文件系统中具有区分大小写将是反常和邪恶的; 您可以使用-e确认文件不存在的代码,然后打开截断现有文件,或者打开失败,因为文件存在且不可读/不可写.