【发布时间】:2023-04-09 19:40:02
【问题描述】:
简单的测试用例(用于演示问题):
mkdir -p ./lib1/Class ./lib2/Class
touch ./lib1/Class/Name.pm ./lib2/Class/NAME.pm
所以,有:
./lib1/Class/Name.pm
./lib2/Class/NAME.pm
需要在不区分大小写的文件系统(OS X 的 HFS+)中搜索正确的文件。
以下适用于区分大小写的文件系统,
#!/usr/bin/env perl
use 5.014;
use strict;
use warnings;
my @DIRS = qw(./lib1 ./lib2);
for my $class ( qw(Class::Name Class::NAME) ) {
my $file = findClassFile($class);
say $file;
}
sub findClassFile {
my($file) = @_;
$file =~ s|::|/|g;
$file .= ".pm";
for my $dir (@DIRS) {
return "$dir/$file" if( -e "$dir/$file" );
}
return undef;
}
和打印
./lib1/Class/Name.pm
./lib2/Class/NAME.pm
在 OS X 上,打印不正确:
./lib1/Class/Name.pm
./lib1/Class/NAME.pm
如何在 OSX 的不敏感文件系统上找到正确的文件名?
Ps:现在我只想到使用opendir/readdir/chdir 编写和递归例程并检查来自readdir 的文件名。不至于破旧……还有更简单的方法吗?
【问题讨论】:
-
"if (-e "string"); 中的 '-e' 部分是什么?
-
@wald : -e: 检查文件是否存在...
perldoc -f -X -
readdir有什么问题(如果你想要递归的话,File::Find)? -
@ThisSuitIsBlackNot 没有任何问题 - 只是不太好。 IS 是否可以解决,但希望有一些更优雅、更短、更快、更好(选择一些)的解决方案.. ;)(或已经准备好/完成的 cpan 模块)。
-
metacpan.org/pod/Path::Iterator::Rule 有一个不错的 API。值得一试。
标签: perl