다음과 같은 코드를 생각해 내 현재 디렉토리가 c:\parentdir\Source
(자본 'S'를주의를) 인 경우Windows에서 Perl을 사용하면 어떻게 chdir 다음에 정확한 대소 문자를 구할 수 있습니까?
print cwd . "\n";
$str= "../source"; # note the lower case 's'
chdir($str);
print cwd . "\n";
을, 이것의 출력은 다음과 같습니다
는c:/parentdir/Source c:/parentdir/source
이의 서브 루틴에 문제가 발생 폴더 이름의 올바른 대소 문자를 구별하는 광산. $ str은 서브 루틴으로 전달되므로, 대소 문자가 올바른지 미리 알 수는 없습니다. $str
과 일치하는 경로의 대소 문자가 정확한 이름을 어떻게 결정합니까? 여기
더 상세 :
- 난
../source
병적 예임을 알지만 문제를 설명하기 위해 그 역할을한다.$str
이 현재 폴더가 아닌 폴더를 요청하는 경우에도 발생합니다.rel2abs
,$str
에 글로브 검색, 등,하지만 그들은 모두를 포함 - 내가 시도 다양한 옵션 대신 "
Source
"의 "source
"를 반환 것 같다. - 모든 디렉토리에 대해
$str/..
을 검색하고 모두를 절대 경로로 변환하고 절대 경로 버전$str
, 과 비교해보십시오.하지만 해킹처럼 보입니다. 나는 더 우아한 뭔가가 있기를 바랬다.
그것은 잘못이 아니다. 보통 NTFS가 다르게 구성되어 있지 않으면 Windows 파일 시스템은 대소 문자를 구분하지 않습니다. – m0skit0
절대적으로 사실입니다. 불행히도, 내 서브 루틴은 단순히 파일 시스템을 조작하는 것 이외의 이유로 올바른 대소 문자를 필요로합니다. 따라서 Windows와 Perl은 상관하지 않지만 필연적으로해야합니다. – Craig
대소 문자를 구별하지 않지만 예 * 대소 문자를 구분하지 않습니다 *. 파일이'Foo'로 생성되면'foo'를 사용하여 접근 할 수 있지만 시스템은 그 이름이'Foo'임을 압니다. – ikegami