macos - 我希望 -e 在 OS X 上区分大小写。这可能吗?

标签 macos perl case-sensitive case-insensitive

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

unless (-e $fileName)
{
  ...
}

这在 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;
    }
}

著名的口头禅:“它不漂亮,但它有效。”

最佳答案

不区分大小写是由于您使用的文件系统 (HFS+),而不是 Perl 函数 -eopen ,也不是底层的 stat(2) 和 open(2) 系统调用。

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

我已经看到从区分大小写的启动卷运行时(写得不好)程序出现故障的报告,因此我建议您为区分大小写的工作使用单独的卷。例如,创建一个带有“Mac OS Extended (Case-sensitive, Journaled)”文件系统的磁盘镜像(即“sparse disk bundle image”),并在需要做区分大小写的工作时挂载它(例如 open ~/case-sensitive.sparsebundle ,然后 cd /Volumes/Case-sensitive/foobar 从那里做区分大小写的工作)。

关于macos - 我希望 -e 在 OS X 上区分大小写。这可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8920330/

相关文章:

case-sensitive - HTTP ETag 应该区分大小写吗?

mysql - 如何在mysql中搜索确切的字符串

Git 显示状态干净,但 checkout 提示覆盖未跟踪的文件

ios - Xcode 5 预期标识符错误不会消失

macos - swift 2 : Detect Function Key Presses

perl - 如何通过 REST 接口(interface)使用 Catalyst 和 uri 链接?

perl - 如何将常量传递给Perl子例程?

ios - getCString 和 withCString 在不同架构上的行为

java - 如何检查 JDK 是为什么架构构建的?/在 mac 上安装的 JDK 是针对arm(又名arm64)还是针对Intel CPU(又名amd64)?

perl - 我应该点击哪个按钮?