use strict;
use warnings;
use feature 'say';
use Cwd qw/abs_path getcwd/;
use File::HomeDir;
my $path = 'foo/../bar';
if($path =~ /^~/) {
my $home = File::HomeDir->my_home;
$path =~ s/^~/$home/;
}
if($path !~ m!^/!) {
$path = getcwd . "/$path";
}
my $full_path = abs_path($path);
if(defined $full_path && -d $full_path) {
say "$full_path exists";
} else {
say "$path is non-existant";
}
File::Homedir
당신은 사용자 홈 디렉토리를 얻을 수 있습니다, 당신은 다음 경로에 물결표를 교체 할 수 있습니다.
이 시점의 경로가 /
(상대 경로)로 시작하지 않는 경우 절대 경로를 얻으려면 현재 작업 디렉토리 앞에 getcwd
을 추가하십시오.
완료하면 abs_path
을 통해 전달하여 .
및 ..
과 같은 기호 및 심볼릭 링크를 해결할 수 있습니다.
마지막으로 -d
으로 테스트하여 결과 경로가 있는지 확인할 수 있습니다.
"루트 경로"라고 부르는 것을 일반적으로 절대 경로라고하며 "비 루트 경로"를 상대 경로라고합니다. – ThisSuitIsBlackNot
절대 경로는 물결표 확장 후 슬래시로 시작하는 경로입니다. 물결표 또는 슬래시를 찾아 바로 가기를 만들 수 있으며 나중에 코드에서 잘못된 물결표 확장을 별도로 처리 할 수 있습니다. – tripleee
@ tripleee 물결표에주의하십시오. 모든 프로그램이 $ HOME을 의미하는 것으로 해석하지는 않습니다. 'perl -Fileile :: Find -e '를 찾아보십시오 (sub {print "$ File :: Find :: name \ n";}, "~");''--- 아무것도 출력하지 않지만 분명히 가지고 있습니다. '~'에있는 파일들. – Robert