문제

사용자의 홈 디렉토리의 파일이 존재하는지 확인해야하므로 파일 확인을 사용하십시오.

if ( -e "~/foo.txt" ) {
   print "yes, it exists!" ;
}

호출 된 파일이 있지만 foo.txt 사용자의 홈 디렉토리에서 Perl은 항상 그러한 파일이나 디렉토리가 없다고 불평합니다. "~"를 대체 할 때 /홈/지미 (사용자가 지미라고 가정 해 봅시다.) 그러면 Perl은 올바른 평결을 제공합니다.

왜 "~"가 Perl에서 작동하지 않는지 설명하고 사용자의 홈 디렉토리를 찾는 Perl의 방법을 알려 주시겠습니까?

도움이 되었습니까?

해결책

~ a bash-a보다는 perl-ism이 작동하지 않는 이유입니다. 당신이 유닉스 유형 시스템에있는 것 같다는 것을 감안할 때 가장 쉬운 해결책은 $HOME 환경 변수 : 예 :

if ( -e $ENV{"HOME"} . "/foo.txt" ) {
    print "yes ,it exists!" ;
}

그리고 네, 사용자가 변경할 수 있다는 것을 알고 있습니다. $HOME 환경 변수이지만 그들이하고있는 일을 알고 있다고 가정합니다. 그렇지 않다면, 그들은 그들이 얻는 모든 것을받을 자격이있다 :-)

당신이 그것을하고 싶다면 오른쪽 방법, 당신은 조사 할 수 있습니다 파일 :: homedir, 훨씬 더 플랫폼에 정통합니다. 다음 스크립트에서 작동하는 것을 볼 수 있습니다. chkfile.pl:

use File::HomeDir;
$fileSpec = File::HomeDir->my_home . "/foo.txt";
if ( -e $fileSpec ) {
    print "Yes, it exists!\n";
} else {
    print "No, it doesn't!\n";
}

그리고 성적표 :

pax$ touch ~/foo.txt ; perl chkfile.pl
Yes, it exists!

pax$ rm -rf ~/foo.txt ; perl chkfile.pl
No, it doesn't!

다른 팁

모두가 어떻게 놓친 지 잘 모르겠습니다 파일 :: homedir. 그것은 당신이 생각해야 할 모든 구피 예외에 대해 아무도 모르기 때문에 쉽게 들리는 어려운 작업 중 하나입니다. Perl과 함께 제공되지 않으므로 직접 설치해야합니다.

홈 디렉토리를 알면 필요한 경로를 구성하십시오. 파일 :: 사양:

 use File::HomeDir qw(home);
 use File::Spec::Functions qw(catfile);

 print "The path is ", catfile( home(), 'foo.txt' ), "\n";

당신은 할 수 있습니다 글로벌 Tilde, glob('~/foo.txt') 작동해야합니다. 또는 사용할 수 있습니다 파일 :: 저장 :: 홈 다른 시스템을 처리 해야하는 모듈.

사용자의 홈 디렉토리는 저장됩니다 /etc/passwd. 정보를 얻는 가장 좋은 방법은 getpw* 기능:

#!/usr/bin/perl 

use strict;
use warnings;

print "uid:", (getpwuid 501)[7], "\n",
    "name:", (getpwnam "cowens")[7], "\n";

특정 문제를 해결하려면이 코드를 사용해보십시오.

if ( -e (getpwuid $>)[7] . "/foo.txt" ) {
   print "yes ,it exists!";
}

노력하다 File::Path::Expand.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top