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)
着名的口头禅:"它不漂亮,但它有效."
缺乏区分大小写的是由于文件系统使用的是(HFS +),而不是Perl函数-e和open,也不是底层的stat(2)和打开(2)的系统调用.
默认情况下,HFS +文件系统不区分大小写; 但是,您可以选择在初始化新文件系统时创建区分大小写的HFS +卷(使用" 磁盘工具"," diskutil "或"*newfs_hfs*"等):只需选择"区分大小写"版本.
我已经看到(从一个区分大小写的)启动卷运行时出现(写得不好)程序故障的报告,因此我建议您使用单独的卷来处理区分大小写的工作.例如,使用"Mac OS Extended(区分大小写,日志记录)"文件系统创建磁盘映像(即"稀疏磁盘包映像"),并在需要执行区分大小写的工作时挂载它(例如open ~/case-sensitive.sparsebundle,然后cd /Volumes/Case-sensitive/foobar执行从那里你的案例敏感工作).
默认情况下,HFS +不区分大小写,所以-e必须也是如此,因为它使用文件系统原语来进行检查.在不区分大小写的文件系统中具有区分大小写将是反常和邪恶的; 您可以使用-e确认文件不存在的代码,然后打开截断现有文件,或者打开失败,因为文件存在且不可读/不可写.
| 归档时间: |
|
| 查看次数: |
642 次 |
| 最近记录: |